【发布时间】:2016-02-18 05:01:20
【问题描述】:
我想在 C 源文件中添加所有预处理语句,并忽略所有其他语句。我尝试在词法分析器中添加最后一条规则,例如Unknown : . -> skip ; // or -> channel(HIDDEN) ;,或者在解析器中添加最后一条规则,例如:ignored : . ;,但它不起作用。
这是我的语法:
grammar PreProcessStatement;
pre_if_statement
: pre_if pre_elif* pre_else? pre_endif
;
pre_if : PreProcessBegin 'if' statement;
pre_endif : PreProcessBegin 'endif' ;
pre_else : PreProcessBegin 'else' ;
pre_elif : PreProcessBegin 'elif'statement ;
pre_define : PreProcessBegin 'define' statement;
pre_undef : PreProcessBegin 'undef'statement ;
pre_pragma : PreProcessBegin 'pragma'statement;
statement
: IDENTIFIER
| statement Condition statement
| '(' statement (Condition | Logic_or | Logic_and) statement ')'
| statement (Logic_or | Logic_and) statement
;
Logic_or
: '||'
;
Logic_and
: '&&'
;
PreProcessBegin : '#' ;
Condition : '==' | '>' | '>='| '<' | '<=' ;
NUM : INT | HEX ;
STRID : '"'ID'"' ;
IDENTIFIER : [a-zA-Z_0-9]+ ;
ID : [a-zA-Z_]+ ;
INT : [0-9]+ ;
HEX : '0x'INT;
WS : [ \t\n\r]+ -> skip ;
NewLine : ('\n' | '\r' | '\n\r');
MulLine : '\\' NewLine -> skip ;
Unknown : .*? -> skip ; // or -> channel(HIDDEN) ;
输入:
#if (test == ttt)
#elif rrrr
#else
aaa
#endif
错误:
line 4:0 extraneous input 'aaa' expecting '#'
我已阅读下面的链接,但不起作用。 Skipping unmatched input in Antlr
我的语法有什么问题?
【问题讨论】:
标签: antlr4