【发布时间】:2015-09-18 18:41:08
【问题描述】:
最近,我一直在研究关于词法分析的编译器理论。 据我了解,有一些构建词法扫描器的方法,例如:
- 使用 Lex/Flex 自动生成扫描仪。
- 构建您自己的。在示例中,我遇到了使用预读技术(模拟 DFA、NFA)的 switch case 模型。
我的问题是其中哪一种更适合实现基本的编程语言(由变量、条件、循环组成)? 它们在实践中应该如何使用?可以同时使用吗?
【问题讨论】:
-
词法扫描器仅将源划分为标记;它不会帮助您将标记解析为循环和条件等结构。如果要构建真正的软件,请使用 (f)lex;滚动你自己的词法扫描器需要更多的工作,更容易维护,需要更多的调试,而且不太可能更快。
-
你可以使用其中任何一个,但同时使用这两个没有意义。显然,像 lex/flex 这样的工具存在的原因是手动编写和维护扫描仪可能非常麻烦和耗时 - 特别是如果您正在改进编程语言以及词法分析器/解析器。
标签: compiler-construction lex lexical-analysis