[antlr-interest] About removing the "; " In the last sentence of a block
    roberto 
    rag700504 at hotmail.com
       
    Wed Dec  7 13:27:49 PST 2011
    
    
  
Hello Everyone
I tried to create a simple language where I want to delete the last ';' which appears in a block. Besides having compound blocks, that do not need ';' at the end of the sentence.
This example is what I have
*{
   a=34;;;;
   for(34)
   a=59;
}
a=34;
I would like to remove the ';' which goes behind the 59. I wondered if there anyway of say when you find a TOKEN, do not consume this but continue
expression_statement
      : ';'
      | expression (';' | *'}'*)
      ;
*For example I would like that when you find the'}'generates sentence but not because it will consume the token used by the command block.
*
=============== Here is the grammar I test ====================================
grammar lteA;
program	
	:  statement_list EOF
	;
	
statement_list
	: statement+
	;
statement
	: compound_statement
	| expression_statement
	| block
	;	
	
compound_statement
	: sen_for
	;
	
expression_statement
	: ';'
	| expression (';' | '}')
	;
	
expression	
	: ID '=' (INT | STRING | FLOAT | CHAR)
	;
	
sen_for
	: 'for' '(' INT ')'
	;
block	
	: '*' '{' statement_list '}'	
	;
		
ID  :	('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
     ;
INT
	: '0'..'9'+
	| '0' 'x' HEX_DIGIT+
     ;
FLOAT
     :   ('0'..'9')+ '.' ('0'..'9')* EXPONENT?
     |   '.' ('0'..'9')+ EXPONENT?
     |   ('0'..'9')+ EXPONENT
     ;
COMMENT
     :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
     |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
     ;
WS  :   ( ' '
         | '\t'
         | '\r'
         | '\n'
         ) {$channel=HIDDEN;}
     ;
STRING
     :  '"' ( ESC_SEQ | ~('\\'|'"') )* '"'
     ;
CHAR:  '\'' ( ESC_SEQ | ~('\''|'\\') ) '\''
     ;
fragment
EXPONENT : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;
fragment
HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
fragment
ESC_SEQ
     :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
     |   UNICODE_ESC
     |   OCTAL_ESC
     ;
fragment
OCTAL_ESC
     :   '\\' ('0'..'3') ('0'..'7') ('0'..'7')
     |   '\\' ('0'..'7') ('0'..'7')
     |   '\\' ('0'..'7')
     ;
fragment
UNICODE_ESC
     :   '\\' 'u' HEX_DIGIT HEX_DIGIT HEX_DIGIT HEX_DIGIT
     ;
===================================================================
  best
regard Roberto
Note:
I rewrite because was scribble when convert the HTML to text
    
    
More information about the antlr-interest
mailing list