[antlr-interest] COBOL

Greg Lindholm glindholm at yahoo.com
Wed May 29 17:49:05 PDT 2002


--- Balvinder Singh wrote:
> AphabeticUserDefinedWord : (('0'.. '9')+ ('-')*)* ('0' .. '9')*
('A' ..
> 'Z' 'a' .. 'z') ('A' .. 'Z' 'a' .. 'z' '0' .. '9')* (('-')+ ('A' ..
'Z' 'a'
> .. 'z' '0' .. '9')+)*
> ;

Maybe this will help with COBOL user defined words.
What I did was factor them into 2 rules depending on if they start with
a letter or a digit.

// Identifier:
//      Start with a digit or letter
//      Middle can be digit, letter, or hyhen (or underscore)
//      Must have at least one letter
//      End with a digit or letter (*** NOT CHECKED ***)
//
// Acucobol:
//      BINARY: 'B' '#' ('0'|'1')+
//      OCTAL:  ('O' '#' | '%') ('0'..'7')+
//      HEX:    ('H'|'X') '#' (HEXDIGIT)+
//
// Micro Focus:
//      HEX:    'H' '"' ( HEXDIGIT)+ '"'
//      HEX:    'X' '"' ( HEXDIGIT)+ '"' (Non-numeric literal)


// Identifiers and Hex/Oct/Bin Literals can start with a letter
START_WITH_LETTER
    :
        ('b' '#') => 'b' '#' ('0'|'1')+
	    { $setType(T_NUMERIC_LITERAL); }
    |
        ('o' '#') => 'o' '#' ('0'..'7')+
	    { $setType(T_NUMERIC_LITERAL); }
    |
        (('h'|'x') '#') => ('h'|'x') '#' (HEXDIGIT)+
	    { $setType(T_NUMERIC_LITERAL); }
    |
        ('h' '"') => 'h' '"' (HEXDIGIT)+ '"'
	    { $setType(T_NUMERIC_LITERAL); }
    |
        ('x' '"') => 'x' '"' (HEXDIGIT)+ '"'
	    { $setType(T_HEX_LITERAL); }
    |
        LETTER (LETTER | DIGIT | HYPHEN)*
	    { $setType(T_IDENTIFIER); }
    ;

// Identifiers and unsigned numbers can start with a digit
START_WITH_DIGIT
    :   (DIGIT (DIGIT | HYPHEN)* LETTER) => 
            DIGIT (DIGIT | HYPHEN)* LETTER (LETTER | DIGIT | HYPHEN)*
	    { $setType(T_IDENTIFIER); }
    |   (DIGITS '.' DIGITS) => DIGITS '.' DIGITS (EXPONENT)?
        { $setType(T_FLOAT); }
    |   (DIGITS '.' EXPONENT) => DIGITS '.' EXPONENT
        { $setType(T_FLOAT); }
    |	DIGITS
        { $setType(T_INT); }
    ;

Greg


__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com

 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list