gpt4 book ai didi

antlr - 语法模块化 : A way to import lexer rules after defining others first?

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

假设我有一个简单的语法(词法分析器和解析器)用于解析和评估简单的数学表达式(如一些 antlr 示例),它还允许简单的变量定义(即分配浮点值)和使用这些变量。例如。可以处理以下情况:

 r = 2.5;
PI = 3.14;
PI * r * r;

这应该用于更复杂的语法。事实上,有几个不同的。
问题是上述包含的词法分析器基本上将每个字符串识别为标记类型 ID,即潜在的变量名称,但更复杂的语法可能包含其他关键字。

如果我做
lexer grammar ComplexLexer;
import SimpleMathExprLexer;
// ...
IF : 'if'|'IF';
THEN : 'then'|'THEN';
// ...

那么 ID 已经与这些关键字匹配并不是很有帮助。简单地将 import 语句移到这些规则之下是行不通的。有没有办法解决这个问题,或者当我看构图时我完全走错了路?

最佳答案

ANTLR 只会优先考虑首先定义的规则。这意味着如果你有一个词法分析器语法 G , 导入词法分析器语法 G3然后是语法G2 :

lexer grammar G;

import G3, G2;

...

或类似地:
lexer grammar G;

import G3;

...
lexer grammar G3;

import G2;

...

来自 G3 的规则将优先于 G2 , 但来自 G 的规则将优先于 G3G2 .

就像单个词法分析器语法一样, IDENTIFIER 之类的规则您将在匹配 "if" 等关键字的规则之后定义, "then" , ...

关于antlr - 语法模块化 : A way to import lexer rules after defining others first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13315237/

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