写一个什么都不解析的例子:
//第一部分:定义段
%%
//第二部分:规则段
mystatment:
;
%%
//第三部分:用户子例程段
Yacc的三部分与Lex的三部分类似。
在第一部分的定义段,包括%{和%}括起来的的C代码段、包括#include部分和变量定义;同时可能会有:%union,%start,%token,%type,%left,
%right和%nonassoc声明。
在第二部分的规则段,由Yacc语法规则和“{}”括起来的C代码组成。
在第三部分的用户子例程段,Yacc将这部分内容完全拷贝到翻译后的C文件中。也就是说你可以在这里定义自己的C函数然后在规则段中的C代码中调用它。
Yacc代码写好后,用下面的命令来翻译并编译
yacc -oyc01.c yc01.y
gcc -o yc01 yc01.c -ly
却发现不能不能运行通过,这是因为解析所要用到的yylex函数,是在lex中定义的。
所以,yacc要正确运行,需要同lex结合起来。
在这里需要说明的是:
lex处理的是词法解析,也就是说它擅长的是解析满足某一正则表达式的词法;
而Yacc处理的是语法解析,它解析各种词法按照一定的语法规则组合而成的语句。
同时,Yacc中的变量和堆栈能帮助我们顺利地提取满足词法和语法的内容。
接下来的我们看看如何使得lex和yacc进行结合,并传递解析内容。
分享到:
相关推荐
lex词法分析器&yacc语法分析器,值的你花时间去看去学的一本书
lex&yacc语言解析
lex&yacc 教程
简单介绍unix下的工具lex 和 yacc的语法与应用,很不错的资料
Lex Yacc 第二版 英文版, 经典的lex与Yacc学习资料,虽然是扫描版本但代码部分非常清晰(先前我找到的中文版本代码部分根本看不清楚)
我的这个例子不是讲这些理论,而是想对那些初学者讲解,如何把这种第三方工具集成到vc中,如何设置vc ide来编译这些文件。 有兴趣的人,可以给我写信。 haoyujie@sohu.com 但我很忙,可能很久也不去一回,所以可能...
Lex & Yacc 2ed
在windows下可以使用的lex&yacc编译器,使用超级方便
从lex&yacc说到编译器
该文档主要讲解了如何用lex和yacc组建一个编译器。并描述了如何做一个复杂的计算器。 This document explains how to construct a compiler using lex and yacc. Lex and yacc are tools used to generate lexical ...
编译原理 lex & yacc qq
lex和yacc是进行编译原理实验的常用工具,提供一份lex和yacc的资料。
在VC下建立Lex&Yacc编译环境的步骤和软件包
lex&yacc书上的历程,较为简单,对于初学者比较有帮助
_从lex&yacc说到编译器.rar _从lex&yacc说到编译器.rar
东南大学计算机系编译实验 lex&&yacc
介绍如何使用lex和yacc(用于生成词法分析器和解析器的工具)构造编译器。
一个简单的关于lex和yacc主要问题的总结
相当简洁的Lex&Yacc入门教程。
本书将教会你如何使用lex&yacc构造一个编译器。lex&yacc是两个用来生成词汇分析器和剖析器的工具。我假设你能够运用C 语言编程,并且理解数据结构的含义,例如“链表”和“树”。导言部分描写了构建编译器所需的基本...