【发布时间】:2018-01-01 04:13:52
【问题描述】:
只是寻找一种让 ANTLR4 生成解析器的简单方法,该解析器将执行以下操作(忽略 ; 之后的任何内容):
int #i ; defines an int
int #j ; see how I have to go to another line for another statement?
我的解析器如下:
compilationUnit:
(statement END?)*
statement END?
EOF
;
statement:
intdef |
WS
;
// 10 - 1F block.
intdef:
'intdef' Identifier
;
// Lexer.
Identifier: '#' Letter LetterOrDigit*;
fragment Letter: [a-zA-Z_];
fragment LetterOrDigit: [a-zA-Z0-9$_];
// Whitespace, fragments and terminals.
WS: [ \t\r\n\u000C]+ -> skip;
//COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
END: (';' ~[\r\n]*) | '\n';
本质上,任何时候我有一个statement,我都需要它在输入另一个之前需要一个换行符。我不在乎是否有 3 个新行,然后在第二个新行上保留一堆标签,只要有一个新行。
问题是,ANTLR4 解析树似乎在输入错误,例如:
.
(假装点不存在,它实际上没有输入)
int #i int #j
糟糕,我们有两个在同一行!
关于如何实现这一目标的任何想法?感谢您的帮助。
【问题讨论】: