我正在阅读这个问题的答案。 我似乎找不到为什么有人需要单独使用词法分析器的答案
它是程序在编译过程中经历的步骤之一吗?有人可以简单地解释一下为什么我需要一个词法分析器,它的用途是什么?
我正在阅读这个问题的答案。 我似乎找不到为什么有人需要单独使用词法分析器的答案
它是程序在编译过程中经历的步骤之一吗?有人可以简单地解释一下为什么我需要一个词法分析器,它的用途是什么?
词法分析器将获取输入字符流并将其转换为标记。
这可以用于多种目的。您可以对词位应用转换以进行简单的文本处理和操作。
或者可以将词位流提供给解析器,解析器将其转换为解析器树。
如果目标是编译,那么词法分析是第一步。将其视为获取字符并将其转换为标记的较低级别的步骤。解析器是一种更高级别的机制,其字母表由标记(由词法分析器创建)组成,它解析并创建解析树。
如果目标是文本操作,那么操作规则可以应用于词位本身。
Wikipedia http://en.wikipedia.org/wiki/Lexical_analysis就是一个很好的例子。
例如,如果要计算表达式“(33+3)*2”,第一步是将字符串拆分为标记“(”、“33”、“+”、“3”、“)”、“* ”、“2”。据我记得我的编译器课程是由最长匹配词自动机完成的。
重要的是要知道您不需要词法分析器进行解析。
词法分析器是许多编译器用来在某些方面简化解析的传统步骤。但它并不总是简化解析,事实上它可能会因为它创建中间对象而减慢解析速度。自上而下的递归下降解析器或诸如 PEG 解析表达式语法之类的东西不使用词法分析器,而是直接解析整个文本。
词法分析器可用于在概念上简化解析,但这不是必需的。