ANTLR 语法错误意外标记:加号
您好,我的 ANTLR 树语法有一个小问题。我正在使用 ANTLRWorks 1.4。在解析器语法中,我有这样的规则:
declaration
: 'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
-> ^('variable' IDENTIFIER TYPE)+
所以我想要每个标识符一棵树。
在树语法中,我只留下了重写规则:
declaration
: ^('variable' IDENTIFIER TYPE)+
但是当我检查语法时,我得到了语法错误意外标记+。而树语法中声明规则末尾的就是这个+号。那么我做错了什么?
解析器语法工作正常并按预期构建 AST 树。我为 C# 生成了词法分析器和解析器,并测试了一些输入。
Hi I have a small problem in my ANTLR tree grammar. I am using ANTLRWorks 1.4. In parser grammar I have the rule like this:
declaration
: 'variable' IDENTIFIER ( ',' IDENTIFIER)* ':' TYPE ';'
-> ^('variable' IDENTIFIER TYPE)+
So I wanted one tree per each IDENTIFIER.
And in the tree grammar I left only rewrite rules:
declaration
: ^('variable' IDENTIFIER TYPE)+
But when I check grammar I got syntax error unexpected token +. And it is this + sign at the end of the declaration rule in the tree grammar. So what I am doing wrong?
Parser grammar works fine and builds AST tree as expected. I generated lexer and parser for C# and test it for some input.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
解析源代码时:
您尝试构建一个如下所示的 AST:
但由于
'variable'
和TYPE
始终是相同的标记,因此我认为无需创建所有这些重复的节点。为什么不直接这样做:这将创建一个像这样的 AST:
?
When parsing the source:
you're trying to construct an AST that looks like:
But since
'variable'
andTYPE
are always the same token, I see no need to create all those duplicate nodes. Why not just do:which will create an AST like:
?