From d1d3198841850f447dc8ef6563136ae738d5f27a Mon Sep 17 00:00:00 2001 From: Ron Pinkas Date: Sun, 14 May 2000 16:12:23 +0000 Subject: [PATCH] 20000514-09:10 GMT-8 Ron Pinkas * source/compiler/harbour.l ! Fixed parse error when DO OPTIONAL WITH ... * Changed FROM to FROM CLASS in AS Obect FROM CLASS ... (fixed conflict of FROM with DO FROM ...) * Changed AS ... ARRAY to AS ARRAY OF ... --- harbour/ChangeLog | 11 ++++-- harbour/source/compiler/harbour.l | 56 +++++++++++++++++-------------- harbour/tests/testwarn.prg | 40 +++++++++++----------- 3 files changed, 61 insertions(+), 46 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index d0907c55d5..bff08e17c3 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,7 +1,14 @@ +20000514-09:10 GMT-8 Ron Pinkas + + * source/compiler/harbour.l + ! Fixed parse error when DO OPTIONAL WITH ... + * Changed FROM to FROM CLASS in AS Obect FROM CLASS ... (fixed conflict of FROM with DO FROM ...) + * Changed AS ... ARRAY to AS ARRAY OF ... + 20000514-14:55 GMT+1 Ryszard Glab *source/compiler/harbour.y - * fixed bug in line counting that was causing no code + * fixed bug in line counting that was causing no code generated for statements placed within BEGIN/END SEQUENCE 20000513-14:50 GMT+1 Ryszard Glab @@ -9,7 +16,7 @@ *include/hbcomp.h * added 'int iDeclLine' to VAR structure to hold the line number where a variable was declared - + *source/compiler/harbour.c *source/compiler/harbour.y * fixed generation of 'unreachable code' warnings diff --git a/harbour/source/compiler/harbour.l b/harbour/source/compiler/harbour.l index ff98ef1f19..9ce7396acd 100644 --- a/harbour/source/compiler/harbour.l +++ b/harbour/source/compiler/harbour.l @@ -113,7 +113,7 @@ Separator {SpaceTab} %x FOR_ FUNCTION_ IIF_ IF_ IN_ INIT_ LOCAL_ LOOP_ %x MEMVAR_ PARAM_ PRIVATE_ PUBLIC_ STATIC_ RETURN_ RECOVER_ %x INVALIDNUM_ OTHERWISE_ PROCEDURE_ -%x OPTIONAL_ FROMCLASS_ +%x OPTIONAL_ %s INDEX %% @@ -359,7 +359,21 @@ Separator {SpaceTab} %} "optional" { BEGIN OPTIONAL_; } + +{Separator}+"with"{Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] ); + unput( ' ' ); + unput( 'h' ); + unput( 't' ); + unput( 'i' ); + unput( 'w' ); + if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0; + yylval.string = hb_strdup( "OPTIONAL" ); + hb_comp_iState = IDENTIFIER; + return IDENTIFIER; + } + {Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] ); BEGIN 0; return OPTIONAL; } + {Separator}*(.|\n) { /* end of line or any operator */ if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0; unput( yytext[ yyleng-1 ] ); @@ -368,16 +382,6 @@ Separator {SpaceTab} return IDENTIFIER; } -"from" { BEGIN FROMCLASS_; } -{Separator}+[_a-zA-Z\&] { unput( yytext[ yyleng-1 ] ); BEGIN 0; return FROMCLASS; } -{Separator}*(.|\n) { /* end of line or any operator */ - if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0; - unput( yytext[ yyleng-1 ] ); - yylval.string = hb_strdup( "FROM" ); - hb_comp_iState = IDENTIFIER; - return IDENTIFIER; - } - "do" BEGIN DO_; {Separator}+"case" { /* DO CASE statement */ if( i_INDEX_STATE ) BEGIN INDEX; else BEGIN 0; @@ -1334,26 +1338,28 @@ Separator {SpaceTab} "as var" { return AS_VARIANT; } "as variant" { return AS_VARIANT; } -"as var array" { return AS_ARRAY; } -"as variant array" { return AS_ARRAY; } -"as array array" { return AS_ARRAY_ARRAY; } -"as block array" { return AS_BLOCK_ARRAY; } -"as char array" { return AS_CHARACTER_ARRAY; } -"as character array" { return AS_CHARACTER_ARRAY; } -"as string array" { return AS_CHARACTER_ARRAY; } -"as date array" { return AS_DATE_ARRAY; } -"as logical array" { return AS_LOGICAL_ARRAY; } -"as bool array" { return AS_LOGICAL_ARRAY; } -"as boolean array" { return AS_LOGICAL_ARRAY; } -"as num array" { return AS_NUMERIC_ARRAY; } -"as numeric array" { return AS_NUMERIC_ARRAY; } -"as object array" { return AS_OBJECT_ARRAY; } +"as array of var" { return AS_ARRAY; } +"as array of variant" { return AS_ARRAY; } +"as array of array" { return AS_ARRAY_ARRAY; } +"as array of block" { return AS_BLOCK_ARRAY; } +"as array of char" { return AS_CHARACTER_ARRAY; } +"as array of character" { return AS_CHARACTER_ARRAY; } +"as array of string" { return AS_CHARACTER_ARRAY; } +"as array of date" { return AS_DATE_ARRAY; } +"as array of logical" { return AS_LOGICAL_ARRAY; } +"as array of bool" { return AS_LOGICAL_ARRAY; } +"as array of boolean" { return AS_LOGICAL_ARRAY; } +"as array of num" { return AS_NUMERIC_ARRAY; } +"as array of numeric" { return AS_NUMERIC_ARRAY; } +"as array of object" { return AS_OBJECT_ARRAY; } "declare function" { return DECLARE_FUN; } "declare class" { return DECLARE_CLASS; } "has method" { return CLASS_METHOD; } "has data" { return CLASS_DATA; } +"from class" { return FROMCLASS; } + %{ /* ************************************************************************ */ %} diff --git a/harbour/tests/testwarn.prg b/harbour/tests/testwarn.prg index d49316697c..f0be028278 100644 --- a/harbour/tests/testwarn.prg +++ b/harbour/tests/testwarn.prg @@ -7,24 +7,24 @@ #pragma -es0 #else - #TRANSLATE AS CHAR ARRAY => - #TRANSLATE AS CHARACTER ARRAY => - #TRANSLATE AS STRING ARRAY => + #TRANSLATE AS ARRAY OF CHAR => + #TRANSLATE AS ARRAY OF CHARACTER => + #TRANSLATE AS ARRAY OF STRING => - #TRANSLATE AS NUM ARRAY => - #TRANSLATE AS NUMERIC ARRAY => + #TRANSLATE AS ARRAY OF NUM => + #TRANSLATE AS ARRAY OF NUMERIC => - #TRANSLATE AS DATE ARRAY => - #TRANSLATE AS ARRAY ARRAY => - #TRANSLATE AS BLOCK ARRAY => - #TRANSLATE AS OBJECT ARRAY => + #TRANSLATE AS ARRAY OF DATE => + #TRANSLATE AS ARRAY OF ARRAY => + #TRANSLATE AS ARRAY OF BLOCK => + #TRANSLATE AS ARRAY OF OBJECT => - #TRANSLATE AS BOOL ARRAY => - #TRANSLATE AS BOOLEAN ARRAY => - #TRANSLATE AS LOGICAL ARRAY => + #TRANSLATE AS ARRAY OF BOOL => + #TRANSLATE AS ARRAY OF BOOLEAN => + #TRANSLATE AS ARRAY OF LOGICAL => - #TRANSLATE AS VAR ARRAY => - #TRANSLATE AS VARIANT ARRAY => + #TRANSLATE AS ARRAY OF VAR => + #TRANSLATE AS ARRAY OF VARIANT => #TRANSLATE AS CHAR => @@ -61,7 +61,7 @@ DECLARE FUNCTION int( n AS NUMERIC ) AS NUMERIC DECLARE FUNCTION TEST AS NUMERIC -DECLARE CLASS MyClass ; +DECLARE CLASS MyClass ; Has METHOD nMyFunc( nVal As Num ) As Num ; Has METHOD nMyFunc( nVal As Num ) As Num ; Has Data cMyData ; @@ -76,7 +76,7 @@ STATIC lGlobal AS LOGICAL PROCEDURE THEMAIN( optional ) - STATIC lStatic := 0, oMyObj As Object From WrongClass + STATIC lStatic := 0, oMyObj As Object From CLASS WrongClass LOCAL cVar AS CHAR := [declare function] oMyObj:MyMethod( 2, 3, 4 ) @@ -89,9 +89,11 @@ PROCEDURE THEMAIN( optional ) PRIVATE TEST AS CHAR + DO Optional WITH cVar + FOR Conter := 1 TO 10 ? "For with End" - NEXT + End IF optional ? 'Ok' @@ -129,7 +131,7 @@ PROCEDURE SOMEPROC() REPLACE a WITH 1 - M->public_var := 0 //core dumps (GPF) on Linux + //M->public_var := 0 //core dumps (GPF) on Linux b := 0 @@ -172,7 +174,7 @@ Return( NIL ) FUNCTION Main3() - LOCAL n AS NUMERIC, cVar AS CHARACTER, a[5,5,5] AS CHARACTER ARRAY + LOCAL n AS NUMERIC, cVar AS CHARACTER, a[5,5,5] AS ARRAY OF Char cVar := a[1]