【发布时间】:2017-05-15 20:42:18
【问题描述】:
(我将假期时间花在一些语言理论上。如果这是一个幼稚的问题,请原谅。)
根据here:
LL 文法,尤其是 LL(1) 文法,非常实用 兴趣,因为这些语法的解析器很容易构建,并且 由于这个原因,许多计算机语言被设计为 LL(1)。
那么,出于好奇,哪些当代计算机语言是 LL(1) ? C、Java、C# 或 Python 是否属于这一类?
【问题讨论】:
-
我确实阅读了一篇关于这个主题的非常有趣的文章[并使用语法和正则表达式],并以为我已经为它添加了书签,但不幸的是它似乎没有。我似乎认为 Perl 在那里。 (很抱歉这个全面无益的评论)
-
@Martin Perl 绝对不是 LL(1)。解析 Perl 是不可判定的。
-
然后是反转,Perl 在底部(LL4?)。有趣的是,这是唯一由语言学家编写的语言,因此作为人类编写比作为机器阅读要容易得多(相对而言)。
-
问这个问题的更好的地方是Lambda the Ultimate。请参阅相关问题Good languages with simple grammar。
-
@martin:
LL(k)中的(k)指的是您可能需要查看的前瞻令牌的数量,以便决定如何处理当前令牌。许多语言根本不是LL,实际上,增加k的值很少有帮助,尽管如果你允许k不受限制,你可以增加LL解析的能力(参见ANTLR,例如)。在这种情况下,解析器不再是线性时间,您可能需要更强大的算法,例如 LR。
标签: compiler-construction formal-languages ll