lex和yacc
本专栏通过学习使用lex和yacc来构建一个自己的shell,也就是命令解释器。主要的目的还是掌握词法分析程序和语法分析程序,为编译原理的学习打下基础。
天堂1223
这个作者很懒,什么都没留下…
展开
-
使用lex---01
(一)、写在前面lex是构建词法分析程序的工具。词法分析程序把随机输入流标记化,即将他拆分成词法标记。然后,可以进一步处理这种被标记化的输出,通常是由yacc来处理的,或者他就成为“最终产品”。当编写lex规范的时候,可以创建lex匹配输入所用的一套模式。每次匹配一个模式的时候,lex程序就调用我们提供的C代码来处理匹配的文本。采用这种方式,lex程序将输入拆分成成为标记的字符串。lex本身不产生可原创 2016-02-18 16:42:38 · 5448 阅读 · 1 评论 -
纯C实现的词法分析和lex实现的词法分析的对比
(一):写在前面在上面的学习当中,我们通过简单的lex例子,进一步扩展lex例子,通过和yacc的融合来进行简单英语语法分析。通过这几个例子,使我们深深的感受到lex和yacc的方便和强大功能。我们最终的目标是通过学习使用lex和yacc来实现一个简单的shell解释器,估计借用lex和yacc力量,我们的shell命令解释器实现起来就非常简单了。(二):英语简单语法分析扩展在这里我们通过对上一小节原创 2016-01-15 14:03:16 · 3626 阅读 · 1 评论 -
yacc语法分析与lex词法分析相结合
语法对于某些应用,我们所完成的简单的词类识别也许足够用了;而另一些应用需要识别特殊的标记序列并执行适当的动作。传统上,对这样的一套动作描述成为语法。使用右箭头”->”意味着可以用一个新的符号取代一套特殊的标记。 例如:subject ->noun\pronoun 指示一个新的符号subject是名词或代词。词法分析程序和语法分析程序的通信当一起使用lex扫描程序和yacc语法分析程序的时候,语法原创 2015-05-17 15:32:40 · 3989 阅读 · 0 评论 -
LEX学习 第二节
接着第一节中的第一个示例,我们扩展第二个示例,将词法分析程序扩展为识别不同的词性。 下面是程序示例:%{/* * 扩展第一个示例以识别其他的词性 * */%}%%[ ]+ /* 忽略空白 */;is |am |are |were |was |be |being |been |do |does |did |will |would |should |原创 2015-05-14 21:23:51 · 956 阅读 · 0 评论 -
最简单的lex的例子
lex和yacc可以帮助你编写程序转换结构化输入。既包括从输入文件中寻找模式的简单文本搜索程序,也包括将源程序变换为最佳的目标代码的C编译程序等。lex使用一系列对可能标记的描述,产生一个能识别那些标记的C例程(我们成为词法分析器。词法分析程序(lexer),或成为扫描程序)。lex使用的标记描述称为正则表达式。yacc采用简明的语法描述并产生在一个能分析语法的C例程。即分析程序。yacc原创 2015-05-05 10:01:11 · 4643 阅读 · 0 评论