zoukankan      html  css  js  c++  java
  • Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

    词法分析程序ch3-01.l

    %{
    #include "ch3-01.tab.h"
    extern int yylval;
    %}
    
    %%
    [0-9]+	{ yylval = atoi(yytext); return NUMBER; }
    [ 	]	;		/* ignore white space */
    
    	return 0;	/* logical EOF */
    .	return yytext[0];
    %%
    

    语法分析程序ch3-01.y

    %token NAME NUMBER
    %%
    statement:	NAME '=' expression
    	|	expression		{ printf("= %d
    ", $1); }
    	;
    
    expression:	expression '+' NUMBER	{ $$ = $1 + $3; }
    	|	expression '-' NUMBER	{ $$ = $1 - $3; }
    	|	NUMBER			{ $$ = $1; }
    	;
    %%
    int main()
    {
    	yyparse();
    	return 0;
    }
    
    int yyerror(char *s)
    {
    	printf("%s/n",s);
    	return 0;
    }
    

    编译运行命令:

    (1)首先,编译lex文件,生成lex.yy.c文件

              flex ch3-01.l


    (2)其次,编译yacc文件,生成ch3-01.tab.h 与ch3-01.tab.c文件

             bison -d ch3-01.y


    (3)链接生成的.c 文件,并生成相应的可执行文件

             gcc -o ch3-01 ch3-01.tab.c lex.yy.c -ly -lfl


    (4)运行可执行文件,计算简单表达式

           ./ch3-01.exe

            99+11


  • 相关阅读:
    urlrewrite地址重写的使用
    算法学习
    数据库之Case When
    速卖通返回503错误
    概述:软件开发工具
    c#将List<T>转换成DataSet
    表单域规范写法
    ant打包和jar包混淆
    Node.js文档和教程
    webpack开发和生产两个环境的配置详解
  • 原文地址:https://www.cnblogs.com/shine-yr/p/5214971.html
Copyright © 2011-2022 走看看