2000-08-06 01:40 UTC+0800 Ron Pinkas <ron@profit-master.com>

* source/compiler/harbour.slx
     ! Optimized rules, removed ~100 rules. Rules are simpler, smaller, and faster.

   * source/compiler/simplex.c
     + Added: bIgnoreWords (allows for reserve words check to be suspened).
     + Added: iLastToken to save last read Token
     + Added immediate call to CUSTOM_ACTION for Keys, Words, and Selfs, without having to reduce first (when requested).
     * Optimized Keys search to not check bNewLine on every iteration.
This commit is contained in:
Ron Pinkas
2000-08-06 08:47:06 +00:00
parent e7dc6932bd
commit a9f0be4e28
3 changed files with 419 additions and 328 deletions

View File

@@ -1,3 +1,13 @@
2000-08-06 01:40 UTC+0800 Ron Pinkas <ron@profit-master.com>
* source/compiler/harbour.slx
! Optimized rules, removed ~100 rules. Rules are simpler, smaller, and faster.
* source/compiler/simplex.c
+ Added: bIgnoreWords (allows for reserve words check to be suspened).
+ Added: iLastToken to save last read Token
+ Added immediate call to CUSTOM_ACTION for Keys, Words, and Selfs, without having to reduce first (when requested).
* Optimized Keys search to not check bNewLine on every iteration.
2000-08-04 23:15 GMT-3 Luiz Rafael Culik <culik@sl.conex.net>
* contrib/hbzlib/zlibapi1.c
* contrib/hbzlib/zipfile2.c

View File

@@ -77,7 +77,7 @@ DELIMITER_BELONGS_TO_TOKEN_IF_ONE_OF_THESE( "" );
/* Custom Action can be requested by setting reduction to LEX_CUSTOM_ACTION or lower. */
/* Intermediate Token needed to be expanded. */
#define HB_LIT_ACT -1000
#define HB_LIT_ACT -1001
/* Stream Pairs. */
DEFINE_STREAM_AS_ONE_OF_THESE {
@@ -89,7 +89,7 @@ DEFINE_STREAM_AS_ONE_OF_THESE {
START_NEW_LINE_IF_ONE_OF_THESE( "\n;" );
/* Intermediate Token neede to be expanded. */
#define _DOT_DOT_ -1001
#define _DOT_DOT_ 1000
SELF_CONTAINED_WORDS_ARE {
LEX_WORD( ".T." ) AS_TOKEN( TRUEVALUE ),
@@ -119,16 +119,39 @@ SELF_CONTAINED_WORDS_ARE {
};
/* Intermediate Key Words when ambigious. */
#define BEGIN_ 1001
#define PROCREQ_ 1002
#define WITH_ 1003
#define BEGIN_ 1001
#define PROCREQ_ 1002
#define WITH_ 1003
#define FIELD_ 1004
#define PRIVATE_ 1005
/* Suspend reserved words after these (waiting for Identifier). */
#define HB_EXTERN -1003
#define HB_DECLARE -1004
#define HB_PUBLIC -1005
#define HB_PRIVATE -1006
#define HB_LOCAL -1007
#define HB_MEMVAR -1008
#define HB_FIELD -1009
#define HB_PARAM -1010
#define HB_FOR -1011
/* When 2 identifiers are correct syntax like in class declaration, we have to temporarily store the 2nd identifier. */
#define HB_ID_ON_HOLD -1012
#define HB_MACRO_ERR -1013
#define HB_CHK_NEXT -1014
#define HB_CHK_EXIT -1015
#define HB_CHK_LOOP -1016
#define HB_CHK_IN -1017
/* Key Words. */
LANGUAGE_KEY_WORDS_ARE {
LEX_WORD( "FUNCTION" ) AS_TOKEN( FUNCTION ),
LEX_WORD( "PROCEDURE" ) AS_TOKEN( PROCEDURE ),
LEX_WORD( "RETURN" ) AS_TOKEN( RETURN ),
LEX_WORD( "LOCAL" ) AS_TOKEN( LOCAL ),
LEX_WORD( "LOCAL" ) AS_TOKEN( HB_LOCAL ),
LEX_WORD( "STATIC" ) AS_TOKEN( STATIC ),
LEX_WORD( "IF" ) AS_TOKEN( IF ),
LEX_WORD( "ELSE" ) AS_TOKEN( ELSE ),
@@ -136,29 +159,29 @@ LANGUAGE_KEY_WORDS_ARE {
LEX_WORD( "END" ) AS_TOKEN( END ),
LEX_WORD( "ENDIF" ) AS_TOKEN( ENDIF ),
LEX_WORD( "ANNOUNCE" ) AS_TOKEN( ANNOUNCE ),
LEX_WORD( "EXTERNAL" ) AS_TOKEN( EXTERN ),
LEX_WORD( "EXTERNAL" ) AS_TOKEN( HB_EXTERN ),
LEX_WORD( "INIT" ) AS_TOKEN( INIT ),
LEX_WORD( "EXIT" ) AS_TOKEN( EXITLOOP ),
LEX_WORD( "PUBLIC" ) AS_TOKEN( PUBLIC ),
LEX_WORD( "PUBLIC" ) AS_TOKEN( HB_PUBLIC ),
LEX_WORD( "CASE" ) AS_TOKEN( CASE ),
LEX_WORD( "OTHERWISE" ) AS_TOKEN( OTHERWISE ),
LEX_WORD( "ENDCASE" ) AS_TOKEN( ENDCASE ),
LEX_WORD( "ENDDO" ) AS_TOKEN( ENDDO ),
LEX_WORD( "MEMVAR" ) AS_TOKEN( MEMVAR ),
LEX_WORD( "MEMVAR" ) AS_TOKEN( HB_MEMVAR ),
LEX_WORD( "LOOP" ) AS_TOKEN( LOOP ),
LEX_WORD( "FOR" ) AS_TOKEN( FOR ),
LEX_WORD( "FOR" ) AS_TOKEN( HB_FOR ),
LEX_WORD( "NEXT" ) AS_TOKEN( NEXT ),
LEX_WORD( "PARAMETERS" ) AS_TOKEN( PARAMETERS ),
LEX_WORD( "PRIVATE" ) AS_TOKEN( PRIVATE ),
LEX_WORD( "PARAMETERS" ) AS_TOKEN( HB_PARAM ),
LEX_WORD( "PRIVATE" ) AS_TOKEN( HB_PRIVATE ),
LEX_WORD( "BEGIN" ) AS_TOKEN( BEGIN_ ),
LEX_WORD( "BREAK" ) AS_TOKEN( BREAK ),
LEX_WORD( "RECOVER" ) AS_TOKEN( RECOVER ),
LEX_WORD( "DO" ) AS_TOKEN( DO ),
LEX_WORD( "WHILE" ) AS_TOKEN( WHILE ),
LEX_WORD( "WITH" ) AS_TOKEN( WITH_ ),
LEX_WORD( "DECLARE" ) AS_TOKEN( DECLARE ),
LEX_WORD( "DECLARE" ) AS_TOKEN( HB_DECLARE ),
LEX_WORD( "_PROCREQ_" ) AS_TOKEN( PROCREQ_ ),
LEX_WORD( "FIELD" ) AS_TOKEN( FIELD )
LEX_WORD( "FIELD" ) AS_TOKEN( HB_FIELD )
};
/* Intermediate Words when ambigious. */
@@ -199,7 +222,7 @@ LANGUAGE_WORDS_ARE {
LEX_WORD( "IIF" ) AS_TOKEN( IIF ),
LEX_WORD( "TO" ) AS_TOKEN( TO ),
LEX_WORD( "STEP" ) AS_TOKEN( STEP ),
LEX_WORD( "IN" ) AS_TOKEN( IN ),
LEX_WORD( "IN" ) AS_TOKEN( HB_CHK_IN ),
LEX_WORD( "WITH" ) AS_TOKEN( _WITH_ ),
LEX_WORD( "SELF" ) AS_TOKEN( _SELF_ ),
LEX_WORD( "QSELF" ) AS_TOKEN( QSELF ),
@@ -220,74 +243,71 @@ LANGUAGE_WORDS_ARE {
};
/* When reservered words are used as Identifier. */
#define HB_EXTERN_ID -1002
#define HB_AS_ID -1003
#define HB_OF_ID -1004
#define HB_ARRAY_ID -1005
#define HB_VARIANT_ID -1006
#define HB_BLOCK_ID -1007
#define HB_STRING_ID -1008
#define HB_CLASS_ID -1009
#define HB_DATE_ID -1010
#define HB_LOGICAL_ID -1011
#define HB_NUMEIC_ID -1012
#define HB_OBJECT_ID -1013
#define HB_PUBLIC_ID -1014
#define HB_OTHERWISE_ID -1015
#define HB_MEMVAR_ID -1016
#define HB_WHILE_ID -1017
#define HB_LOOP_ID -1018
#define HB_FOR_ID -1019
#define HB_NEXT_ID -1020
#define HB_FIELD_ID -1021
#define HB_PARAMETERS_ID -1022
#define HB_PRIVATE_ID -1023
#define HB_EXIT_ID -1024
#define HB_BEGIN_ID -1025
#define HB_SEQUENCE_ID -1026
#define HB_BREAK_ID -1027
#define HB_RECOVER_ID -1028
#define HB_USING_ID -1029
#define HB_CASE_ID -1030
#define HB_DO_ID -1031
#define HB_WITH_ID -1032
#define HB_DECLARE_ID -1033
#define HB_PROCREQ_ID -1034
#define HB_SELF_ID -1035
#define HB_IF_ID -1036
#define HB_IIF_ID -1037
#define HB_OPTIONAL_ID -1038
#define HB_IN_ID -1039
#define HB__FIELD_ID -1040
#define HB_LINE_ID -1041
#define HB_INIT_ID -1042
#define HB_PROCEDURE_ID -1043
#define HB_FUNCTION_ID -1044
#define HB_STATIC_ID -1045
#define HB_LOCAL_ID -1046
#define HB_QSELF_ID -1047
#define HB_RETURN_ID -1048
#define HB_END_ID -1049
/* When 2 identifiers are correct syntax like in class declaration, we have to temporarily store the 2nd identifier. */
#define HB_ID_ON_HOLD -1050
#define HB_MACRO_ERR -1051
#define HB_CHK_NEXT -1052
#define HB_CHK_EXIT -1053
#define HB_CHK_LOOP -1054
#define HB_EXTERN_ID -2001
#define HB_AS_ID -2002
#define HB_OF_ID -2003
#define HB_ARRAY_ID -2004
#define HB_VARIANT_ID -2005
#define HB_BLOCK_ID -2006
#define HB_STRING_ID -2007
#define HB_CLASS_ID -2008
#define HB_DATE_ID -2009
#define HB_LOGICAL_ID -2010
#define HB_NUMEIC_ID -2011
#define HB_OBJECT_ID -2012
#define HB_PUBLIC_ID -2013
#define HB_OTHERWISE_ID -2014
#define HB_MEMVAR_ID -2015
#define HB_WHILE_ID -2016
#define HB_LOOP_ID -2017
#define HB_FOR_ID -2018
#define HB_NEXT_ID -2019
#define HB_FIELD_ID -2020
#define HB_PARAMETERS_ID -2021
#define HB_PRIVATE_ID -2022
#define HB_EXIT_ID -2023
#define HB_BEGIN_ID -2024
#define HB_SEQUENCE_ID -2025
#define HB_BREAK_ID -2026
#define HB_RECOVER_ID -2027
#define HB_USING_ID -2028
#define HB_CASE_ID -2029
#define HB_DO_ID -2030
#define HB_WITH_ID -2031
#define HB_DECLARE_ID -2032
#define HB_PROCREQ_ID -2033
#define HB_SELF_ID -2034
#define HB_IF_ID -2035
#define HB_IIF_ID -2036
#define HB_OPTIONAL_ID -2037
#define HB_IN_ID -2038
#define HB__FIELD_ID -2039
#define HB_LINE_ID -2040
#define HB_INIT_ID -2041
#define HB_PROCEDURE_ID -2042
#define HB_FUNCTION_ID -2043
#define HB_STATIC_ID -2044
#define HB_LOCAL_ID -2045
#define HB_QSELF_ID -2046
#define HB_RETURN_ID -2047
#define HB_END_ID -2048
/* Intermediate Reductions when still ambigious or need further reductions. */
#define _WHILE_WITH 3001
#define _ID_ARRAY 3002
#define _MACRO_ARRAY 3003
#define _TEXT_ARRAY 3004
#define _CASE_WITH 3005
#define _WHL_ID_CR 3006
#define _WHL_ID_SEMI 3007
#define _INC_CR 3008
#define _INC_SEMI 3009
#define _DEC_CR 3010
#define _DEC_SEMI 3011
#define _ID_COMMA 3003
#define _ID_CR 3004
#define _ID_SEMI 3005
#define _ID_COLON 3006
#define _CASE_WITH 3007
#define _WHL_ID_CR 3008
#define _WHL_ID_SEMI 3009
#define _INC_CR 3010
#define _INC_SEMI 3011
#define _DEC_CR 3012
#define _DEC_SEMI 3013
#define _VAR_ARRAY 3014
#define _TEXT_ARRAY 3015
LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( '^' , 0 , 0 , 0 ) REDUCE_TO( POWER , 0 ),
@@ -331,24 +351,9 @@ LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( _OBJECT_ , 0 , 0 , 0 ) REDUCE_TO( HB_OBJECT_ID , 0 ),
/* Commands and Statements (Key Words only match at <BOL> ). */
IF_SEQUENCE_IS( EXTERN , TO , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , TO ),
IF_SEQUENCE_IS( EXTERN , INASSIGN , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , INASSIGN ),
IF_SEQUENCE_IS( EXTERN , INC , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , INC ),
IF_SEQUENCE_IS( EXTERN , DEC , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , DEC ),
IF_SEQUENCE_IS( EXTERN , ALIASOP , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , ALIASOP ),
IF_SEQUENCE_IS( EXTERN , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , PLUSEQ ),
IF_SEQUENCE_IS( EXTERN , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , MINUSEQ ),
IF_SEQUENCE_IS( EXTERN , MULTEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , MULTEQ ),
IF_SEQUENCE_IS( EXTERN , DIVEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , DIVEQ ),
IF_SEQUENCE_IS( EXTERN , EXPEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , EXPEQ ),
IF_SEQUENCE_IS( EXTERN , MODEQ , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , MODEQ ),
IF_SEQUENCE_IS( EXTERN , '(' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , '(' ),
IF_SEQUENCE_IS( EXTERN , '[' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , '[' ),
IF_SEQUENCE_IS( EXTERN , '=' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , '=' ),
IF_SEQUENCE_IS( EXTERN , ':' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , ':' ),
IF_SEQUENCE_IS( EXTERN , '\n' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , '\n' ),
IF_SEQUENCE_IS( EXTERN , ';' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , ';' ),
IF_SEQUENCE_IS( EXTERN , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( EXTERN , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( EXTERN , '[' , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , '[' ),
IF_SEQUENCE_IS( EXTERN , 0 , 0 , 0 ) REDUCE_TO( HB_EXTERN_ID , 0 ),
IF_SEQUENCE_IS( END , TO , 0 , 0 ) REDUCE_TO( HB_END_ID , TO ),
IF_SEQUENCE_IS( END , INASSIGN , 0 , 0 ) REDUCE_TO( HB_END_ID , INASSIGN ),
@@ -368,76 +373,53 @@ LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( END , _SEQUENCE_ , 0 , 0 ) REDUCE_TO( END , 0 ),
IF_SEQUENCE_IS( END , 0 , 0 , 0 ) PASS_THROUGH(),
/* DECLARE as PRIVATE. */
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , '[' , 0 ) REDUCE_TO( PRIVATE , _ID_ARRAY ),
IF_SEQUENCE_IS( _ID_ARRAY , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , '[' ),
IF_SEQUENCE_IS( DECLARE , MACROVAR , '[' , 0 ) REDUCE_TO( PRIVATE , _MACRO_ARRAY ),
IF_SEQUENCE_IS( _MACRO_ARRAY, 0 , 0 , 0 ) REDUCE_TO( MACROVAR , '[' ),
IF_SEQUENCE_IS( DECLARE , MACROTEXT , '[' , 0 ) REDUCE_TO( PRIVATE , _TEXT_ARRAY ),
IF_SEQUENCE_IS( _TEXT_ARRAY , 0 , 0 , 0 ) REDUCE_TO( MACROTEXT , '[' ),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , '(' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , HB_ID_ON_HOLD, 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , 0 , 0 ) REDUCE_TO( PRIVATE , IDENTIFIER ),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , ',' , 0 ) REDUCE_TO( PRIVATE , _ID_COMMA ),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , '\n' , 0 ) REDUCE_TO( PRIVATE , _ID_CR ),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , ';' , 0 ) REDUCE_TO( PRIVATE , _ID_SEMI ),
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , ':' , 0 ) REDUCE_TO( PRIVATE , _ID_COLON ),
IF_SEQUENCE_IS( DECLARE , MACROVAR , 0 , 0 ) REDUCE_TO( PRIVATE , MACROVAR ),
IF_SEQUENCE_IS( DECLARE , MACROTEXT , 0 , 0 ) REDUCE_TO( PRIVATE , MACROTEXT ),
IF_SEQUENCE_IS( DECLARE , 0 , 0 , 0 ) REDUCE_TO( HB_DECLARE_ID , 0 ),
IF_SEQUENCE_IS( _ID_ARRAY , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , '[' ),
IF_SEQUENCE_IS( _ID_COMMA , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , ',' ),
IF_SEQUENCE_IS( _ID_CR , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , '\n' ),
IF_SEQUENCE_IS( _ID_SEMI , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , ';' ),
IF_SEQUENCE_IS( _ID_COLON , 0 , 0 , 0 ) REDUCE_TO( IDENTIFIER , ':' ),
IF_SEQUENCE_IS( PUBLIC , TO , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , TO ),
IF_SEQUENCE_IS( PUBLIC , INASSIGN , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , INASSIGN ),
IF_SEQUENCE_IS( PUBLIC , INC , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , INC ),
IF_SEQUENCE_IS( PUBLIC , DEC , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , DEC ),
IF_SEQUENCE_IS( PUBLIC , ALIASOP , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , ALIASOP ),
IF_SEQUENCE_IS( PUBLIC , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , PLUSEQ ),
IF_SEQUENCE_IS( PUBLIC , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , MINUSEQ ),
IF_SEQUENCE_IS( PUBLIC , MULTEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , MULTEQ ),
IF_SEQUENCE_IS( PUBLIC , DIVEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , DIVEQ ),
IF_SEQUENCE_IS( PUBLIC , EXPEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , EXPEQ ),
IF_SEQUENCE_IS( PUBLIC , MODEQ , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , MODEQ ),
IF_SEQUENCE_IS( PUBLIC , '(' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , '(' ),
/* Anything DECLARE IDENTIFIER, must be Strong Type DECLARE. */
IF_SEQUENCE_IS( DECLARE , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
/* Anthing else, DECLARE as Identifier. */
IF_SEQUENCE_IS( DECLARE , '[' , 0 , 0 ) REDUCE_TO( HB_DECLARE_ID , '[' ),
IF_SEQUENCE_IS( DECLARE , 0 , 0 , 0 ) REDUCE_TO( HB_DECLARE_ID , ),
IF_SEQUENCE_IS( PUBLIC , IDENTIFIER , '[' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , MACROVAR , '[' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , MACROVAR , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , MACROTEXT , '[' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , MACROTEXT , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , '[' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , '[' ),
IF_SEQUENCE_IS( PUBLIC , '=' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , '=' ),
IF_SEQUENCE_IS( PUBLIC , ':' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , ':' ),
IF_SEQUENCE_IS( PUBLIC , '\n' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , '\n' ),
IF_SEQUENCE_IS( PUBLIC , ';' , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , ';' ),
IF_SEQUENCE_IS( PUBLIC , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PUBLIC , 0 , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , 0 ),
IF_SEQUENCE_IS( PRIVATE , TO , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , TO ),
IF_SEQUENCE_IS( PRIVATE , INASSIGN , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , INASSIGN ),
IF_SEQUENCE_IS( PRIVATE , INC , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , INC ),
IF_SEQUENCE_IS( PRIVATE , DEC , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , DEC ),
IF_SEQUENCE_IS( PRIVATE , ALIASOP , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , ALIASOP ),
IF_SEQUENCE_IS( PRIVATE , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , PLUSEQ ),
IF_SEQUENCE_IS( PRIVATE , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , MINUSEQ ),
IF_SEQUENCE_IS( PRIVATE , MULTEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , MULTEQ ),
IF_SEQUENCE_IS( PRIVATE , DIVEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , DIVEQ ),
IF_SEQUENCE_IS( PRIVATE , EXPEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , EXPEQ ),
IF_SEQUENCE_IS( PRIVATE , MODEQ , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , MODEQ ),
IF_SEQUENCE_IS( PRIVATE , '(' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , '(' ),
IF_SEQUENCE_IS( PRIVATE , '[' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , '[' ),
IF_SEQUENCE_IS( PRIVATE , '=' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , '=' ),
IF_SEQUENCE_IS( PRIVATE , ':' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , ':' ),
IF_SEQUENCE_IS( PRIVATE , '\n' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , '\n' ),
IF_SEQUENCE_IS( PRIVATE , ';' , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , ';' ),
IF_SEQUENCE_IS( PRIVATE , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PRIVATE_ , IDENTIFIER , '[' , 0 ) REDUCE_TO( PRIVATE , _ID_ARRAY ),
IF_SEQUENCE_IS( PRIVATE_ , IDENTIFIER , 0 , 0 ) REDUCE_TO( PRIVATE , IDENTIFIER ),
IF_SEQUENCE_IS( PRIVATE_ , MACROVAR , '[' , 0 ) REDUCE_TO( PRIVATE , _VAR_ARRAY ),
IF_SEQUENCE_IS( PRIVATE_ , MACROVAR , 0 , 0 ) REDUCE_TO( PRIVATE , MACROVAR ),
IF_SEQUENCE_IS( PRIVATE_ , MACROTEXT , '[' , 0 ) REDUCE_TO( PRIVATE , _TEXT_ARRAY ),
IF_SEQUENCE_IS( PRIVATE_ , MACROTEXT , 0 , 0 ) REDUCE_TO( PRIVATE , MACROTEXT ),
IF_SEQUENCE_IS( PRIVATE_ , '[' , 0 , 0 ) REDUCE_TO( PRIVATE , '[' ),
IF_SEQUENCE_IS( PRIVATE_ , 0 , 0 , 0 ) REDUCE_TO( HB_PRIVATE_ID , 0 ),
IF_SEQUENCE_IS( _VAR_ARRAY , 0 , 0 , 0 ) REDUCE_TO( MACROVAR , '[' ),
IF_SEQUENCE_IS( _TEXT_ARRAY , 0 , 0 , 0 ) REDUCE_TO( MACROTEXT , '[' ),
IF_SEQUENCE_IS( LOCAL , TO , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , TO ),
IF_SEQUENCE_IS( LOCAL , INASSIGN , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , INASSIGN ),
IF_SEQUENCE_IS( LOCAL , INC , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , INC ),
IF_SEQUENCE_IS( LOCAL , DEC , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , DEC ),
IF_SEQUENCE_IS( LOCAL , ALIASOP , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , ALIASOP ),
IF_SEQUENCE_IS( LOCAL , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , PLUSEQ ),
IF_SEQUENCE_IS( LOCAL , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , MINUSEQ ),
IF_SEQUENCE_IS( LOCAL , MULTEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , MULTEQ ),
IF_SEQUENCE_IS( LOCAL , DIVEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , DIVEQ ),
IF_SEQUENCE_IS( LOCAL , EXPEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , EXPEQ ),
IF_SEQUENCE_IS( LOCAL , MODEQ , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , MODEQ ),
IF_SEQUENCE_IS( LOCAL , '(' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , '(' ),
IF_SEQUENCE_IS( LOCAL , IDENTIFIER , '[' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( LOCAL , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( LOCAL , '[' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , '[' ),
IF_SEQUENCE_IS( LOCAL , '=' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , '=' ),
IF_SEQUENCE_IS( LOCAL , ':' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , ':' ),
IF_SEQUENCE_IS( LOCAL , '\n' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , '\n' ),
IF_SEQUENCE_IS( LOCAL , ';' , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , ';' ),
IF_SEQUENCE_IS( LOCAL , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( LOCAL , 0 , 0 , 0 ) REDUCE_TO( HB_LOCAL_ID , 0 ),
/* May have STATIC Func/Proc - Exclusion works best here. */
IF_SEQUENCE_IS( STATIC , TO , 0 , 0 ) REDUCE_TO( HB_STATIC_ID , TO ),
IF_SEQUENCE_IS( STATIC , INASSIGN , 0 , 0 ) REDUCE_TO( HB_STATIC_ID , INASSIGN ),
IF_SEQUENCE_IS( STATIC , INC , 0 , 0 ) REDUCE_TO( HB_STATIC_ID , INC ),
@@ -457,63 +439,17 @@ LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( STATIC , ';' , 0 , 0 ) REDUCE_TO( HB_STATIC_ID , ';' ),
IF_SEQUENCE_IS( STATIC , 0 , 0 , 0 ) PASS_THROUGH(),
/* MEMVAR ALIASOP was removed because MEMVAR-> is still MEMVAR.*/
IF_SEQUENCE_IS( MEMVAR , TO , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , TO ),
IF_SEQUENCE_IS( MEMVAR , INASSIGN , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , INASSIGN ),
IF_SEQUENCE_IS( MEMVAR , INC , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , INC ),
IF_SEQUENCE_IS( MEMVAR , DEC , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , DEC ),
IF_SEQUENCE_IS( MEMVAR , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , PLUSEQ ),
IF_SEQUENCE_IS( MEMVAR , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , MINUSEQ ),
IF_SEQUENCE_IS( MEMVAR , MULTEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , MULTEQ ),
IF_SEQUENCE_IS( MEMVAR , DIVEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , DIVEQ ),
IF_SEQUENCE_IS( MEMVAR , EXPEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , EXPEQ ),
IF_SEQUENCE_IS( MEMVAR , MODEQ , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , MODEQ ),
IF_SEQUENCE_IS( MEMVAR , '(' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , '(' ),
IF_SEQUENCE_IS( MEMVAR , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( MEMVAR , '[' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , '[' ),
IF_SEQUENCE_IS( MEMVAR , '=' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , '=' ),
IF_SEQUENCE_IS( MEMVAR , ':' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , ':' ),
IF_SEQUENCE_IS( MEMVAR , '\n' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , '\n' ),
IF_SEQUENCE_IS( MEMVAR , ';' , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , ';' ),
IF_SEQUENCE_IS( MEMVAR , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( MEMVAR , 0 , 0 , 0 ) REDUCE_TO( HB_MEMVAR_ID , 0 ),
/* FIELD ALIASOP was removed because FIELD-> is still FIELD.*/
IF_SEQUENCE_IS( FIELD , TO , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , TO ),
IF_SEQUENCE_IS( FIELD , INASSIGN , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , INASSIGN ),
IF_SEQUENCE_IS( FIELD , INC , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , INC ),
IF_SEQUENCE_IS( FIELD , DEC , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , DEC ),
IF_SEQUENCE_IS( FIELD , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , PLUSEQ ),
IF_SEQUENCE_IS( FIELD , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , MINUSEQ ),
IF_SEQUENCE_IS( FIELD , MULTEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , MULTEQ ),
IF_SEQUENCE_IS( FIELD , DIVEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , DIVEQ ),
IF_SEQUENCE_IS( FIELD , EXPEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , EXPEQ ),
IF_SEQUENCE_IS( FIELD , MODEQ , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , MODEQ ),
IF_SEQUENCE_IS( FIELD , '(' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , '(' ),
IF_SEQUENCE_IS( FIELD , '[' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , '[' ),
IF_SEQUENCE_IS( FIELD , '=' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , '=' ),
IF_SEQUENCE_IS( FIELD , ':' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , ':' ),
IF_SEQUENCE_IS( FIELD , '\n' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , '\n' ),
IF_SEQUENCE_IS( FIELD , ';' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , ';' ),
IF_SEQUENCE_IS( FIELD , _WITH_ , 0 , 0 ) REDUCE_TO( FIELD , HB_WITH_ID ),
IF_SEQUENCE_IS( FIELD , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FIELD_ , IDENTIFIER , 0 , 0 ) REDUCE_TO( FIELD , IDENTIFIER ),
IF_SEQUENCE_IS( FIELD_ , '[' , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , '[' ),
IF_SEQUENCE_IS( FIELD_ , 0 , 0 , 0 ) REDUCE_TO( HB_FIELD_ID , 0 ),
IF_SEQUENCE_IS( PARAMETERS , TO , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , TO ),
IF_SEQUENCE_IS( PARAMETERS , INASSIGN , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , INASSIGN ),
IF_SEQUENCE_IS( PARAMETERS , INC , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , INC ),
IF_SEQUENCE_IS( PARAMETERS , DEC , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , DEC ),
IF_SEQUENCE_IS( PARAMETERS , ALIASOP , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , ALIASOP ),
IF_SEQUENCE_IS( PARAMETERS , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , PLUSEQ ),
IF_SEQUENCE_IS( PARAMETERS , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , MINUSEQ ),
IF_SEQUENCE_IS( PARAMETERS , MULTEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , MULTEQ ),
IF_SEQUENCE_IS( PARAMETERS , DIVEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , DIVEQ ),
IF_SEQUENCE_IS( PARAMETERS , EXPEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , EXPEQ ),
IF_SEQUENCE_IS( PARAMETERS , MODEQ , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , MODEQ ),
IF_SEQUENCE_IS( PARAMETERS , '(' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , '(' ),
IF_SEQUENCE_IS( PARAMETERS , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PARAMETERS , '[' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , '[' ),
IF_SEQUENCE_IS( PARAMETERS , '=' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , '=' ),
IF_SEQUENCE_IS( PARAMETERS , ':' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , ':' ),
IF_SEQUENCE_IS( PARAMETERS , '\n' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , '\n' ),
IF_SEQUENCE_IS( PARAMETERS , ';' , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , ';' ),
IF_SEQUENCE_IS( PARAMETERS , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( PARAMETERS , 0 , 0 , 0 ) REDUCE_TO( HB_PARAMETERS_ID , 0 ),
/* This _FIELD_ is FIELD NOT at BOL wants only ->. */
IF_SEQUENCE_IS( _FIELD_ , ALIASOP , 0 , 0 ) REDUCE_TO( FIELD , ALIASOP ),
@@ -554,41 +490,17 @@ LANGUAGE_RULES_ARE {
/* FOR ; EXIT ; NEXT LOOP */
IF_SEQUENCE_IS( FOR , TO , 0 , 0 ) REDUCE_TO( HB_FOR_ID , TO ),
IF_SEQUENCE_IS( FOR , INASSIGN , 0 , 0 ) REDUCE_TO( HB_FOR_ID , INASSIGN ),
IF_SEQUENCE_IS( FOR , INC , 0 , 0 ) REDUCE_TO( HB_FOR_ID , INC ),
IF_SEQUENCE_IS( FOR , DEC , 0 , 0 ) REDUCE_TO( HB_FOR_ID , DEC ),
IF_SEQUENCE_IS( FOR , ALIASOP , 0 , 0 ) REDUCE_TO( HB_FOR_ID , ALIASOP ),
IF_SEQUENCE_IS( FOR , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , PLUSEQ ),
IF_SEQUENCE_IS( FOR , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , MINUSEQ ),
IF_SEQUENCE_IS( FOR , MULTEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , MULTEQ ),
IF_SEQUENCE_IS( FOR , DIVEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , DIVEQ ),
IF_SEQUENCE_IS( FOR , EXPEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , EXPEQ ),
IF_SEQUENCE_IS( FOR , MODEQ , 0 , 0 ) REDUCE_TO( HB_FOR_ID , MODEQ ),
IF_SEQUENCE_IS( FOR , '(' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , '(' ),
IF_SEQUENCE_IS( FOR , IDENTIFIER , '[' , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FOR , IDENTIFIER , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FOR , MACROVAR , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FOR , MACROTEXT , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FOR , '[' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , '[' ),
IF_SEQUENCE_IS( FOR , '=' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , '=' ),
IF_SEQUENCE_IS( FOR , ':' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , ':' ),
IF_SEQUENCE_IS( FOR , '\n' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , '\n' ),
IF_SEQUENCE_IS( FOR , ';' , 0 , 0 ) REDUCE_TO( HB_FOR_ID , ';' ),
IF_SEQUENCE_IS( FOR , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( FOR , 0 , 0 , 0 ) REDUCE_TO( HB_FOR_ID , 0 ),
IF_SEQUENCE_IS( NEXT , TO , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , TO ),
IF_SEQUENCE_IS( NEXT , INASSIGN , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , INASSIGN ),
IF_SEQUENCE_IS( NEXT , INC , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , INC ),
IF_SEQUENCE_IS( NEXT , DEC , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , DEC ),
IF_SEQUENCE_IS( NEXT , ALIASOP , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , ALIASOP ),
IF_SEQUENCE_IS( NEXT , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , PLUSEQ ),
IF_SEQUENCE_IS( NEXT , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , MINUSEQ ),
IF_SEQUENCE_IS( NEXT , MULTEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , MULTEQ ),
IF_SEQUENCE_IS( NEXT , DIVEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , DIVEQ ),
IF_SEQUENCE_IS( NEXT , EXPEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , EXPEQ ),
IF_SEQUENCE_IS( NEXT , MODEQ , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , MODEQ ),
IF_SEQUENCE_IS( NEXT , '(' , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , '(' ),
IF_SEQUENCE_IS( NEXT , '\n' , 0 , 0 ) REDUCE_TO( HB_CHK_NEXT , '\n' ),
IF_SEQUENCE_IS( NEXT , ';' , 0 , 0 ) REDUCE_TO( HB_CHK_NEXT , ';' ),
IF_SEQUENCE_IS( NEXT , '[' , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , '[' ),
IF_SEQUENCE_IS( NEXT , '=' , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , '=' ),
IF_SEQUENCE_IS( NEXT , ':' , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , ':' ),
IF_SEQUENCE_IS( NEXT , 0 , 0 , 0 ) REDUCE_TO( HB_CHK_NEXT , 0 ),
IF_SEQUENCE_IS( NEXT , 0 , 0 , 0 ) REDUCE_TO( HB_NEXT_ID , 0 ),
IF_SEQUENCE_IS( EXITLOOP , '\n' , 0 , 0 ) REDUCE_TO( HB_CHK_EXIT , '\n' ),
IF_SEQUENCE_IS( EXITLOOP , ';' , 0 , 0 ) REDUCE_TO( HB_CHK_EXIT , ';' ),
@@ -758,6 +670,7 @@ LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( IIF , '[' , 0 , 0 ) REDUCE_TO( HB_IIF_ID , '[' ),
IF_SEQUENCE_IS( IIF , 0 , 0 , 0 ) REDUCE_TO( HB_IIF_ID , 0 ),
IF_SEQUENCE_IS( OPTIONAL , _AS_ , 0 , 0 ) REDUCE_TO( HB_OPTIONAL_ID , _AS_ ),
IF_SEQUENCE_IS( OPTIONAL , TO , 0 , 0 ) REDUCE_TO( HB_OPTIONAL_ID , TO ),
IF_SEQUENCE_IS( OPTIONAL , TRUEVALUE , 0 , 0 ) REDUCE_TO( HB_OPTIONAL_ID , TRUEVALUE ),
IF_SEQUENCE_IS( OPTIONAL , FALSEVALUE , 0 , 0 ) REDUCE_TO( HB_OPTIONAL_ID , FALSEVALUE ),
@@ -802,10 +715,6 @@ LANGUAGE_RULES_ARE {
IF_SEQUENCE_IS( OPTIONAL , ';' , 0 , 0 ) REDUCE_TO( HB_OPTIONAL_ID , ';' ),
IF_SEQUENCE_IS( OPTIONAL , 0 , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( IDENTIFIER , IN , 0 , 0 ) PASS_THROUGH(),
IF_SEQUENCE_IS( IN , '[' , 0 , 0 ) REDUCE_TO( HB_IN_ID , '[' ),
IF_SEQUENCE_IS( IN , 0 , 0 , 0 ) REDUCE_TO( HB_IN_ID , 0 ),
IF_SEQUENCE_IS( '&' , '\'' , 0 , 0 ) REDUCE_TO( HB_MACRO_ERR , 0 ),
IF_SEQUENCE_IS( '&' , '"' , 0 , 0 ) REDUCE_TO( HB_MACRO_ERR , 0 ),
IF_SEQUENCE_IS( '&' , '[' , 0 , 0 ) REDUCE_TO( HB_MACRO_ERR , 0 )
@@ -871,6 +780,7 @@ LANGUAGE_RULES_ARE {
{ \
iIdentifier--; \
}
#endif
/* Support Functions implemented as macros for speed. */
@@ -976,7 +886,7 @@ LANGUAGE_RULES_ARE {
\
DEBUG_INFO( printf( "Element \"%s\" is %i\n", sToken, iRet ) );\
}\
}
}\
#define CONVERT_NUMBER()\
\
@@ -1053,7 +963,7 @@ LANGUAGE_RULES_ARE {
}
#undef CUSTOM_ACTION
#define CUSTOM_ACTION(x) x = hb_lex_CustomAction(x, iWordLen, aiHold, asHold, &iHold )
#define CUSTOM_ACTION(x) x = hb_lex_CustomAction(x, iWordLen, aiHold, asHold, &iHold, &bIgnoreWords, iLastToken )
#undef INIT_ACTION
#define INIT_ACTION() hb_comp_bSimpLex = TRUE;
@@ -1102,7 +1012,7 @@ long hb_lex_Hex2L( char* sHex )
return lSum;
}
int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_SIZE], int *ptr_iHold )
int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_SIZE], int *ptr_iHold, BOOL *ptr_bIgnoreWords, int iLastToken )
{
BOOL bRestored = FALSE;
char * sIdentifier;
@@ -1113,40 +1023,136 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
sIdentifier = (char*) hb_xgrab( iWordLen + 1 );
sIdentifier[0] = '\0';
DEBUG_INFO( printf( "Prepared Text: %i Pointer: %i\n", iTexts, sIdentifier ) );
switch ( x )
{
case HB_ID_ON_HOLD :
bRestored = TRUE;
yylval.string = sIdOnHold;
iIdentifier++;
x = IDENTIFIER;
break;
case HB_LIT_ACT :
yylval.string = hb_compIdentifierNew( sPair, TRUE );
x = LITERAL;
break;
case HB_EXTERN :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = EXTERN;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_DECLARE :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = DECLARE;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_PUBLIC :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = PUBLIC;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_PRIVATE :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = PRIVATE_;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_LOCAL :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = LOCAL;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_MEMVAR :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = MEMVAR;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_FIELD :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = FIELD_;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_PARAM :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = PARAMETERS;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_FOR :
*ptr_bIgnoreWords = TRUE;
/* Equivalent of PUSH_TOKEN(x). */
aiHold[ (*ptr_iHold)++ ] = FOR;
asHold[ (*ptr_iHold) - 1 ][0] = NULL;
x = 0;
break;
case HB_CHK_NEXT :
if( hb_comp_wForCounter == 0 )
hb_compGenError( hb_comp_szErrors, 'E', HB_COMP_ERR_NEXTFOR, NULL, NULL );
x = NEXT;
break;
case HB_CHK_EXIT :
if( hb_comp_wForCounter == 0 && hb_comp_wWhileCounter == 0 )
hb_compGenError( hb_comp_szErrors, 'E', HB_COMP_ERR_UNMATCHED_EXIT, "EXIT", NULL );
x = EXITLOOP;
break;
case HB_CHK_LOOP :
if( hb_comp_wForCounter == 0 && hb_comp_wWhileCounter == 0 )
hb_compGenError( hb_comp_szErrors, 'E', HB_COMP_ERR_UNMATCHED_EXIT, "LOOP", NULL );
x = LOOP;
break;
case HB_CHK_IN :
if( iLastToken == IDENTIFIER )
{
x = IN;
}
else
{
strcpy( sIdentifier, "IN" );
x = IDENTIFIER;
}
break;
case HB_EXTERN_ID :
strncpy( sIdentifier, "EXTERNAL", iWordLen );
sIdentifier[iWordLen] = '\0';
@@ -1167,13 +1173,11 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_AS_ID :
strcpy( sIdentifier, "AS" );
sIdentifier[2] = '\0';
x = IDENTIFIER;
break;
case HB_OF_ID :
strcpy( sIdentifier, "OF" );
sIdentifier[2] = '\0';
x = IDENTIFIER;
break;
@@ -1245,19 +1249,16 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_LOOP_ID :
strcpy( sIdentifier, "LOOP" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
case HB_FOR_ID :
strcpy( sIdentifier, "FOR" );
sIdentifier[3] = '\0';
x = IDENTIFIER;
break;
case HB_NEXT_ID :
strcpy( sIdentifier, "NEXT" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
@@ -1287,7 +1288,6 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_EXIT_ID :
strcpy( sIdentifier, "EXIT" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
@@ -1323,19 +1323,16 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_CASE_ID :
strcpy( sIdentifier, "CASE" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
case HB_DO_ID :
strcpy( sIdentifier, "DO" );
sIdentifier[2] = '\0';
x = IDENTIFIER;
break;
case HB_WITH_ID :
strcpy( sIdentifier, "WITH" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
@@ -1353,19 +1350,16 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_SELF_ID :
strcpy( sIdentifier, "SELF" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
case HB_IF_ID :
strcpy( sIdentifier, "IF" );
sIdentifier[2] = '\0';
x = IDENTIFIER;
break;
case HB_IIF_ID :
strcpy( sIdentifier, "IIF" );
sIdentifier[3] = '\0';
x = IDENTIFIER;
break;
@@ -1377,19 +1371,16 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_IN_ID :
strcpy( sIdentifier, "IN" );
sIdentifier[2] = '\0';
x = IDENTIFIER;
break;
case HB_LINE_ID :
strcpy( sIdentifier, "LINE" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
case HB_INIT_ID :
strcpy( sIdentifier, "INIT" );
sIdentifier[4] = '\0';
x = IDENTIFIER;
break;
@@ -1425,7 +1416,6 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
case HB_END_ID :
strcpy( sIdentifier, "END" );
sIdentifier[3] = '\0';
x = IDENTIFIER;
break;
@@ -1434,6 +1424,13 @@ int hb_lex_CustomAction( int x, int iWordLen, int aiHold[], char asHold[][TOKEN_
x = 0;
break;
case HB_ID_ON_HOLD :
bRestored = TRUE;
yylval.string = sIdOnHold;
iIdentifier++;
x = IDENTIFIER;
break;
default:
printf( "No Handler for Custom Action %i\n", x );
}

View File

@@ -168,12 +168,13 @@ static char * tmpPtr;
static char sToken[TOKEN_SIZE];
static int iLen = 0;
static char chr, cPrev = 0;
static int iKey, iWord, iMatch, iRemove, iWordLen, iPush;
static int iKey, iWord, iMatch, iRemove, iWordLen, iPush, iLastToken = 0;
static char szLexBuffer[ YY_BUF_SIZE ];
static char * s_szBuffer;
static int iSize = 0;
static int iRet;
static BOOL bTmp;
static BOOL bIgnoreWords = FALSE;
/* Lex emulation */
char * yytext;
@@ -334,7 +335,23 @@ int Reduce( int iToken, BOOL bReal );
NEW_LINE_ACTION();\
}\
\
RETURN_TOKEN( REDUCE( aSelfs[iSelf].iToken ), sSelf ); \
if( aSelfs[iSelf].iToken < LEX_CUSTOM_ACTION ) \
{ \
iRet = aSelfs[iSelf].iToken; \
iRet = CUSTOM_ACTION( iRet ); \
if( iRet ) \
{ \
RETURN_TOKEN( REDUCE( iRet ), (char*) sSelf ); \
} \
else \
{ \
goto Start; \
} \
} \
else \
{ \
RETURN_TOKEN( REDUCE( aSelfs[iSelf].iToken ), (char*) sSelf ); \
} \
} \
} \
} \
@@ -454,7 +471,7 @@ int Reduce( int iToken, BOOL bReal );
#define LEX_RETURN(x, y) \
\
if( x <= LEX_CUSTOM_ACTION ) \
if( x < LEX_CUSTOM_ACTION ) \
{ \
CUSTOM_ACTION(x); \
\
@@ -682,6 +699,7 @@ int Reduce( int iToken, BOOL bReal );
iPush--;\
iMatched--;\
PUSH_TOKEN( aiMatched[ iMatched ] );\
aiMatched[iMatched] = 0;\
}\
}
@@ -691,6 +709,8 @@ int Reduce( int iToken, BOOL bReal );
\
/* We don't know what was the text value of this Token any more. */\
asHold[ iHold - 1 ][0] = '\0'; \
DEBUG_INFO( printf( "Placed on hold: %i Position %i\n", iPushToken, iHold ) ); \
DEBUG_INFO( printf("Now Holding %i Tokens: %i %i %i %i\n", iHold, aiHold[0], aiHold[1], aiHold[2], aiHold[3] ) ); \
}
#define SAVE_TENTATIVE()\
@@ -698,6 +718,7 @@ int Reduce( int iToken, BOOL bReal );
iTentative = iMatched;\
aiTentative[1] = aiRules[ iReduce ][ MAX_MATCH + 1 ];\
aiTentative[0] = aiRules[ iReduce ][ MAX_MATCH ];\
DEBUG_INFO( printf( "Saved Tentative for: %i\n", iTentative ) ); \
}
#define GIVE_UP()\
@@ -978,8 +999,23 @@ YY_DECL
NEW_LINE_ACTION();
}
/* LITERAL */
RETURN_TOKEN( REDUCE( iPairToken ), NULL );
if( iPairToken < LEX_CUSTOM_ACTION )
{
iRet = iPairToken;
iRet = CUSTOM_ACTION( iRet );
if( iRet )
{
RETURN_TOKEN( REDUCE( iRet ), NULL );
}
else
{
goto Start;
}
}
else
{
RETURN_TOKEN( REDUCE( iPairToken ), NULL );
}
}
else
{
@@ -1111,61 +1147,107 @@ YY_DECL
CheckToken:
{
#ifdef LEX_ABBREVIATE_KEYS
iWordLen = strlen( (char*) sToken );
if( iWordLen < LEX_ABBREVIATE_KEYS )
{
iWordLen = LEX_ABBREVIATE_KEYS;
}
#endif
iKey = 0;
while ( bNewLine && iKey < iKeys )
{
#ifdef LEX_ABBREVIATE_KEYS
if( strncmp( (char*) sToken, (char*)( aKeys[ iKey++ ].sWord ), iWordLen ) == 0 )
#else
if( strcmp( (char*) sToken, (char*) ( aKeys[ iKey++ ].sWord ) ) == 0 )
#endif
{
DEBUG_INFO( printf( "Reducing Key Word: %s\n", (char*) sToken ) );
bNewLine = FALSE;
NEW_LINE_ACTION();
RETURN_TOKEN( REDUCE( aKeys[ iKey - 1 ].iToken ), (char*) sToken );
}
}
if( bNewLine )
{
bNewLine = FALSE;
NEW_LINE_ACTION();
bIgnoreWords = FALSE;
#ifdef LEX_ABBREVIATE_KEYS
iWordLen = strlen( (char*) sToken );
if( iWordLen < LEX_ABBREVIATE_KEYS )
{
iWordLen = LEX_ABBREVIATE_KEYS;
}
#endif
iKey = 0;
while ( iKey < iKeys )
{
#ifdef LEX_ABBREVIATE_KEYS
if( strncmp( (char*) sToken, (char*)( aKeys[ iKey++ ].sWord ), iWordLen ) == 0 )
#else
if( strcmp( (char*) sToken, (char*) ( aKeys[ iKey++ ].sWord ) ) == 0 )
#endif
{
DEBUG_INFO( printf( "Reducing Key Word: %s\n", (char*) sToken ) );
bNewLine = FALSE;
NEW_LINE_ACTION();
if( aKeys[ iKey - 1 ].iToken < LEX_CUSTOM_ACTION )
{
iRet = aKeys[ iKey - 1 ].iToken;
iRet = CUSTOM_ACTION( iRet );
if( iRet )
{
RETURN_TOKEN( REDUCE( iRet ), (char*) sToken );
}
else
{
goto Start;
}
}
else
{
RETURN_TOKEN( REDUCE( aKeys[ iKey - 1 ].iToken ), (char*) sToken );
}
}
}
if( bNewLine )
{
bNewLine = FALSE;
NEW_LINE_ACTION();
}
}
#ifdef LEX_ABBREVIATE_WORDS
iWordLen = strlen( (char*) sToken );
if( iWordLen < LEX_ABBREVIATE_WORDS )
{
iWordLen = LEX_ABBREVIATE_WORDS;
}
#endif
iWord = 0;
while ( iWord < iWords )
if( bIgnoreWords )
{
#ifdef LEX_ABBREVIATE_WORDS
if( strncmp( (char*) sToken, (char*) ( aWords[ iWord++ ].sWord ), iWordLen ) == 0 )
#else
if( strcmp( (char*) sToken, (char*) ( aWords[ iWord++ ].sWord ) ) == 0 )
#endif
{
DEBUG_INFO( printf( "Reducing Word: %s\n", (char*) sToken ) );
DEBUG_INFO( printf( "Skiped Words for Word: %s\n", (char*) sToken ) );
bIgnoreWords = FALSE;
}
else
{
#ifdef LEX_ABBREVIATE_WORDS
iWordLen = strlen( (char*) sToken );
RETURN_TOKEN( REDUCE( aWords[ iWord - 1 ].iToken ), (char*) sToken );
}
if( iWordLen < LEX_ABBREVIATE_WORDS )
{
iWordLen = LEX_ABBREVIATE_WORDS;
}
#endif
iWord = 0;
while ( iWord < iWords )
{
#ifdef LEX_ABBREVIATE_WORDS
if( strncmp( (char*) sToken, (char*) ( aWords[ iWord++ ].sWord ), iWordLen ) == 0 )
#else
if( strcmp( (char*) sToken, (char*) ( aWords[ iWord++ ].sWord ) ) == 0 )
#endif
{
DEBUG_INFO( printf( "Reducing Word: %s\n", (char*) sToken ) );
if( aWords[ iWord - 1 ].iToken < LEX_CUSTOM_ACTION )
{
iRet = aWords[ iWord - 1 ].iToken;
iRet = CUSTOM_ACTION( iRet );
if( iRet )
{
RETURN_TOKEN( REDUCE( iRet ), (char*) sToken );
}
else
{
goto Start;
}
}
else
{
RETURN_TOKEN( REDUCE( aWords[ iWord - 1 ].iToken ), (char*) sToken );
}
}
}
}
DEBUG_INFO( printf( "Reducing Element: \"%s\"\n", (char*) sToken ) );
@@ -1185,6 +1267,8 @@ int Reduce( int iToken, BOOL bReal )
if( iToken )
{
iLastToken = iToken;
DEBUG_INFO( printf( "Checking Token: %i After %i %i %i at Pos: %i\n", iToken, aiMatched[0], aiMatched[1], aiMatched[2], iMatched ) );
FIND_MATCH();