antlr3 - 读取变量的闭包值

时间:2013-04-09 12:42:22

标签: antlr antlr3 antlrworks

我想在一个简单的文本行中解析并读取一个闭包值,如下所示:

1!

line
    :   (NUMBER EXCLAMATION myText=~('\r\n')*)
{ myFunction($myText.text); }

NUMBER
    :   '0'..'9'+;

EXCLAMATION
    :   '!';

我在 myText 变量中得到的只是'某事'的最终'g',因为在生成的代码中可以看到 myText 在每个循环中重新编译出现〜('\ r \ n')

我的回答是:有没有优雅的方法来读取变量'myText'的'something'值?

TIA

1 个答案:

答案 0 :(得分:1)

在解析器规则中,~不会否定字符,而是取消令牌。因此,~('\r\n')会匹配除文字'\r\n'令牌之外的任何令牌(在您的示例中,这将是NUMBEREXCLAMATION)。

解析器无法“驱动”词法分析器:在解析器匹配NUMBEREXCLAMATION之后,您无法告诉词法分析器生成一些其他令牌,而不是之前完成的操作。不管解析器“需要什么”,词法分析器总是会根据some simple rules生成标记。

换句话说:你无法在解析器中处理它。