在我们学习词法分析时,就会思考如何构造一个词法分析器?
一个词法分析器可以通过手工构造;也可以通过以下方式自动生成一个词法分析器:向一个词法分析器生成工具描述出词素的模式,然后将这些模式编译为具有动词分析器功能的代码。
如何对正则表达式进行转换?
首先转换为不确定有穷自动机,然后再转换为确定有穷自动机。
词法分析器的作用:
1.读入源程序的输入字符、将他们组成词素,生成并输出一个词法单元序列,每个词法单元对应于一个词素。这个词法单元序列被输出到语法分析器进行语法分析。
2.词法分析器通常还要和符号表进行交互。当词法分析器发现了一个标识符的词素时,它要将这个词素添加到符号表中。在某些情况,词法分析器会从符号表中读取有关标识符种类的信息,以确定向语法分析器传送哪个词法单元。
3.完成一些识别词素之外的其他任务。(1)过滤掉源程序中的注释和空白(空格、换行符、制表符以及在输入中用于分隔词法单元的其他字符)(2)将编译器生成的错误信息与源程序的位置联系起来。例如词法分析器可以负责记录遇到的换行符的个数,以便给每个出错信息赋予一个行号。如果源程序使用了一个宏预处理器,则宏的扩展也可以由词法分析器完成。
词法分析器与语法分析器的交互过程:通常,交互是由语法分析器调用词法分析器来实现的,其中图中的命令getNextToken所指示的调用使得词法分析器从它的输入中不断读取字符,知道它识别出下一个词素为止。词法分析器根据这个词素生成下一个词法单元并返回给语法分析器。
词法分析器分成两个级联的处理阶段:
1.扫描阶段,主要负责完成一些不需要生成词法单元的简单处理,比如删除注释和将多个连续的空白字符压缩成一个字符。
2.词法分析阶段,处理扫