gpt4 book ai didi

whitespace - Antlr隐藏 channel 空白问题

转载 作者:行者123 更新时间:2023-12-04 01:24:58 25 4
gpt4 key购买 nike

我有以下 Antlr 语法:

grammar MyGrammar;

doc : intro planet;
intro : 'hi';
planet : 'world';
MLCOMMENT
: '/*' ( options {greedy=false;} : . )* '*/' { $channel = HIDDEN; };
WHITESPACE : (
(' ' | '\t' | '\f')+
|
// handle newlines
( '\r\n' // DOS/Windows
| '\r' // Macintosh
| '\n' // Unix
)
)
{ $channel = HIDDEN; };

在 ANTLRWorks 1.2.3 解释器中,输入 hi worldhi/**/worldhi/*A*/world 工作如预期。

但是,不应该工作的输入hiworld也被接受。如何让 hiworld 失败?如何在“hi”和“world”之间强制至少有一个空格(或注释)?

请注意,为了简化起见,我在本示例中仅使用了 MLCOMMENT 和 WHITESPACE,但也支持其他类型的注释。

最佳答案

您需要创建一个通用 ID token 。由于词法分析器会构建尽可能长的标记,因此它会将输入“hiworld”视为单个单词,因为它本身比“hi”或“world”长。这样的规则可能如下所示:

ID : ('a'..'z' | 'A'..'Z')+;

举个例子,这正是编程语言的解析器将“do”关键字与“double”(关键字类型,以“do”开头)或“done”(变量名称)分开的方式。

关于whitespace - Antlr隐藏 channel 空白问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1147983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com