![]() |
1
0
当然。这可能不太理想,但却是非常普遍的。 POSIX shell语法远不是Flex/BySon解析器的理想候选,而对于使用Flex和BySon的BASH实现来说,唯一可以说的是,它演示了如果将这些工具推到各自的极限,这些工具是多么灵活。在这里,文档并不是唯一需要“词汇反馈”的地方。 但即使是在纪律严明的语言中,词汇反馈也是有用的。或者它的替代方案:将部分解析逻辑写入词汇扫描器,以便它知道解析何时需要一组不同的词汇规则。
可能最著名(或最常被评论)的词汇反馈是对c风格的转换表达式的解析,这需要lexer知道
这里还有一些其他的例子,它们可能被认为是词汇反馈的相对良性的使用,尽管它们确实增加了lexer和解析器之间的耦合。
posix shell语法肯定不是lalr(1),甚至不是上下文无关的。但是,大多数语言不能用lalr(1)解析器进行扫描式解析,如果考虑到所有的语法因素,许多语言都没有上下文无关的语法。(参见上面C风格的转换表达式)也许Shell比大多数人更远离柏拉图的理想。但是,随着时间的推移,它从一个简单到类型化,而不是形式上可分析的内核发展起来。(关于这个借口是否可以推广到Perl,我不打算在这里讨论。) 一般来说,我要说的是,嵌入其他语言(正则表达式、html片段、flex/bison语义操作、shell算术扩展等)的语言对一个简单的解析器/扫描器模型提出了挑战。尽管有很多有趣的工作和可靠的实验,我的感觉是语言嵌入仍然缺乏一个良好的可实现的形式结构。而且由于大多数语言都嵌入了子语言,所以在它们的解析器实现中存在并将继续存在某种附加语言。在某种程度上,这就是为什么这个领域的研究如此有趣。 |
|
Gengetsu · 如何从Bison中的语法启动变量? 7 年前 |
![]() |
Jon Deaton · 如何使用元循环计算器引导Lisp解释器 7 年前 |
![]() |
liyuan · 解释器如何翻译for循环? 7 年前 |
![]() |
ææç · 解释器交互模式保持文件打开的目的 10 年前 |
|
user3318845 · 字节码如何更快?[已关闭] 11 年前 |
![]() |
Trung Bún · OCaml解释器:为什么我的解释器只执行文件中的一行 11 年前 |