【发布时间】:2021-12-23 10:07:02
【问题描述】:
我正在尝试从头开始创建一种简单的编程语言(解释器),但我想知道为什么我应该使用词法分析器。 对我来说,创建一个直接解析代码的解析器似乎会更容易。我忽略了什么?
【问题讨论】:
-
对于几乎所有现实世界的语言,无扫描仪解析需要无限的前瞻/回溯。这样就排除了许多解析算法,并且可能无法为您提供所需的性能。如果没有词法分析器,空格处理也会变得更加麻烦。正确区分关键字和标识符也是如此。如果您不想用“意外的字母 'i'; 预期的 'a' 或 'v'”替换“意外的关键字 'if'; 预期的 'as' 或 'var'”,好的错误消息也会变得更难。也就是说,无扫描仪解析是一回事,可能很适合您的用例。
-
不清楚您所说的“使用词法分析器”是什么意思。如果您没有使用词法分析器生成器(例如 flex),那么您想到的两种选择之间可能没有太大区别。
标签: parsing compiler-construction interpreter lexer