Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在学习 ANTLR4 并尝试使用词汇模式。如何让相同的标记出现在多个词法模式中?作为一个非常简单的例子,假设我的语法有两种模式,我想匹配它们中的空格和行尾,我怎么能不以 WS_MODE1 和 WS_MODE2 结尾。有没有办法在两种情况下重用相同的定义?无论模式如何,我都希望在所有空白区域的输出流中获得 WS 令牌。这同样适用于 EOL 和其他可以出现在两种模式中的关键字。
规则必须有不同的名称,但您可以使用-> type(...)lexer 命令为它们赋予相同的类型。
-> type(...)
WS : [ \t]+; mode Mode1; Mode1_WS : WS -> type(WS); mode Mode2; Mode2_WS : WS -> type(WS);
即使Mode1_WSandMode2_WS不是fragment规则,代码生成器也会看到type命令并知道您重新分配了它们的类型,因此它不会为它们定义标记。
Mode1_WS
Mode2_WS
fragment
type