一万小时 / 编译原理系列之词法分析相关重要工具

远没到拼智商的时候

编译原理系列之词法分析相关重要工具

2013-05-16 posted in [点滴技术] with tags: [Lex and FSM]

Lex

语言可以形式化描述(Regular Express),所以也是可以自动化 生成相应的词法分析工具,而Lex(Flex)即是这样的工具—— 生成词法分析工具的工具。

例如,有如下的词法定义:

Lex的语法还是比较简单的,通常即是用正则表达式来定义语言,像:

digit       [0-9]
integer     {digit}+
exponant    [eE][+-]?{integer}

real        {integer}("."{integer})?{exponant}?

是对实数的定义。

当然,lex工具的使用通常是与yacc一起的,也是为什么这两个工具如同好基友 一样总是一同提及。yacc是生成语法分析工具的工具,它是根据语言的生成式 来生成其相应的语法分析工具,而生成的语法分析工具可以将lex的输出token串 转换为中间表达式(如树等)

而上面的lex源程序对应的yacc源程序为:

如此,一个简单的计算器的词法分析和语法分析便完成了。

具体的编译可以参考:

An example: a little expression interpreter

参考资料

  1. An example: a little expression interpreter
comments powered by Disqus
Top

Press q to hide the help

Key Action Key Action
Small Scroll j Scroll Down k Scroll Up
Big Scroll b Scroll to Bottom t Scroll to Top
Post Navigation n Next Post(if exists) p Previous Post(if exists)
Page Navigation h Go to Blog's Home Page a Go to Blog's Archive Page
Page Navigation c Go to Blog's Category Page ? Show this help
Misc s Go to Search Box q hide the help