我正在阅读解析器和解析器生成器,并在维基百科的LR解析页面中找到了这个语句:
可以使用LR解析器的一些变体来解析许多编程语言.一个值得注意的例外是C++.
为什么会这样?C++的哪个特定属性导致无法使用LR解析器进行解析?
使用谷歌,我只发现C可以用LR(1)完美解析,但C++需要LR(∞).
我目前正在寻找一个Java 6/7解析器,它生成一些(可能是标准化的)表单抽象语法树.
我已经发现ANTLR有一个Java 6语法,但似乎它只生成解析树,而不是语法树.我还读过有关Java编译器API的文章 - 但是所有提到的资源都是过度设计并且记录不完整(如果它确实生成了AST,我还没发现).
你知道任何好的解析器库,可能作为标准化输出吗?
谢谢
大家好,
这可能是这个问题的后续行动:Antlr规则优先事项
我正在尝试为reStructuredText标记语言编写ANTLR语法.
我面临的主要问题是:"如何在不掩盖其他语法规则的情况下匹配任何字符序列(常规文本)?"
让我们举一个带内联标记的段落的例子:
In `Figure 17-6`_, we have positioned ``before_ptr`` so that it points to the element
*before* the insert point. The variable ``after_ptr`` points to the element *after* the
insert. In other words, we are going to put our new element **in between** ``before_ptr``
and ``after_ptr``.
Run Code Online (Sandbox Code Playgroud)
我认为编写内联标记文本的规则很容易.所以我写了一个简单的语法:
grammar Rst;
options {
output=AST;
language=Java;
backtrack=true;
//memoize=true;
}
@members {
boolean inInlineMarkup = false;
}
// PARSER
text
: inline_markup (WS? inline_markup)* WS? EOF …Run Code Online (Sandbox Code Playgroud)