[antlr-interest] Keywords with whitespaces
mzukowski at yci.com
mzukowski at yci.com
Mon Jan 27 13:38:00 PST 2003
Why not handle this in the parser?
rule: "begin" "sequence" ....;
Monty
-----Original Message-----
From: Gunnar Wagenknecht <kreismeister at yahoo.de>
[mailto:kreismeister at yahoo.de]
Sent: Monday, January 27, 2003 1:35 PM
To: antlr-interest at yahoogroups.com
Subject: [antlr-interest] Keywords with whitespaces
Hi!
Any tips on how to recognize keywords with whitespaces? I think the
literals options is not enough because it will match words as
keywords that arn't keywords if not followed by another word.
example: "begin" (WS)+ "sequence" is _ONE_ keyword but only "begin"
or "sequence" is handled as identifyer.
I'd like to try the following but get a lot of warnings.
ID options {
testLiterals = false; // we don't test for literals because
all are defined here!
}
:
"announce" { $setType( ANNOUNCE );}
| "as" (WS)+ ( "anytype" { $setType(AS_VARIANT); }
| "array" {
$setType(AS_ARRAY); }
( (WS)+ "of" (WS)+ (
"anytype"
{ $setType(AS_ARRAY); }
| "array"
{ $setType(AS_ARRAY_ARRAY); }
| "character"
{ $setType(AS_CHARACTER_ARRAY); }
| "class"
{ $setType(AS_CLASS_ARRAY); }
| "codeblock"
{ $setType(AS_BLOCK_ARRAY); }
| "date"
{ $setType(AS_DATE_ARRAY); }
| "enumeration" { $setType(AS_ENUM_ARRAY); }
| "logical" { $setType
(AS_LOGICAL_ARRAY); }
| "numeric" { $setType
(AS_NUMERIC_ARRAY); }
| "object" { $setType
(AS_OBJECT_ARRAY); }
| "string" { $setType
(AS_CHARACTER_ARRAY); }
| "usual" { $setType
(AS_CHARACTER_ARRAY); }
)
)?
| "character" { $setType
(AS_CHARACTER); }
| "class" {
$setType(AS_CLASS); }
| "codeblock" { $setType
(AS_BLOCK); }
| "date" {
$setType(AS_DATE); }
| "enumeration" { $setType
(AS_ENUM); }
| "logical" { $setType(AS_LOGICAL); }
| "numeric" { $setType(AS_NUMERIC); }
| "object" { $setType(AS_OBJECT); }
| "string" { $setType(AS_CHARACTER); }
| "usual" { $setType(AS_CHARACTER); }
)
| "begin" (WS)+ "sequence" { $setType( BEGINSEQ );}
| "break" { $setType( BREAK );}
| "case" { $setType( CASE );}
| "catch" { $setType( CATCH );}
| "declare" { $setType( DECLARE );}
| "do" { $setType( DO );}
( (WS)+ (
"case" { $setType(
DOCASE );}
| "while" { $setType(
DO_WHILE );}
( (WS)+
"with" { $setType(
DO_WHILE_WITH );}
)?
)
)?
| "else" { $setType( ELSE );}
( "if" { $setType( ELSEIF );}
)?
| "end" { $setType( END );}
| "endcase" { $setType( ENDCASE );}
| "enddo" { $setType( ENDDO );}
| "endif" { $setType( ENDIF );}
| "enumeration" { $setType( ENUM );}
| "exit" { $setType( EXIT );}
( (WS)+ (
"function" { $setType(
HB_EXIT_FUNC );}
| "procedure" { $setType(
HB_EXIT_PROC );}
)
)?
| "external" { $setType( EXTERN );}
| "field" { $setType(
FIELD );}
| "for" { $setType( FOR );}
( (WS)+
"each" { $setType(
FOREACH );}
)?
| "function" { $setType( FUNCTION );}
| "global" { $setType( GLOBAL );}
( (WS)+ "external" { $setType( EXTERNGLOBAL );}
)?
| "hb_inline" { $setType(
HB_INLINE );}
| "if" { $setType( IF );}
| "iif" { $setType(
IIF );}
| "in" (WS)+ { $setType(IN); }
| "init" (WS)+ (
"function" { $setType(
HB_INIT_FUNC );}
| "procedure" { $setType(
HB_INIT_PROC );}
)
| "line" { $setType(LINE); }
| "local" { $setType( LOCAL );}
| "loop" { $setType( LOOP );}
| "memvar" { $setType( MEMVAR );}
| "next" { $setType( NEXT );}
| "nil" { $setType(NIL); }
| "optional" { $setType(OPTIONAL); }
| "otherwise" { $setType( OTHERWISE );}
| "parameters" { $setType( PARAMETERS );}
| "private" { $setType( PRIVATE );}
| "procedure" { $setType( PROCEDURE );}
| "public" { $setType( PUBLIC );}
| "qself" { $setType(QSELF); }
| "recover" { $setType( RECOVER );}
( (WS)+ "using" { $setType(
RECOVERUSING );}
)?
| "return" { $setType( RETURN );}
| "static" { $setType( STATIC );}
( (WS)+ (
"function" { $setType(
HB_STATIC_FUNC );}
| "procedure" { $setType(
HB_STATIC_PROC );}
)
)?
| "step" { $setType(HB_STEP); }
| "text" { $setType( HB_TEXT );}
| "to" { $setType(HB_TO); }
| "try" { $setType( TRY );}
| "while" { $setType( WHILE );}
| "with" { $setType(
HB_WITH );}
((WS)+ "object" { $setType(
WITHOBJ );}
)?
| "_hb_"
( "class" { $setType( DECLARE_CLASS );}
| "member" { $setType( DECLARE_MEMBER );}
)
| "_procreq_" { $setType( PROCREQ );}
| "_field" { $setType(FIELD); }
| "_get" { $setType(GET); }
| ('a'..'z'|'_'|'?') ('a'..'z'|'_'|'?'|'0'..'9')*
;
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
More information about the antlr-interest
mailing list