精华内容
下载资源
问答
  • 简单计算器Lex-Yacc 用lex和yacc构建的简单计算器
  • lex和yacc

    千次阅读 2010-06-13 23:25:00
    lex负责词法解析,而yacc负责语法解析,其实说白了...   lex和yacc类似的,分为三个部分 %{ 这里可以写任何的c代码 比如一些初始化的状态 %} 这里是一些的lex或者yacc的定义

    lex负责词法解析,而yacc负责语法解析,其实说白了就是lex负责根据指定的正则表达式,将输入的字符串匹配成一个一个的token,同时允许用户将当前匹配到的字符串进行处理,并且允许返回一个标识当前token的标识码。而yacc则负责进行语法解析,将一个个的token最终形成一个完整的语法。

     

    lex和yacc类似的,分为三个部分

    %{

    这里可以写任何的c代码

    比如一些初始化的状态

    %}

    这里是一些的lex或者yacc的定义

    比如lex里的%s

    yacc里的%type %token %left %right %union

    %%

    这里可以写任何的lex或者yacc代码

    %%

     

    这里可以写任何c代码

     

    这里需要注意的是,对于一个语法分析器来说,可以不使用lex而自己根据需要来完成,但是使用lex可以直接使用正则来进行匹配,使得整个过程更加简单。而lex与yacc之间的通信就是靠%union里定义的联合体来完成。其实%union里定义的联合体最终会被生成一个叫yylval的全局变量,这个全局变量可以在lex和yacc之间传递变量。

     

    %type<xxx> 这里的xxx必须是%union里定义的一个成员变量,那么%type<xxx> 里定义的类型就会被存储这个成员变量里

    %token<xxx> 与%type类似,只是它所代表的是token而已

     

    $$代表当前的type所计算的最终结果,而$1代表type组成式中的第一个变量的值,以此类推

     

    lex定义了一种叫state的东西,其实这个东西很容易理解,比如class abc{} 与function xxx{}同样是{},它们含意其实是不同的,一个代表了类,一个代表了方法定义,因此state这个东西就是定义当前的一个状态,用%s来进行定义。通过BEGIN来开始

    END来结束

     

    乱七八糟写了这么多,主要是备忘,发现以前看这一块的时候明白了,结果过一段时间又有些遗忘。

     

    注:lex->flex yacc->bison 这是两个升级。

     

    mysql中的sql分析器就只用了yacc而没有使用lex,go的语法分析器也一样,只使用了bison,而没有使用flex;而php则同时使用了flex和bison。目前来看,应该是正则在效率上还是有些问题的,因此对于效率要求比较高的一些应用宁愿自己来写lex功能,而不会直接使用lex.

    展开全文
  • lex yacc

    2016-01-29 15:09:00
    基本文件格式 /* ===== 文件格式 ====== ...// lex 文件 // 说明: 文件中 yywarp函数是必须的 %{ int yywrap(void); %} %% %% int yywrap(void) // 此函数未定义的时候,flex 需加 --noyywrap 选项 ...

    基本文件格式

    /* ===== 文件格式 ======
    定义
    %%
    规则
    %%
    子程序
     =========== */
    // lex 文件
    // 说明: 文件中 yywarp函数是必须的
    %{
    int yywrap(void); 
    %}
    %%
    %%
    int yywrap(void) // 此函数未定义的时候,flex 需加 --noyywrap 选项
    {
        return 1;
    }
    
    int main(void)
    {
      yyin = stdin;
      return yylex();
    }
    // yacc 文件 // 说明: yyerror 一个处理错误的函数 // 说明: program 一个非终结字符,后面紧跟冒号':',下面换行后一个分号';'表面 program 是一个空串。 // 说明: yyparse 这个函数是 yacc 生成的,可以直接调用。 %{ void yyerror(const char *s); %} %% program: ; %% void yyerror(const char *s) { } int main() { yyparse(); return 0; }

     编译使用

    ../octave/configure LEX='flex --noyywrap'
    flex --noyywrap conftest.l

    转载于:https://www.cnblogs.com/liuyj-vv/p/5169063.html

    展开全文
  • lex&yacc系列(1)--- lex和yacc简介

    千次阅读 2019-02-02 22:36:35
    Imagination is more ...首先,lex和yacc是开源工具,帮助开发者实现语法,词法分析。如果作为一个开发者去使用它们,就需要阅读它们的说明书,直到你会用,一句话,就是个工具而已。当然,如果你对编译原理...

    Imagination is more important than knowledge.Knowledge is limited. Imagination encircles the world.—— Einstein


    首先,lex和yacc是开源工具,帮助开发者实现语法,词法分析。如果作为一个开发者去使用它们,就需要阅读它们的说明书,直到你会用,一句话,就是个工具而已。当然,如果你对编译原理很清楚,可以更好地理解它,甚至可以分析它们的源代码哦。

    既然是工具,了解它们的话就需要说明书。

    Lex和yacc都是贝尔实验室在20世纪70年代发明的。

    有时你会碰到bison和flex

    The GNU Project of the Free Software Foundation distributes bison, a yacc replacement;  BSD and GNU Project also distribute flex (Fast Lexical Analyzer Generator), “a rewrite of lex intended to right some of that tool’s deficiencies,” according to its reference page.

     

    何时建议你采用lex和yacc
    Lex and yacc help you write programs that transform structured input. This includes an enormous range of applications—anything from a simple text search program that looks for patterns in its input file to a C compiler that transforms a source program into optimized object code.

    Lex and yacc are tools designed for writers of compilers and interpreters.  Any application that looks for patterns in its input, or has an input or command language is a good candidate for lex and yacc.

    Furthermore, they allow for rapid application prototyping, easy modification, and simple maintenance of programs.

    When a task involves dividing the input into units and establishing some relationship among those units, you should think of lex and yacc.

     

    推荐几本书:

    《lex and yacc--second edition》 – 作者:John R. Levine

    《编译原理》,又叫龙书

    《自制编程语言》 – 前桥和弥

    展开全文
  • 编译原理lex和yacc

    2010-05-12 17:26:13
    lex和yacc实现代码 lex和yacc实现代码 lex和yacc实现代码
  • Lex和Yacc

    2013-01-11 10:35:41
    Flex是GNU组织的一个Lex实现,在使用中发现其中的-c-n参数选项无效。 在匹配上规则后,FLex会将匹配的内容输出到屏幕上,如果不想输出内容,可以重新定义ECHO宏来屏蔽输出 #define ECHO 定义ECHO宏为空就行了...

    词法分析和语义解析。

    Flex是GNU组织的一个Lex实现,在使用中发现其中的-c和-n参数选项无效。

    在匹配上规则后,FLex会将匹配的内容输出到屏幕上,如果不想输出内容,可以重新定义ECHO宏来屏蔽输出

    #define ECHO

    定义ECHO宏为空就行了。

    展开全文
  • Lex和Yacc的入门

    2017-09-20 00:26:45
    lex和yacc简介 lex使用 yacc使用 实例应用lex和yacc简介lex和yacc是自动编译C代码的工具,适合于解析简单语言.这些工具常用于编译器或者解释器的组成部分,或者用于读取配置文件.“lex”和“yacc”这两个名字所代表的...
  • Lex和Yacc应用方法(九).Windows下使用Lex和Yacc草木瓜 20070904一、序 不想Lex和Yacc系列的最后一篇文章竟如此“难产”,已时隔三个月之久。不由慨叹自由可支配时间是如此之少,如此岂不谓新时代的“奴隶”~ 罢罢...
  • lex和yacc环境配置

    千次阅读 2017-06-03 16:01:30
    lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。 软件需求: 系统 win7-64位(win7-32, win8, win10全部通过) c++编译器: vs2010(2008,2013,2015也全部通过) lex...
  • 编译原理 lex yacc

    2012-06-04 23:04:08
    lex yacc 实现 源码,适用于课程设计
  • LEX和YACC第二版中文版。LEX是词法分析工具,YACC是语法分析工具,使用这两个工具可以编写编译器等。
  • 本系列文档就是专门用来由浅入深的介绍两 个有名的Unix 工 具Lex 和Yacc,并会一步一步的详细解释如何用这两个工具 来实现我们想要的任何 功能的解析程序
  • Lex和Yacc应用方法(二).再识Lex与Yacc

    千次阅读 2009-05-11 23:56:00
    Lex和Yacc应用方法(二).再识Lex与Yacc草木瓜 20070314早在二十世记七十年代之前,编写编译器一直是一个非常费时的工作。但到了1975这一年这一切却发生了重大转变,首先Stephen C. Johnson Lesk在贝尔实验室完成了...
  • Lex和Yacc.之Lex

    2014-04-16 15:50:45
    Lex和Yacc应用方法(一).初识Lex 分类: C++/C/C#2007-03-15 17:23 25533人阅读 评论(22) 收藏 举报 yacc正则表达式floatflexreferencecompiler  Lex和Yacc应用方法(一).初识Lex 草木瓜 ...
  • 对于由Lex生成的lexer来说,要和yacc结合使用,每当Lex中匹配一个模式时都必须返回一个标记。因此Lex中匹配模式时的动作一般格式为: {pattern} { /* do smthg*/ return TOKEN_NAME; } 于是 Yacc 就会获得返回的...
  • lex yacc 入门

    2015-03-02 15:08:22
    lex yacc 入门 lex yacc 是词法分析语法分析工具,windows下对应的是win_flex.exewin_bison.exe。下载地址:点击打开链接。 然后打开vs2012,来新建一个win32控制台程序,命名为learnLexAndYacc。 ...
  • Lex和Yacc入门

    2016-07-07 10:33:00
    Lex和Yacc入门 标签:lexyacc 2013-07-21 23:02584人阅读评论(0)收藏举报 分类: Linux(132) 原文地址:http://coanor.blog.hexun.com/38241166_d.html 1. 简介 只要你在Unix环境中写过程序...
  • 文章目录ubuntu下安装lex和yacc系列 ubuntu下安装lex和yacc系列 sudo apt-get install flex bison 结果我发现我已经安装了哈哈吧   A.lex %{ #include<stdio.h> %} %% [a-z] printf("%c",yytext[0]+'A'...
  • 在开发程序的过程中经常会遇到文本解析的问题,例如:解析 ...本系列文档就是专门用来由浅入深的介绍两 个有名的 Unix 工 具 Lex Yacc,并会一步一步的详细解释如何用这两个工具 来实现我们想要的任何 功能的解析程序
  • 摘要在本章中,将会首先给出一个最基本的lex和yacc联合使用的框架,这个基本框架最主要的特点就是能够正确的被编译。在我学习lex和yacc的过程中经历了无数次的痛苦折磨,我发现一个一开始足够简单而且能够被正确编译...
  • 编译原理——Lex和yacc的安装

    千次阅读 2019-01-27 11:12:13
    Lex和yacc的安装 Linux用户 Lex和Yacc可以直接从终端安装,命令: apt install flex bison 部分系统可能还需要手动安装 gcc 和 make 等工具,请自行测试。 安装完成后,在终端输入以下命令,若可以正确显示出...
  • lex和yacc简介

    2014-07-15 07:52:45
    今个又要捣鼓可恶的lex和yacc,当年编译原理被虐成翔,满以为zai'jian
  • PLY是流行的编译器构造工具lex和yacc的纯python实现。 PLY官方文档:http://www.dabeaz.com/ply/ PLY文档翻译:https://qyliang.blog.csdn.net/article/details/97686897 PLY由两个单独的模块组成lex.py和 yacc . py...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 912
精华内容 364
关键字:

lex和yacc