Pete Siemsen
2007-10-07 04:51:56 UTC
I'm trying to implement include file processing with ANTLR 3.0.1. I
stole liberally from the
ANTLR Wiki page that describes it (http://www.antlr.org/wiki/pages/
viewpage.action?pageId=557057).
Now my grammar doesn't recognize my test input file, which contains just
#pragma include ("System\CIM_DiagnosticResult.mof")
#pragma include ("Event\CIM_Indication.mof")
#pragma include ("Core\CIM_ManagedElement.mof")
When I run it, I get
line 1:8 mismatched input 'include' expecting set null
line 2:8 mismatched input 'include' expecting set null
line 3:8 mismatched input 'include' expecting set null
Finally, here's the grammar. I stripped it down to just the relevant
stuff:
grammar cimmof2java;
tokens {
BACKSLASH = '\\' ;
DOUBLEQUOTE = '"' ;
INCLUDE = 'include' ;
LOCALE = 'locale' ;
LPAREN = '(' ;
PRAGMA = '#pragma' ;
RPAREN = ')' ;
SINGLEQUOTE = '\'' ;
}
mofSpecification
: (mofProduction)+
;
mofProduction
: compilerDirective
;
compilerDirective
: PRAGMA (PragmaInclude | PragmaLocale)
;
PragmaInclude
: INCLUDE LPAREN f=StringConstant RPAREN
;
PragmaLocale
: LOCALE LPAREN StringConstant RPAREN
;
WhiteSpace
: ( ' ' | '\t' | '\n' | '\r')+ {$channel=HIDDEN;}
;
fragment
StringCharacter
: ' '..'!' | '#'..'[' | ']'..'~'
;
The above grammar produces the error. What's wrong?
Note that the PragmaInclude rule used to be a parser rule, with a
lowercase "p". Include processing works in the lexer, so I changed
the "p" to a "P". ANTLR accepts it and produces compileable Java,
but when I run it I get the errors.
Perhaps it's relevant that if I change the "P" on "PragmaLocale" to
"p", I get this error instead:
line 1:8 no viable alternative at input 'include'
line 2:8 no viable alternative at input 'include'
line 3:8 no viable alternative at input 'include'
-- Pete
stole liberally from the
ANTLR Wiki page that describes it (http://www.antlr.org/wiki/pages/
viewpage.action?pageId=557057).
Now my grammar doesn't recognize my test input file, which contains just
#pragma include ("System\CIM_DiagnosticResult.mof")
#pragma include ("Event\CIM_Indication.mof")
#pragma include ("Core\CIM_ManagedElement.mof")
When I run it, I get
line 1:8 mismatched input 'include' expecting set null
line 2:8 mismatched input 'include' expecting set null
line 3:8 mismatched input 'include' expecting set null
Finally, here's the grammar. I stripped it down to just the relevant
stuff:
grammar cimmof2java;
tokens {
BACKSLASH = '\\' ;
DOUBLEQUOTE = '"' ;
INCLUDE = 'include' ;
LOCALE = 'locale' ;
LPAREN = '(' ;
PRAGMA = '#pragma' ;
RPAREN = ')' ;
SINGLEQUOTE = '\'' ;
}
mofSpecification
: (mofProduction)+
;
mofProduction
: compilerDirective
;
compilerDirective
: PRAGMA (PragmaInclude | PragmaLocale)
;
PragmaInclude
: INCLUDE LPAREN f=StringConstant RPAREN
;
PragmaLocale
: LOCALE LPAREN StringConstant RPAREN
;
WhiteSpace
: ( ' ' | '\t' | '\n' | '\r')+ {$channel=HIDDEN;}
;
fragment
StringCharacter
: ' '..'!' | '#'..'[' | ']'..'~'
;
The above grammar produces the error. What's wrong?
Note that the PragmaInclude rule used to be a parser rule, with a
lowercase "p". Include processing works in the lexer, so I changed
the "p" to a "P". ANTLR accepts it and produces compileable Java,
but when I run it I get the errors.
Perhaps it's relevant that if I change the "P" on "PragmaLocale" to
"p", I get this error instead:
line 1:8 no viable alternative at input 'include'
line 2:8 no viable alternative at input 'include'
line 3:8 no viable alternative at input 'include'
-- Pete