Re: Pronouns in programming language?

"Charles E. Bortle, Jr." <cbrtjr@ix.netcom.com>
6 Mar 2000 00:22:12 -0500

          From comp.compilers

Related articles
[7 earlier articles]
Re: Pronouns in programming language? rkrayhawk@aol.com (2000-02-28)
Re: Pronouns in programming language? ele@freesurf.ch (H. Ellenberger) (2000-02-28)
Re: Pronouns in programming language? torbenm@diku.dk (2000-03-03)
Re: Pronouns in programming language? schairer@dai.ed.ac.uk (Axel Schairer) (2000-03-03)
Re: Pronouns in programming language? jejones@microware.com (James Jones) (2000-03-03)
Re: Pronouns in programming language? cbrtjr@ix.netcom.com (Charles E. Bortle, Jr.) (2000-03-06)
Re: Pronouns in programming language? cbrtjr@ix.netcom.com (Charles E. Bortle, Jr.) (2000-03-06)
Re: Pronouns in programming language? mal@bewoner.dma.be (Lieven Marchand) (2000-03-06)
Re: Pronouns in programming language? carles.blas@uab.es (Carles Blas Anglada) (2000-03-06)
Re: Pronouns in programming language? zorn@microsoft.com (Ben Zorn) (2000-03-06)
Re: Pronouns in programming language? nr@labrador.eecs.harvard.edu (2000-03-06)
Re: Pronouns in programming language? neitzel@gaertner.de (2000-03-06)
Re: Pronouns in programming language? joachim.durchholz@halstenbach.com.or.de (Joachim Durchholz) (2000-03-06)
[2 later articles]
| List of all articles for this month |

From: "Charles E. Bortle, Jr." <cbrtjr@ix.netcom.com>
Newsgroups: comp.compilers
Date: 6 Mar 2000 00:22:12 -0500
Organization: MindSpring Enterprises
References: 00-02-149 00-02-154
Keywords: syntax, design

Hello,


(This is somewhat long...)


<pwagle@my-deja.com> wrote in message news:00-02-154@comp.compilers...
> John Fremlin <vii@altern.org> wrote:
>
> Perl string pattern matching can be a different story. There you us
> what are called "regular expressions" to match strings, possibly
> saving pieces of the matched string. The pieces are stored in
> numbered variables -- the first piece in "$1", the second in "$2", and
> so forth. The problem is that if you execute another command that
> modifies these variables, all the original values are lost. After
> getting burned my this a couple times while "evolving" Perl programs,
> I learned just to assign all the numbered variables to named variables
> (for example, "$tag = $1 ; $value = $2 ;" etc.). And hence my
> nervousness about adjacency rules a couple paragraphs back.


The input language FMQ for the FMQ and LLGen written by Jon Mauney at
the University of Wisconsin at Madison uses this approach to indicate
which semantic stack entries are to be used for which parameters of
the semantic routines called by the LL(1) parser driver which uses the
tables generated by FMQ and LLGen.


I have never used FMQ nor LLGen, but I wrote my own parser generator
which takes the FMQ language as its input. I generate a semantic
dispatch routine, which is Included in the Pascal source for the
semantic processing module of the compiler I am writing. In order to
associate the correct $1, $2, etc with the appropriate parameter in
the acutal call to the routines in the dispatcher, I use a
thunking-like approach. I have created an array in the semantic
module:


    ASP : ARRAY [1..MAX_SEMANTIC_ACTION_PARAMS] OF SEMANTIC_RECORD_POINTER;
(* ACTION SYMBOL PARAMETERS *)


(MAX_SEMANTIC_ACTION_PARAMS is a constant that I have picked as the
max number of params that any semantic action routine can use, so it
is a fixed value and not generated by the parse generator.)


The numeric value of the $ param is used to generate an index into ASP
so that the appropriate semantic record pointer is accessed for each
param of the called semantic routine.


The pointers to the appropriate semantic stack entries get put into
the corrrect ASP entries by the parser when it is processing a
semantic actiton symbol such as SA_PROCESS_CONSTANT_DEFINITION($1, $2,
$3) in the routine below:


        PROCEDURE PROCESS_ANY_SEMANTIC_ACTION_PARAMETERS_ON_STACK;
        VAR
            J : INTEGER;
            TOP_TOKEN : SYNTAX_TOKEN;
            SEM_STACK_INDEX : INTEGER;
            PARAM_CODE : INTEGER;
        BEGIN
            FOR J := 1 TO MAX_SEMANTIC_ACTION_PARAMS DO ASP[J] := NIL;
            J := 1; (* RESET TO POINT TO ASP[1] *)
            LL_ONE_PARSE_STACK^.TOP(TOP_TOKEN);
            WHILE (TOP_TOKEN.GET_SYMBOL_TYPE = ACTION_SYMBOL_PARAM_FLAG) DO
            BEGIN
                LL_ONE_PARSE_STACK^.POP(TOP_TOKEN);
                PARAM_CODE := TOP_TOKEN.GET_SYMBOL_IDENT;
                IF PARAM_CODE = 0 THEN
                BEGIN
                    SEM_STACK_INDEX := LL_ONE_SEMANTIC_STACK^.GET_LEFT_INDEX;
                END
                ELSE
                BEGIN
                    PARAM_CODE := PARAM_CODE - 1;
                    SEM_STACK_INDEX := LL_ONE_SEMANTIC_STACK^.GET_RIGHT_INDEX +
PARAM_CODE;
                END;
                ASP[J] :=
LL_ONE_SEMANTIC_STACK^.GET_POINTER_TO_STACK_ENTRY(SEM_STACK_INDEX);
                INC(J);
                LL_ONE_PARSE_STACK^.TOP(TOP_TOKEN);
            END;
        END;




The dispatch routine generated by the parse table generator looks like
this (Note: I have manually commented out the calls for which I have
not written the semantic routine yet, thusly {-- --} the (* *)
comments and all of the code is generated by the parse table
generator. The white space between the implemented calls and the
unimplemented is also entered manually by me):


(**************************************************************************)
(* THIS IS A SEMANTIC ACTION DISPATCH FILE FOR LL(1) PARSER *)
(* GENERATED FROM INPUT FILE [PASDEF43.LL1] *)
(**************************************************************************)


PROCEDURE TAKE_SEMANTIC_ACTION(SEMANTIC_ACTION_REQUESTED : INTEGER);
    PROCEDURE PROCESS_UNIMPLIMENTED_SEMANTIC_ACTION_REQUEST;
    VAR
        SEMANTIC_ACTION_TOKEN_TEXT : STRING;
    BEGIN
{ WRITELN('UNIMPLIMENTED SEMANTIC ACTION REQUEST');}
        ACCESS_TOKEN_TEXT(SEMANTIC_ACTION_REQUESTED,
SEMANTIC_ACTION_TOKEN_TEXT);
        WRITELN('UNIMPLIMENTED SEMANTIC ACTION REQUEST'+' ['+
SEMANTIC_ACTION_TOKEN_TEXT+']');
    END;
BEGIN
    CASE SEMANTIC_ACTION_REQUESTED OF


(**************************************************************************)
(*------------------------------------------------------------------------*)


{-- ASC_LOGICAL_BEGINNING_OF_PROGRAM:
        SA_LOGICAL_BEGINNING_OF_PROGRAM;
    ASC_LOGICAL_END_OF_PROGRAM:
        SA_LOGICAL_END_OF_PROGRAM;
    ASC_PROCESS_PROGRAM_HEADING:
        SA_PROCESS_PROGRAM_HEADING(ASP[1], ASP[2]);
    ASC_PROCESS_EMPTY_PROGRAM_HEADING:
        SA_PROCESS_EMPTY_PROGRAM_HEADING;--}


    ASC_PROCESS_PROGRAM_ID:
        SA_PROCESS_PROGRAM_ID(ASP[1], ASP[2]);


{-- ASC_PROCESS_FID_LIST:
        SA_PROCESS_FID_LIST(ASP[1], ASP[2]);--}


    ASC_START_ID_LIST:
        SA_START_ID_LIST(ASP[1], ASP[2]);
    ASC_COPY:
        SA_COPY(ASP[1], ASP[2]);
    ASC_NEXT_ID_LIST_ENTRY:
        SA_NEXT_ID_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_ID:
        SA_PROCESS_ID(ASP[1], ASP[2]);


{-- ASC_PROCESS_LABEL_DECLARATION_PART:
        SA_PROCESS_LABEL_DECLARATION_PART(ASP[1]);
    ASC_START_LABEL_LIST:
        SA_START_LABEL_LIST(ASP[1], ASP[2]);
    ASC_NEXT_LABEL_LIST_ENTRY:
        SA_NEXT_LABEL_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_LABEL:
        SA_PROCESS_LABEL(ASP[1], ASP[2]);--}


    ASC_PROCESS_CONSTANT_DEFINITION:
        SA_PROCESS_CONSTANT_DEFINITION(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_CONSTANT:
        SA_PROCESS_CONSTANT(ASP[1], ASP[2]);


{-- ASC_PROCESS_FIGURATIVE_CONST:
        SA_PROCESS_FIGURATIVE_CONST(ASP[1], ASP[2]);--}


    ASC_PROCESS_BOOLEAN_CONST:
        SA_PROCESS_BOOLEAN_CONST(ASP[1], ASP[2]);
    ASC_PROCESS_SIGNED_NUMBER:
        SA_PROCESS_SIGNED_NUMBER(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_UNSIGNED_NUMERIC_CONST:
        SA_PROCESS_UNSIGNED_NUMERIC_CONST(ASP[1], ASP[2]);
    ASC_PROCESS_INTEGER_CONST:
        SA_PROCESS_INTEGER_CONST(ASP[1], ASP[2]);
    ASC_PROCESS_REAL_CONST:
        SA_PROCESS_REAL_CONST(ASP[1], ASP[2]);
    ASC_PROCESS_CONSTANT_ID:
        SA_PROCESS_CONSTANT_ID(ASP[1], ASP[2]);
    ASC_PROCESS_SIGNED_NUMERIC_CONST:
        SA_PROCESS_SIGNED_NUMERIC_CONST(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_SIGN:
        SA_PROCESS_SIGN(ASP[1], ASP[2]);
    ASC_PROCESS_TEXT_STRING:
        SA_PROCESS_TEXT_STRING(ASP[1], ASP[2]);
    ASC_PROCESS_STRING_CONST:
        SA_PROCESS_STRING_CONST(ASP[1], ASP[2]);


{-- ASC_PROCESS_CONTROL_CHAR:
        SA_PROCESS_CONTROL_CHAR(ASP[1], ASP[2]);--}


    ASC_PROCESS_TYPE_DEFINITION:
        SA_PROCESS_TYPE_DEFINITION(ASP[1], ASP[2]);
    ASC_PROCESS_SCALAR_TYPE:
        SA_PROCESS_SCALAR_TYPE(ASP[1], ASP[2]);


{-- ASC_PROCESS_SUBRANGE_TYPE_DESIGNATOR:
        SA_PROCESS_SUBRANGE_TYPE_DESIGNATOR(ASP[1], ASP[2]);--}


    ASC_PROCESS_RANGE_TYPE:
        SA_PROCESS_RANGE_TYPE(ASP[1]);
    ASC_PROCESS_TYPE_IDENTIFIER:
        SA_PROCESS_TYPE_IDENTIFIER(ASP[1], ASP[2]);


{-- ASC_PROCESS_PACKED_STRUCTURED_TYPE:
        SA_PROCESS_PACKED_STRUCTURED_TYPE(ASP[1], ASP[2]);--}


    ASC_PROCESS_STRING_TYPE:
        SA_PROCESS_STRING_TYPE(ASP[1], ASP[2]);


{-- ASC_PROCESS_STRING_SIZE_ALLOCATION:
        SA_PROCESS_STRING_SIZE_ALLOCATION(ASP[1], ASP[2]);
    ASC_PROCESS_ARRAY_TYPE:
        SA_PROCESS_ARRAY_TYPE(ASP[1], ASP[2], ASP[3]);
    ASC_START_INDEX_TYPE_LIST:
        SA_START_INDEX_TYPE_LIST(ASP[1], ASP[2]);
    ASC_NEXT_INDEX_TYPE_LIST_ENTRY:
        SA_NEXT_INDEX_TYPE_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_START_RECORD_TYPE:
        SA_START_RECORD_TYPE(ASP[1]);
    ASC_NEXT_RECORD_SECTION:
        SA_NEXT_RECORD_SECTION(ASP[1], ASP[2], ASP[3]);
    ASC_START_FIELD_IDENTIFIER_LIST:
        SA_START_FIELD_IDENTIFIER_LIST(ASP[1], ASP[2]);
    ASC_NEXT_FIELD_IDENTIFIER_LIST_ENTRY:
        SA_NEXT_FIELD_IDENTIFIER_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_START_VARIENT_LIST:
        SA_START_VARIENT_LIST(ASP[1], ASP[2]);
    ASC_NEXT_VARIENT_LIST_ENTRY:
        SA_NEXT_VARIENT_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_VARIENT:
        SA_PROCESS_VARIENT(ASP[1], ASP[2], ASP[3]);
    ASC_START_CASE_LABEL_LIST:
        SA_START_CASE_LABEL_LIST(ASP[1], ASP[2]);
    ASC_NEXT_CASE_LABEL_LIST_ENTRY:
        SA_NEXT_CASE_LABEL_LIST_ENTRY(ASP[1], ASP[2]);--}


    ASC_PROCESS_SET_TYPE:
        SA_PROCESS_SET_TYPE(ASP[1], ASP[2]);


{-- ASC_PROCESS_FILE_TYPE:
        SA_PROCESS_FILE_TYPE(ASP[1], ASP[2]);
    ASC_PROCESS_POINTER_TYPE:
        SA_PROCESS_POINTER_TYPE(ASP[1], ASP[2]);--}


    ASC_PROCESS_VARIABLE_DECLARATION:
        SA_PROCESS_VARIABLE_DECLARATION(ASP[1], ASP[2]);


{-- ASC_PROCESS_PARAMETER_GROUP:
        SA_PROCESS_PARAMETER_GROUP(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_PROCEDURE_CALL:
        SA_PROCESS_PROCEDURE_CALL(ASP[1], ASP[2]);
    ASC_PROCESS_ASSIGNMENT_OPERATION:
        SA_PROCESS_ASSIGNMENT_OPERATION(ASP[1], ASP[2]);
    ASC_PROCESS_PREDEFINED_MEMORY_ARRAY_REF:
        SA_PROCESS_PREDEFINED_MEMORY_ARRAY_REF(ASP[1], ASP[2], ASP[3], ASP[4]);
    ASC_PROCESS_PREDEFINED_PORT_ARRAY_REF:
        SA_PROCESS_PREDEFINED_PORT_ARRAY_REF(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_ARRAY_SUBSCRIPTS_REF:
        SA_PROCESS_ARRAY_SUBSCRIPTS_REF(ASP[1], ASP[2]);
    ASC_PROCESS_POINTER_REFERENCE:
        SA_PROCESS_POINTER_REFERENCE(ASP[1]);
    ASC_START_ARRAY_SUBSCRIPT_LIST:
        SA_START_ARRAY_SUBSCRIPT_LIST(ASP[1], ASP[2]);
    ASC_NEXT_ARRAY_SUBSCRIPT_LIST_ENTRY:
        SA_NEXT_ARRAY_SUBSCRIPT_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_FIELD_REF:
        SA_PROCESS_FIELD_REF(ASP[1], ASP[2]);
    ASC_PROCESS_SYSTEM_VARIABLE:
        SA_PROCESS_SYSTEM_VARIABLE(ASP[1], ASP[2]);
    ASC_PROCESS_INFIX_OPERATION:
        SA_PROCESS_INFIX_OPERATION(ASP[1], ASP[2], ASP[3], ASP[4]);
    ASC_PROCESS_RELATIONAL_OPERATOR:
        SA_PROCESS_RELATIONAL_OPERATOR(ASP[1], ASP[2]);
    ASC_PROCESS_ADDING_OPERATOR:
        SA_PROCESS_ADDING_OPERATOR(ASP[1], ASP[2]);
    ASC_PROCESS_MULTIPLYING_OPERATOR:
        SA_PROCESS_MULTIPLYING_OPERATOR(ASP[1], ASP[2]);
    ASC_PROCESS_UNARY_NOT_OPERATION:
        SA_PROCESS_UNARY_NOT_OPERATION(ASP[1], ASP[2]);
    ASC_PROCESS_UNARY_SIGN_OPERATION:
        SA_PROCESS_UNARY_SIGN_OPERATION(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_SET_CONSTRUCTOR:
        SA_PROCESS_SET_CONSTRUCTOR(ASP[1], ASP[2]);
    ASC_START_SET_ELEMENT_LIST:
        SA_START_SET_ELEMENT_LIST(ASP[1], ASP[2]);
    ASC_NEXT_SET_ELEMENT_LIST_ENTRY:
        SA_NEXT_SET_ELEMENT_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_SET_ELEMENT_RANGE_BEGINNNG:
        SA_PROCESS_SET_ELEMENT_RANGE_BEGINNNG(ASP[1], ASP[2]);
    ASC_PROCESS_SET_ELEMENT_RANGE_ENDING:
        SA_PROCESS_SET_ELEMENT_RANGE_ENDING(ASP[1], ASP[2]);
    ASC_PROCESS_ACTUAL_PROC_OR_FUNC_PARAM_LIST:
        SA_PROCESS_ACTUAL_PROC_OR_FUNC_PARAM_LIST(ASP[1], ASP[2]);
    ASC_START_ACTUAL_PROC_OR_FUNC_PARAM_LIST:
        SA_START_ACTUAL_PROC_OR_FUNC_PARAM_LIST(ASP[1], ASP[2]);
    ASC_NEXT_ACTUAL_PROC_OR_FUNC_PARAM_LIST_ENTRY:
        SA_NEXT_ACTUAL_PROC_OR_FUNC_PARAM_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_GOTO_STMT:
        SA_PROCESS_GOTO_STMT(ASP[1]);
    ASC_PROCESS_INLINE_STMT:
        SA_PROCESS_INLINE_STMT(ASP[1]);
    ASC_START_INLINE_ELEMENT_LIST:
        SA_START_INLINE_ELEMENT_LIST(ASP[1], ASP[2]);
    ASC_NEXT_INLINE_ELEMENT_LIST_ENTRY:
        SA_NEXT_INLINE_ELEMENT_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_INLINE_LIST_ELEMENT_ID:
        SA_PROCESS_INLINE_LIST_ELEMENT_ID(ASP[1], ASP[2]);
    ASC_PROCESS_LOCATION_COUNTER_REF:
        SA_PROCESS_LOCATION_COUNTER_REF(ASP[1], ASP[2]);
    ASC_PROCESS_SIGNED_LOCATION_COUNTER_OFFSET:
        SA_PROCESS_SIGNED_LOCATION_COUNTER_OFFSET(ASP[1], ASP[2], ASP[3]);
    ASC_START_IF:
        SA_START_IF(ASP[1]);
    ASC_IF_TEST:
        SA_IF_TEST(ASP[1], ASP[2]);
    ASC_GEN_OUT_LABEL:
        SA_GEN_OUT_LABEL(ASP[1]);
    ASC_GEN_JUMP:
        SA_GEN_JUMP;
    ASC_GEN_ELSE_LABEL:
        SA_GEN_ELSE_LABEL(ASP[1], ASP[2]);
    ASC_START_CASE_ELEMENT_LIST:
        SA_START_CASE_ELEMENT_LIST(ASP[1], ASP[2]);
    ASC_NEXT_CASE_ELEMENT_LIST_ENTRY:
        SA_NEXT_CASE_ELEMENT_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_START_RECORD_VARIABLE_LIST:
        SA_START_RECORD_VARIABLE_LIST(ASP[1], ASP[2]);
    ASC_NEXT_RECORD_VARIABLE_LIST_ENTRY:
        SA_NEXT_RECORD_VARIABLE_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_STD_INPUT_PROCEDURE_CALL:
        SA_PROCESS_STD_INPUT_PROCEDURE_CALL(ASP[1], ASP[2]);
    ASC_START_STD_INPUT_PROCEDURE_PARAM_LIST:
        SA_START_STD_INPUT_PROCEDURE_PARAM_LIST(ASP[1], ASP[2]);
    ASC_NEXT_STD_INPUT_PROCEDURE_PARAM_LIST_ENTRY:
        SA_NEXT_STD_INPUT_PROCEDURE_PARAM_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_STD_OUTPUT_PROCEDURE_CALL:
        SA_PROCESS_STD_OUTPUT_PROCEDURE_CALL(ASP[1], ASP[2]);
    ASC_PROCESS_STD_OUTPUT_PROCEDURE_PARAM_ELEMENT:
        SA_PROCESS_STD_OUTPUT_PROCEDURE_PARAM_ELEMENT(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_STD_OUTPUT_FIELD_WIDTH_SPEC:
        SA_PROCESS_STD_OUTPUT_FIELD_WIDTH_SPEC(ASP[1], ASP[2]);
    ASC_PROCESS_STD_OUTPUT_FIELD_DECIMAL_PLACES_SPEC:
        SA_PROCESS_STD_OUTPUT_FIELD_DECIMAL_PLACES_SPEC(ASP[1], ASP[2]);
    ASC_PROCESS_STANDARD_ARITHMETIC_FUNCTION_REF:
        SA_PROCESS_STANDARD_ARITHMETIC_FUNCTION_REF(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_STANDARD_SCALAR_FUNCTION_REF:
        SA_PROCESS_STANDARD_SCALAR_FUNCTION_REF(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_STANDARD_TRANSFER_FUNCTION_REF:
        SA_PROCESS_STANDARD_TRANSFER_FUNCTION_REF(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_DELETE_STD_STRING_PROCEDURE_CALL:
        SA_PROCESS_DELETE_STD_STRING_PROCEDURE_CALL(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_INSERT_STD_STRING_PROCEDURE_CALL:
        SA_PROCESS_INSERT_STD_STRING_PROCEDURE_CALL(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_STR_STD_STRING_PROCEDURE_CALL:
        SA_PROCESS_STR_STD_STRING_PROCEDURE_CALL(ASP[1], ASP[2]);
    ASC_PROCESS_VAL_STD_STRING_PROCEDURE_CALL:
        SA_PROCESS_VAL_STD_STRING_PROCEDURE_CALL(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_STD_STRING_FUNCTION:
        SA_PROCESS_STD_STRING_FUNCTION;
    ASC_PROCESS_CONCAT_STD_STRING_FUNCTION_REF:
        SA_PROCESS_CONCAT_STD_STRING_FUNCTION_REF(ASP[1], ASP[2]);
    ASC_PROCESS_COPY_STD_STRING_FUNCTION_REF:
        SA_PROCESS_COPY_STD_STRING_FUNCTION_REF(ASP[1], ASP[2], ASP[3], ASP[4]);
    ASC_PROCESS_LENGTH_STD_STRING_FUNCTION_REF:
        SA_PROCESS_LENGTH_STD_STRING_FUNCTION_REF(ASP[1], ASP[2]);
    ASC_PROCESS_POS_STD_STRING_FUNCTION_REF:
        SA_PROCESS_POS_STD_STRING_FUNCTION_REF(ASP[1], ASP[2], ASP[3]);
    ASC_START_STRING_EXPRESSION_LIST:
        SA_START_STRING_EXPRESSION_LIST(ASP[1], ASP[2]);
    ASC_NEXT_STRING_EXPRESSION_LIST_ENTRY:
        SA_NEXT_STRING_EXPRESSION_LIST_ENTRY(ASP[1], ASP[2]);
    ASC_PROCESS_BLOCK_RW_RETURN_RESULT:
        SA_PROCESS_BLOCK_RW_RETURN_RESULT;
    ASC_PROCESS_MAXAVAIL_STD_HEAP_CONTROL_FUNCTION:
        SA_PROCESS_MAXAVAIL_STD_HEAP_CONTROL_FUNCTION(ASP[1]);
    ASC_PROCESS_MEMAVAIL_STD_HEAP_CONTROL_FUNCTION:
        SA_PROCESS_MEMAVAIL_STD_HEAP_CONTROL_FUNCTION(ASP[1]);
    ASC_PROCESS_PTR_STD_HEAP_CONTROL_FUNCTION:
        SA_PROCESS_PTR_STD_HEAP_CONTROL_FUNCTION(ASP[1], ASP[2]);
    ASC_PROCESS_QUASI_STD_SCREEN_RELATED_PROCEDURE_CALL:
        SA_PROCESS_QUASI_STD_SCREEN_RELATED_PROCEDURE_CALL(ASP[1]);
    ASC_PROCESS_GOTOXY_QUASI_STD_SCREEN_RELATED_PROCEDURE_CALL:
        SA_PROCESS_GOTOXY_QUASI_STD_SCREEN_RELATED_PROCEDURE_CALL(ASP[1],
ASP[2]);
    ASC_PROCESS_QUASI_STD_SCREEN_RELATED_FUNCTION_REF:
        SA_PROCESS_QUASI_STD_SCREEN_RELATED_FUNCTION_REF(ASP[1], ASP[2]);
    ASC_PROCESS_FILLCHAR_QUASI_STD_MISC_PROCEDURE_CALL:
        SA_PROCESS_FILLCHAR_QUASI_STD_MISC_PROCEDURE_CALL(ASP[1], ASP[2],
ASP[3]);
    ASC_PROCESS_QUASI_STD_MISC_PROCEDURE_CALL:
        SA_PROCESS_QUASI_STD_MISC_PROCEDURE_CALL(ASP[1]);
    ASC_PROCESS_DELAY_QUASI_STD_MISC_PROCEDURE_CALL:
        SA_PROCESS_DELAY_QUASI_STD_MISC_PROCEDURE_CALL(ASP[1]);
    ASC_PROCESS_MOVE_QUASI_STD_MISC_PROCEDURE_CALL:
        SA_PROCESS_MOVE_QUASI_STD_MISC_PROCEDURE_CALL(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_QUASI_STD_MISC_FUNCTION_REF:
        SA_PROCESS_QUASI_STD_MISC_FUNCTION_REF(ASP[1], ASP[2], ASP[3]);
    ASC_PROCESS_PARAMETERLESS_QUASI_STD_MISC_FUNCTION_REF:
        SA_PROCESS_PARAMETERLESS_QUASI_STD_MISC_FUNCTION_REF(ASP[1], ASP[2]);
    ASC_PROCESS_RANDOM_QUASI_STD_MISC_FUNCTION_REF:
        SA_PROCESS_RANDOM_QUASI_STD_MISC_FUNCTION_REF(ASP[1], ASP[2]);
    ASC_PROCESS_INTEGER_UPPER_RAMDOM_LIMIT:
        SA_PROCESS_INTEGER_UPPER_RAMDOM_LIMIT(ASP[1], ASP[2]);
    ASC_PROCESS_REAL_RANDOM_LIMIT:
        SA_PROCESS_REAL_RANDOM_LIMIT(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_STRING:
        SA_CHECK_IF_TYPE_IS_STRING(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_SCALAR:
        SA_CHECK_IF_TYPE_IS_SCALAR(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_SCALAR_OR_POINTER:
        SA_CHECK_IF_TYPE_IS_SCALAR_OR_POINTER(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_INTEGER:
        SA_CHECK_IF_TYPE_IS_INTEGER(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_REAL:
        SA_CHECK_IF_TYPE_IS_REAL(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_REAL_OR_INTEGER:
        SA_CHECK_IF_TYPE_IS_REAL_OR_INTEGER(ASP[1], ASP[2]);
    ASC_CHECK_IF_BASE_TYPE_IS_UNTYPED:
        SA_CHECK_IF_BASE_TYPE_IS_UNTYPED(ASP[1], ASP[2]);
    ASC_CHECK_IF_BASE_TYPE_IS_TEXT:
        SA_CHECK_IF_BASE_TYPE_IS_TEXT(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_FILE:
        SA_CHECK_IF_TYPE_IS_FILE(ASP[1], ASP[2]);
    ASC_CHECK_IF_POINTER_VARIABLE:
        SA_CHECK_IF_POINTER_VARIABLE(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_BOOLEAN:
        SA_CHECK_IF_TYPE_IS_BOOLEAN(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_CHAR_OR_BYTE:
        SA_CHECK_IF_TYPE_IS_CHAR_OR_BYTE(ASP[1], ASP[2]);
    ASC_CHECK_IF_VARIABLE_OR_TYPE_IDENTIFIER:
        SA_CHECK_IF_VARIABLE_OR_TYPE_IDENTIFIER(ASP[1], ASP[2]);
    ASC_CHECK_IF_TYPE_IS_CHAR:
        SA_CHECK_IF_TYPE_IS_CHAR(ASP[1], ASP[2]);--}


    ASC_FINISH_PROGRAM:
        SA_FINISH_PROGRAM;
    ASC_START_PROGRAM:
        SA_START_PROGRAM;


(*------------------------------------------------------------------------*)
(**************************************************************************)


      ELSE PROCESS_UNIMPLIMENTED_SEMANTIC_ACTION_REQUEST;
  END; (* END OF CASE *)
END;


(**************************************************************************)
(* THIS IS END OF A SEMANTIC ACTION DISPATCH FILE FOR LL(1) PARSER *)
(**************************************************************************)




--
Charles cbrtjr@ix.netcom.com
* http://pw2.netcom.com/~cbrtjr/wrdthing.html *


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.