parsing - 为什么最多向前查看 1 个输入标记?

标签 parsing regex-lookarounds ll-grammar

我目前正在尝试实现 LL 解析器,但我有一个问题。 我需要最多向前查看 1 个输入 token 来验证用户的输入是否正确 语法正确还是有其他原因?

最佳答案

有许多不同种类的解析算法。您所描述的称为 LL(1),根据定义,它仅使用一个前瞻标记。然而,还有其他解析算法使用比这更多的前瞻。例如,LL(2) 解析器使用两个先行标记,而 LL(*) 解析器具有无界先行。对于某些语法,一个先行标记是不够的(即,属于 LL(2) 但不是 LL(1) 的语法)。这是一个例子:

S → n | n + S

尝试找出为什么一个先行标记还不够,但两个标记就足够了。

解析算法尝试保持低先行标记数量的原因是为了简单性和效率。随着先行标记数量的增加,驱动解析器所需的解析表的大小也会增加,构建这些表的复杂性也会增加。

关于parsing - 为什么最多向前查看 1 个输入标记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32286579/

相关文章:

java - 为什么在解析 XML 时得到空节点值

java 正则表达式 : match word after another with at least one digit

regex - 正则表达式如何防止后面跟着特定单词的匹配。像第一个字符包含前瞻之类的东西?

ANTLR4 力 LL(1)

c++ - 子解析器属性

objective-c - Gpx 解析器或 GPX 文档

parsing - 如何判断一个文法是LL(1)、LR(0)还是SLR(1)?

java - 是否可以让 Antlr4 从基本语法词法分析器而不是生成词法分析器生成词法分析器?

Java正则表达式过滤带有注释的行未按预期工作