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