gpt4 book ai didi

command - ANTLR4 中各种 Lexer 命令的功能。我的解释正确吗?他们每个人做什么?

转载 作者:行者123 更新时间:2023-12-05 08:12:56 29 4
gpt4 key购买 nike

我已经开始学习在 ANTLR 4.5 中编写词法分析器。来自 this page ,作为文档,我看到存在以下 Lexer 命令:more、pushMode(x)、popMode、type(x)、channel(x)、mode(x)、skip。

我一直没能清楚地了解它们的功能。以下是我对他们每个人所做的理解:

跳过

这将跳过当前 token 中已读取的所有字符。过去的 token 保持不变。

所以,如果词法分析器已经读取了一些字符a,接下来读取b,对应于

SOME_RULE : 'b' -> skip;

然后它将丢弃 ab 并转到下一个标记。

更多

我不确定这是做什么的。文档说已经阅读的文本不会被丢弃,但没有说明最终会有什么标记。假设我有

RULE_1 : 'a' -> more;
RULE_2 : 'b';

如果读取一个a,然后读取一个b,生成的 token 是否对应于具有语义值ab 的RULE_2 ,或 RULE_1 RULE_2,或其他?

类型(x)

如果我有

RULE_1 : 'a' -> type(TOKEN_1);
RULE_2 : 'b';

只会将a作为TOKEN_1的语义值,或者将所有对应于不是标记的规则的字符,从最后一个标记开始,取作为语义值?如果 a ba 到达,TOKEN_1 的值将是 a 还是 ba?

模式(x)

这会将模式切换到新的模式。但是在这里,字符是被读取到切换点保留还是被丢弃?代币呢?每种模式都有单独的堆栈吗?

推送模式(x)

这与 mode 有何不同?是否已经读取的字符被推送到它要进入的模式,而这在 mode 中不会发生?

弹出模式

弹出的是什么?如果我有

RULE_1 : 'a' -> popMode;
RULE_2 : 'b' ;

如果我得到一个 b 和一个 apopMode 是否会导致只返回 a,或者ba,或者 token ,如果有的话?为什么我偶尔会因空堆栈而出错?

channel (x)

我找不到对此的解释。什么是 channel ?

如果可能的话,任何人都可以举例说明这些命令的功能吗?

如果这太宽泛,请告诉我。

谢谢。

最佳答案

这里有免费教程The ANTLR Mega Tutorial .

除了skip,这些命令非常专业,您可以在The Definitive ANTLR 4 Reference 中通过示例找到何时以及为什么使用它们。 .

关于command - ANTLR4 中各种 Lexer 命令的功能。我的解释正确吗?他们每个人做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43458763/

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