L
O
A
D
I
N
G

Lex实现自动词法分析模块的原理


调研:Lex实现自动词法分析模块的原理

Lex是由美国Bell实验室M.Lesk等人用C语言开发的一种词法分析自动生成工具,其提供一种供开发者编写词法规则(正规式)的语言(Lex语言)以及这种语言的翻译器(这种翻译器将Lex语言编写的规则翻译成C语言程序)。

Lex的基本工作原理如下:

首先由正规式生成NFA,然后将NFA确定化为DFA,DFA经过简化后模拟生成词法分析器。

其中正规式由开发者使用Lex语言编写,其余部分由Lex翻译器完成。翻译器将Lex源程序翻译成一个名为lex.yy.c的C语言源文件,该文件含有两部分内容:一部分是根据正规式构造的DFA状态转移表,另一部分是用来驱动该表的总控程序yylex()。当主程序需要从输入字符流中识别一个记号时,只需要调用一次yylex()就可以了。为了使用Lex所生成的词法分析器,我们需要将lex.yy.c程序用C编译器进行编译,并将相关支持库函数连如目标代码。Lex的使用步骤如下图所示:

以SysY语言为例,要识别其中的标识符,只需要我们用Lex语言表示出标识符的正则表达式,之后Lex翻译器将根据我们的正则表达式构造DFA,只要我们输入的字符串被该DFA接受,就说明输入串为标识符,返回IDENFR,其他词法成分也都是相同的原理。


文章作者: 叁月柒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叁月柒 !
评论
  目录