LEX:

yytext 数组包含匹配模式的文本;

使词法分析程序工作的两条规则是:
1. lex 模式只匹配输入字符或字符串一次。
2. lex 执行当前输入的最长可能匹配的动作。

由 lex 产生的词法分析程序是一个称为 yylex()的 C 例程,我们可以调用它.

main()和 yyerror(),这组函数是使用 lex 生成的词法分析程序进行编译时所必需的.

lex 词法分析程序从标准I/O 文件 yyin 中读取输入,所以当需要时,只需要改变 yyin。yyin 的默认值是stdin,

因为默认输入源是标准输入。当 yylex()到达输入文件的尾端时,它调用 yywrap(),该函数返回数值 0 或 1。如
果值为 1,那么程序完成而且没有输入。换句话说,如果值为 0,那么词法分析程序假设 yywrap()已经打开了它要读取

的另一个文件,而且继续读取 yyin。默认的 yywrap()总是返回 1。

% lex ch1-02.l
% cc lex.yy.c –o first –ll

词法分析程序与语法分析程序的通信

当一起使用 lex 扫描程序和 yacc 语法分析程序时,语法分析程序(parser)(yyparse)是较
高级别的例程。当它需要来自输入的标记时,就调用词法分析程序 yylex()。然
后,词法分析程序从头到尾扫描输入识别标记。它一找到对语法分析程序有意义
的标记就返回到语法分析程序,将返回标记的代码作为 yylex()的值。

最重要的子程序是 main(),这个子程序重复调用 yyparse()直到词法分析程
序的输入文件结束。例程 yyparse()是由 yacc 生成的语法分析程序.
lex ch1-n.l
yacc –d ch1-m.y
cc –c lex.yy.c y.tab.c
cc –o example-m.n lex.yy.o y.tab.o -ll

=================================================================

1. lex使具有起始状态的规则跟在一个没有起始状态的规则之后

  .+     ECHO;
  <MAGIC>.+ { BEGIN 0; printf("Magic:"); ECHO; }

可以将没有起始状态的规则隐式地认为具有一个“通配符”起始状态,它们匹配
所有的起始状态。这常常是错误的根源。flex 和 lex 的其他新版本都有“惟一的
起始状态”,可以解决通配符问题。参见第七章的“起始状态”一节可以得到更多的详细资料。

2.yacc 语法分析程序调用 yyerror()(它在用户的子程序段提供),然后识别特殊的规则 error。

3.yacc无论词法分析程序何时将标记返回给语法分析程序,如果标记有相关的值,词法
分析程序在返回之前都必须在 yylval 中存储值。

lex&yacc的更多相关文章

  1. Lex&Yacc Parser错误发生后再次parser之前恢复初始状态

    使用lex yacc 对文件进行parser时,如果文件内容有错,parser报错,然后你修改了文件,再次读入文件进行parser,如果你不是重启程序进行parser,那就需要对做些处理了. &quo ...

  2. 【译】Python Lex Yacc手册

    本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beaz ...

  3. [转载] 如何使用Lex/YACC

    原文: http://segmentfault.com/a/1190000000396608?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sou ...

  4. Lex+YACC详解

    1. 简介 只要你在Unix环境中写过程序,你必定会邂逅神秘的Lex&YACC,就如GNU/Linux用户所熟知的Flex&Bison,这里的Flex就是由Vern Paxon实现的一 ...

  5. LineCalc,一个基于Lex&Yacc的简单行计算工具

    LineCalc是基于Lex&Yacc的一个简单的行计算工具,支持常见的运算符和部分POSIX中定义于math.h中的数学函数:同时,LineCalc还提供了一个简单的错误处理模块,能检测公式 ...

  6. Lex Yacc手册

    Python Lex Yacc手册 本文是PLY (Python Lex-Yacc)的中文翻译版.转载请注明出处.这里有更好的阅读体验. 如果你从事编译器或解析器的开发工作,你可能对lex和yacc不 ...

  7. PERL/LEX/YACC技术实现文本解析--XML解析

    继周六的p_enum.pl后,再来一篇说说我用perl做的lex,yacc工具.之前说了,我学习lex和yacc的最初动机是为了做个C语言解释器的SHELL:但后来工作中的实际需要也是制作perl版l ...

  8. qmake理解(还可以加入Lex Yacc文件)

    关于qmake,好一段时间令我一头雾水,不知道用来干嘛的,只知道怎么用,而且也只懂那么一两个命令,详细看过资料以后整理如下: 1.首先,感性的认识是,qmake可以利用源文件(包括头文件h,实现文件c ...

  9. 编译原理之lex,yacc学习

    写在前面的几句废话 最近在项目的过程中接触了lex 和 yacc,他们可以帮助我们来实现自己的领域语言.最典型的应用就是可以帮助我们来实现自定义测试脚本的执行器.但是,这里也有一个限制,就是测试脚本要 ...

随机推荐

  1. delphi 自动滚动到最底端scroll

    自动滚动到最底端scrollUses MSHTML;{$R *.dfm}var  ScrollPos: integer=0;procedure TForm1.Button1Click(Sender: ...

  2. JAVA编程规则

    本附录包含了大量有用的建议,帮助大家进行低级程序设计,并提供了代码编写的一般性指导: (1) 类名首字母应该大写.字段.方法以及对象(句柄)的首字母应小写.对于所有标识符,其中包含的所有单词都应紧靠在 ...

  3. android Camera 数据流程分析

    这篇文章主要针对其数据流程进行分析.Camera一般用于图像浏览.拍照和视频录制.这里先对图像浏览和拍照的数据流进行分析,后面再对视频电话部分进行分析. 1.针对HAL层对摄像头数据处理补充一下 Li ...

  4. zookeeper作为soa服务器集群的协调调度服务器

    zookeeper作为soa服务器集群的协调调度服务器,当然自身也支持集群. ZooKeeper搭建系列集 ZooKeeper系列之一:ZooKeeper简介 ZooKeeper系列之二:ZooKee ...

  5. ASCII与UNICODE的区别

    1.ASCII的特点 ASCII 是用来表示英文字符的一种编码规范.每个ASCII字符占用1 个字节,因此,ASCII 编码可以表示的最大字符数是255(00H—FFH).这对于英文而言,是没有问题的 ...

  6. Android(java)学习笔记100:android开发中修改字体

    首先如果android内部自带的字体不是我们需要的字体,那我们就需要字体文件导入到android开发工程中,下午我们详细讲述: 1.我们首先分析知道,我想要TextView控件中文字的字体是:华文楷体 ...

  7. jar包冲突解决方法

    import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Enumerati ...

  8. java 网络编程-tcp/udp

    --转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...

  9. linux-软连接

    ln -s /opt/lampp/bin/mysql(绝对路径) /usr/local/bin(软连接目录或者文件) 如果不愿意配置环境变脸可以直接创建env查出的路径下建连接

  10. linux上传下载

    linux传下载 1.可以通过xftp连接服务器直接 拖拽 2.yum install lrzsz   通过rz/sz命令上传下载