【发布时间】:2012-11-09 20:10:11
【问题描述】:
假设我有一个简单的语法(词法分析器和解析器),用于解析和评估简单的数学表达式(如一些 antlr 示例),它还允许简单的变量定义(即分配浮点值)和使用这些变量。例如。可以处理以下情况:
r = 2.5;
PI = 3.14;
PI * r * r;
这应该用于更复杂的语法。事实上,有几个不同的。 问题是上述 contains 的词法分析器基本上将每个字符串识别为标记类型 ID,即潜在的变量名称,但更复杂的语法可能包含其他关键字。
如果我这样做
lexer grammar ComplexLexer;
import SimpleMathExprLexer;
// ...
IF : 'if'|'IF';
THEN : 'then'|'THEN';
// ...
那么 ID 已经与这些关键字匹配并不是很有帮助。简单地将 import 语句移到这些规则之下是行不通的。有什么办法可以解决这个问题,还是我在看构图时完全走错了路?
【问题讨论】:
-
这在任何环境中都是一个众所周知的难题(不仅仅是 antlr --- 只是在一般的语法中)。这里描述了我知道的一种方法:itu.dk/~brabrand/banana-algebra
标签: antlr composition