字符串文字标记生成带有转义序列标记的 MismatchedTokenException
我目前正在尝试实现一个 Antlr 解析器。
添加转义序列支持后,我在标识字符串文字的标记中获得了奇怪的 MismatchedTokenException 。
以下是导致该问题的 Antlr 解析器示例:
rule: STRING_LITERAL ;
STRING_LITERAL
:
'"' STRING_GUTS '"'
;
fragment
STRING_GUTS
:
( ESC | ~('\\' | '"') )*
;
ESC
:
'\\'
( '\\' | '"' )
;
您在此代码中发现任何问题吗?
请注意,如果我从 STRING_GUTS 中删除 ESC,则字符串解析工作正常......
I am currently trying to implement an Antlr parser.
I obtain strange MismatchedTokenException in a token that identifies string literals once I add escape sequence support.
Following is the Antlr parser example that causes the issue:
rule: STRING_LITERAL ;
STRING_LITERAL
:
'"' STRING_GUTS '"'
;
fragment
STRING_GUTS
:
( ESC | ~('\\' | '"') )*
;
ESC
:
'\\'
( '\\' | '"' )
;
Do you seen any issue in this code?
Note that if I remove ESC from the STRING_GUTS, the string parsing is working well...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须发布出现此错误的输入、您正在使用的 ANTLR 版本以及您运行测试的方式,因为我认为该语法没有问题,如您所见:
Tg
Main.java
如果我根据语法生成词法分析器和解析器 (1),编译所有 java 源文件 (2) 并运行 Main 类 (3):
以下内容将打印到控制台:
即:输入 < code>src 被解析正如预期的那样。
如果您在使用 ANTLRWorks 的解释器时遇到问题:不要使用它,它有一点问题。要么使用 ANTLRWorks 的调试器,要么使用自定义类,就像我上面所做的那样。
You'll have to post the input you're getting this error with, the ANTLR version you're using, and the way you're running your test(s), because I see no problem with that grammar, as you can see:
T.g
Main.java
If I generate a lexer and parser from you grammar (1), compile all java-source files (2) and run the Main class (3):
The following is printed to the console:
I.e.: the input
src
is parsed as expected.If you're encountering problems with ANTLRWorks' interpreter: don't use it, it's a bit buggy. Either use ANTLRWorks' debugger, or use a custom class as I did above.