[antlr-interest] Lines that don't match a rule ...
    James Ladd 
    james_ladd at hotmail.com
       
    Wed Jul  6 14:41:41 PDT 2011
    
    
  
Hi All,
I hope I can get a little help on the grammar I have below.
It works to a degree but I'm having trouble with some edge cases and that is
stressing me a little.
When I write something like the following I get the right response - sequence of tokens.
Im putting '\n' where I would have new lines.
\n
+ foo\n
\n
What I can't seem to do is put in a rule that matches a line that doesn't start with '+' or '-'
I get a no viable Alt Exception with all that I try.
My goal is to be able to detect lines starting with a '+' or a '-' followed by a messagePattern.
And lines NOT starting with a '+' or a '-'.  The grammar below does not contain any rules
for this, because I can't get them to work.
Please help
Rgs, James.
grammar Preprocessor;
options {
  language = Java;
}
@header {
  package compiler;
}
@lexer::header {
  package compiler;
}
lines
  : (lineBreak | messagePattern)* EOF
  ;
messagePattern
  : ('+' | '-') (unarySelector | keywordSelector | binarySelector)
  ;
unarySelector
  : NAME
  ;
keywordSelector
  : (KEYWORD NAME)+
  ;
  
binarySelector
  : BINARY_SYMBOL NAME
  ;
lineBreak
  : LINE_BREAK  ;
LINE_BREAK: ('\r'? '\n' | '\r');
NAME: ('a'..'z' | 'A'..'Z')('a'..'z' | 'A'..'Z' | '0'..'9')*;
KEYWORD: NAME':';
BINARY_SYMBOL: ('~'|'!'|'@'|'%'|'&'|'*'|'-'|'+'|'='|'\\'|'|'|'?'|'/'|'>'|'<'|',') ('~'|'!'|'@'|'%'|'&'|'*'|'-'|'+'|'='|'\\'|'|'|'?'|'/'|'>'|'<'|',')*;
 		 	   		  
    
    
More information about the antlr-interest
mailing list