        .TITLE CALCULATOR PARSE TABLES
        .IDENT 'Version 1 Mod 0'

;       define the TPARSE control symbols

        $TPADEF

;       define the states, transitions amd keywords

        $INIT_STATE CALCULATOR_STATES,CALCULATOR_KEYWORDS
        $STATE COMMANDS
        $TRAN  TPA$_EOS,         TPA$_EXIT
        $TRAN  '!',              TPA$_EXIT, DISPLAY_TOKEN
        $TRAN  '@',             FILE_PARAM, DISPLAY_TOKEN
        $TRAN  'DEBUG',          TPA$_EXIT, TOGGLE_DEBUG_FLAG
        $TRAN  'DISPLAY',    DISPLAY_PARAM, DISPLAY_TOKEN
        $TRAN  'EXIT',           TPA$_EXIT, EXECUTE_EXIT_COMMAND
        $TRAN  'HELP',           TPA$_EXIT, DISPLAY_HELP
        $TRAN  'SHOW',          SHOW_PARAM, DISPLAY_TOKEN
        $TRAN  !INPUT,                    , EXECUTE_INPUT_COMMAND
        $TRAN  !ASSIGNMENT,               , EXECUTE_ASSIGNMENT_COMMAND
        $TRAN  !EXP_COMMAND,     TPA$_EXIT, EXECUTE_EXPRESSION_COMMAND
        $TRAN  TPA$_LAMBDA,      TPA$_EXIT, UNKNOWN_COMMAND


        $STATE FILE_PARAM
        $TRAN  TPA$_FILESPEC,             , COMMAND_FILE
        $TRAN  TPA$_EOS,         TPA$_EXIT,
        $STATE
        $TRAN  <','>,           FILE_PARAM, DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,     FILE_PARAM,


        $STATE SHOW_PARAM
        $TRAN  TPA$_EOS,         TPA$_EXIT, SHOW_ALL_SYMBOLS
        $TRAN  TPA$_LAMBDA,               ,            
        $STATE SHOW_LOOP
        $TRAN  TPA$_SYMBOL,               , SHOW_A_SYMBOL
        $TRAN  TPA$_EOS,         TPA$_EXIT,
        $STATE
        $TRAN  <','>,            SHOW_LOOP, DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,      SHOW_LOOP,


        $STATE DISPLAY_PARAM
        $TRAN  'NOFILE',                  , DISPLAY_NOFILE
        $TRAN  'NOFILES',                 , DISPLAY_NOFILE
        $TRAN  'FILE',                    , DISPLAY_FILE
        $TRAN  'FILES',                   , DISPLAY_FILE
        $TRAN  !PRECISION,                , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,      TPA$_EXIT, DISPLAY_UNKNOWN_PARAMETER
        $STATE
        $TRAN  TPA$_EOS,         TPA$_EXIT,
        $TRAN  <','>,        DISPLAY_PARAM, DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,  DISPLAY_PARAM,


        $STATE PRECISION
        $TRAN  'PRECISION',               , DEFAULT_PRECISION
        $STATE
        $TRAN  '=',                       , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,      TPA$_EXIT,
        $STATE
        $TRAN  TPA$_DECIMAL,     TPA$_EXIT, DEFINE_PRECISION


        $STATE INPUT            
        $TRAN  'INPUT',                   , INPUT_SETUP
        $STATE
        $TRAN  !INPUT_QUALIFIER,          ,
        $STATE
        $TRAN  TPA$_SYMBOL,               , GET_INPUT_SYMBOL
        $STATE
        $TRAN  !QUOTED_STRING,            , GET_INPUT_PROMPT
        $STATE
        $TRAN  TPA$_EOS,         TPA$_EXIT,


        $STATE INPUT_QUALIFIER
        $TRAN  '/',                       , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,      TPA$_EXIT,
        $STATE
        $TRAN  'FLOAT',    INPUT_QUALIFIER, INPUT_FLOAT
        $TRAN  'INTEGER',  INPUT_QUALIFIER, INPUT_INTEGER
        $TRAN  'DEFAULT',                 , DISPLAY_TOKEN
        $STATE
        $TRAN  '=',                       , DISPLAY_TOKEN
        $STATE
        $TRAN  !NUMBER,    INPUT_QUALIFIER, INPUT_DEFAULT


        $STATE ASSIGNMENT
        $TRAN  !SYMBOL,                  , ASSIGNMENT_SYMBOL
        $STATE
        $TRAN  '=',                      , ASSIGNMENT_OPERATOR
        $STATE
        $TRAN  !EXPRESSION,              , EVALUATE_EXPRESSION
        $STATE
        $TRAN  TPA$_EOS,        TPA$_EXIT


        $STATE EXP_COMMAND
        $TRAN  !EXPRESSION,              , EVALUATE_EXPRESSION
        $STATE
        $TRAN  TPA$_EOS,        TPA$_EXIT


        $STATE EXPRESSION
        $TRAN  '+',                      , UNARY_OPERATOR
        $TRAN  '-',                      , UNARY_OPERATOR
        $TRAN  TPA$_LAMBDA,              ,
        $STATE E_LOOP
        $TRAN  !TERM,                    , DISPLAY_TERM
        $STATE
        $TRAN  '+',                E_LOOP, BINARY_OPERATOR
        $TRAN  '-',                E_LOOP, BINARY_OPERATOR
        $TRAN  TPA$_LAMBDA,     TPA$_EXIT


        $STATE TERM
        $TRAN  !FACTOR,                  , DISPLAY_FACTOR
        $STATE
        $TRAN  '*',                  TERM, BINARY_OPERATOR
        $TRAN  '/',                  TERM, BINARY_OPERATOR
        $TRAN  TPA$_LAMBDA,     TPA$_EXIT


        $STATE FACTOR
        $TRAN  !FUNCTION,       TPA$_EXIT, DISPLAY_TOKEN
        $TRAN  !NUMBER,         TPA$_EXIT, NUMBER_OPERAND
        $TRAN  !SYMBOL,         TPA$_EXIT, SYMBOL_OPERAND
        $TRAN  '(',                      , PARENTHESIS
        $STATE
        $TRAN  !EXPRESSION,              , DISPLAY_EXPRESSION
        $STATE
        $TRAN  ')',             TPA$_EXIT, PARENTHESIS


        $STATE SYMBOL
        $TRAN  TPA$_SYMBOL,     TPA$_EXIT, TEST_SYMBOL


        $STATE FUNCTION
        $TRAN  'ABS',        FUNC_ONE_ARG, ABS_FUNCTION
        $TRAN  'ACOS',       FUNC_ONE_ARG, ACOS_FUNCTION
        $TRAN  'ASIN',       FUNC_ONE_ARG, ASIN_FUNCTION
        $TRAN  'ATAN',       FUNC_ONE_ARG, ATAN_FUNCTION 
        $TRAN  'CEILING',    FUNC_ONE_ARG, CEILING_FUNCTION
        $TRAN  'COS',        FUNC_ONE_ARG, COS_FUNCTION
        $TRAN  'COSH',       FUNC_ONE_ARG, COSH_FUNCTION
        $TRAN  'EXP',        FUNC_ONE_ARG, EXP_FUNCTION
        $TRAN  'FLT',        FUNC_ONE_ARG, FLT_FUNCTION
        $TRAN  'FLOOR',      FUNC_ONE_ARG, FLOOR_FUNCTION
        $TRAN  'INT',        FUNC_ONE_ARG, INT_FUNCTION
        $TRAN  'LN',         FUNC_ONE_ARG, LN_FUNCTION
        $TRAN  'LOG',        FUNC_ONE_ARG, LOG_FUNCTION
        $TRAN  'POW',        FUNC_TWO_ARG, POW_FUNCTION
        $TRAN  'RAND',       FUNC_ONE_ARG, RAND_FUNCTION
        $TRAN  'MAX',        FUNC_TWO_ARG, MAX_FUNCTION
        $TRAN  'MIN',        FUNC_TWO_ARG, MIN_FUNCTION
        $TRAN  'MOD',        FUNC_TWO_ARG, MOD_FUNCTION
        $TRAN  'SEED',       FUNC_ONE_ARG, SEED_FUNCTION
        $TRAN  'SIN',        FUNC_ONE_ARG, SIN_FUNCTION
        $TRAN  'SINH',       FUNC_ONE_ARG, SINH_FUNCTION
        $TRAN  'SQRT',       FUNC_ONE_ARG, SQRT_FUNCTION
        $TRAN  'TAN',        FUNC_ONE_ARG, TAN_FUNCTION
        $TRAN  'TANH',       FUNC_ONE_ARG, TANH_FUNCTION


        $STATE FUNC_ONE_ARG 
        $TRAN  '(',                      , PARENTHESIS
        $STATE
        $TRAN  !EXPRESSION,              , DISPLAY_EXPRESSION
        $STATE
        $TRAN  ')',             TPA$_EXIT, PARENTHESIS


        $STATE FUNC_TWO_ARG
        $TRAN  '(',                      , PARENTHESIS
        $STATE
        $TRAN  !EXPRESSION,              , DISPLAY_EXPRESSION
        $STATE
        $TRAN  <','>,                    , END_EXPRESSION
        $STATE
        $TRAN  !EXPRESSION,              , DISPLAY_EXPRESSION
        $STATE
        $TRAN  ')',             TPA$_EXIT, PARENTHESIS


        $STATE NUMBER
        $TRAN  !STD_NUMBER,     TPA$_EXIT, STANDARD_NUMBER
        $TRAN  !OCT_NUMBER,     TPA$_EXIT, OCTAL_NUMBER
        $TRAN  !DEC_NUMBER,     TPA$_EXIT, DECIMAL_NUMBER
        $TRAN  !HEX_NUMBER,     TPA$_EXIT, HEXADECIMAL_NUMBER


        $STATE STD_NUMBER
        $TRAN  TPA$_DECIMAL,             , INTEGER_PART
        $STATE
        $TRAN  '.',                      , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,     TPA$_EXIT
        $STATE
        $TRAN  TPA$_DECIMAL,             , FRACTION_PART
        $TRAN  TPA$_LAMBDA,              ,
        $STATE
        $TRAN  'E',                      , DISPLAY_TOKEN
        $TRAN  'e',                      , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,     TPA$_EXIT
        $STATE
        $TRAN  '+',                      , DISPLAY_TOKEN
        $TRAN  '-',                      , DISPLAY_TOKEN
        $TRAN  TPA$_LAMBDA,              ,
        $STATE
        $TRAN  TPA$_DECIMAL,    TPA$_EXIT, EXPONENT_PART


        $STATE OCT_NUMBER
        $TRAN  '%',                      ,
        $STATE
        $TRAN  'O',                      ,
        $TRAN  'o',                      ,
        $STATE
        $TRAN  TPA$_OCTAL,      TPA$_EXIT,


        $STATE DEC_NUMBER
        $TRAN  '%',                      ,
        $STATE
        $TRAN  'D',                      ,
        $TRAN  'd',                      ,
        $STATE
        $TRAN  TPA$_DECIMAL,    TPA$_EXIT,


        $STATE HEX_NUMBER
        $TRAN  '%',                      ,
        $STATE
        $TRAN  'X',                      ,
        $TRAN  'x',                      ,
        $STATE
        $TRAN  TPA$_HEX,        TPA$_EXIT,


        $STATE QUOTED_STRING
        $TRAN  '"',                       , QUOTED_STRING_START
        $STATE  Q_LOOP
        $TRAN  '"',              TPA$_EXIT, QUOTED_STRING_END
        $TRAN  TPA$_ANY,            Q_LOOP,


        $END_STATE

        .END
