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. ResultSet转成java类对象

    在做web开发时遇到一个事情: 需要从mysql数据表中查询数据并遍历查询结果 这样最简单的方式是:查询到结果根据表中字段列表的顺序来一个个获取字段,但这样需要记住字段的顺序,操作起来不是那么方便.因 ...

  2. alternatives命令使用方法

    alternatives命令使用方法 alternatives是Linux下的一个功能强大的命令.仅仅能在root权限下运行.如系统中有几个命令功能十分相似,却又不能任意删除,那么能够用 altern ...

  3. Treeview1列表拒绝添加重复信息

    function ItemExist(Text:string;TreeView:TTreeView):Boolean; var   i: Integer; begin   Result:=False; ...

  4. CSS里的单位

    CSS中预设了16种颜色以及16种颜色的衍生色,这16种颜色是CSS规范推荐的.并且一些主流的浏览器都可以识别.例如以下表所看到的: 十六进制颜色是最经常使用的定义方式.它的基本格式为#RRGGBB, ...

  5. Cts框架解析(12)-ITargetPreparer

    測试开启前的设备系统准备工作. 接口 /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Ap ...

  6. Asp.Net MVC 3【URLs, Routing,and Areas】续

    http://www.cnblogs.com/HuiTai/archive/2012/07/24/2597875.html 接着前面继续学习分享我们的路由. 现在我们把Global.asax文件里的R ...

  7. iOS 2D绘图详解(Quartz 2D)之Transform(CTM,Translate,Rotate,Scale)

    前言:Quartz默认采用设备无关的user space来进行绘图,当context(画板)建立之后,默认的坐标系原点以及方向也就确认了,可以通过CTM(current transformation ...

  8. Linux下的简单好用的计算器bc

    1. 关于bc bc是随意精度计算器语言,通常在linux下当计算器用,简单好用.相当于windows下的计算器. 2. 支持的运算符 主要的数学运算: + 加法 - 减法 * 乘法 / 除法 ^ 指 ...

  9. _vsnprintf 用法

    _vsnprintf,C语言库函数之一,属于可变参数.用于向字符串中打印数据.数据格式用户自定义. 头文件: #include <stdarg.h> 函数声明: int _vsnprint ...

  10. 交换a、b

    有两个变量a和b,不使用任何中间变量交换a和b. 方法一: 采用如下方法: a=a+b; b=a-b; a=a-b; 这样做的缺点就是如果a.b都是比较大的数,则a=a+b时就会越界. 而采用: a= ...