英文:
Broadcasting Tokens on Different Channels
问题
我正在(暂时性地)处理一个语言翻译问题,我想在翻译的代码中包括源代码中的注释。
我正在研究ANTLR 4书籍《The Definitive ANTLR4 Reference》中的第12.1节“在不同通道上广播标记”,似乎解决了这个问题。
不幸的是,当我尝试这个示例时,它不起作用!我收到以下错误消息:
错误(177):Cymbol.g4:59:30:WHITESPACE不是一个已识别的通道名错误(177):Cymbol.g4:62:33:COMMENTS不是一个已识别的通道名
快速搜索发现Antlr
问题#1555,该问题将问题视为工具正常工作。
我的问题仍然是,如何将注释与AST合并?
TIA
我复制了示例代码lexmagic/Cymbol.g4:
...
WS : [ \t\n\r]+ -> channel(WHITESPACE) ;
...
并收到以下错误:
错误(177):Cymbol.g4:59:30:WHITESPACE不是一个已识别的通道名错误(177):Cymbol.g4:62:33:COMMENTS不是一个已识别的通道名
英文:
I'm (tentatively) working on a language translation problem where I would like to include the comments in the source code in the translated code.
I'm working through the ANTLR 4 book "The Definitive Aantlr4 Reference" and section 12.1 "Broadcasting Tokens on Different Channels" seems to address this issue.
Unfortunately, when I try this example this it doesn't work! I get the error:
> error(177): Cymbol.g4:59:30: WHITESPACE is not a recognized channel
> name error(177): Cymbol.g4:62:33: COMMENTS is not a recognized channel
> name
A quick search unveils Antlr
issue #1555, which loses the issue as the tool working correctly.
My question remains, how do I merge the comments with the AST?
TIA
I copied the sample code lexmagic/Cymbol.g4
...
WS : [ \t\n\r]+ -> channel(WHITESPACE) ;
...
and got the error:
> error(177): Cymbol.g4:59:30: WHITESPACE is not a recognized channel
> name error(177): Cymbol.g4:62:33: COMMENTS is not a recognized channel
> name
答案1
得分: 1
你必须声明你想要使用的通道,除了2个内置通道(DEFAULT
和 HIDDEN
)。
在你的语法顶部(在任何规则之前)添加一个通道块:
channels {
WHITESPACE
}
请记住,通道和标记共享相同的命名空间。你不能在通道和标记中使用相同的标识符。
英文:
You have to declare the channels you want to used, except for the 2 built-in channels (DEFAULT
and HIDDEN
).
At the top of your grammar (before any rule) add a channels block:
channels {
WHITESPACE
}
Keep in mind that channels and tokens share the same namespace. You cannot use the same identifier for a channel and a token.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论