Chinaunix首页 | 论坛 | 博客
  • 博客访问: 319698
  • 博文数量: 130
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 554
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-19 19:24
文章分类

全部博文(130)

文章存档

2016年(31)

2015年(16)

2014年(13)

2013年(70)

分类: LINUX

2015-10-30 10:23:23


点击(此处)折叠或打开

  1. lex token提取

  2. %{
  3. #include <stdlib.h>
  4. void yyerror(char *);
  5. #include "y.tab.h"
  6. %}
  7. %%
  8. [0-9]+ {
  9.             yylval = atoi(yytext);
  10.             return INTEGER;
  11.         }
  12. [-+\*\n] return *yytext;

  13. [ \t] ;
  14. . yyerror("invalid character");
  15. %%

  16. int yywrap(void) {
  17.     return 1;
  18. }



  19. yacc 语法分析
  20. %{
  21.     #include <stdio.h>
  22.     int yylex(void);
  23.     void yyerror(char *);
  24. %}

  25. %token INTEGER

  26. %%

  27. program:
  28.        program expr '\n' {printf("%d\n", $2);}
  29.        |
  30.        ;
  31. expr:
  32.         INTEGER {$$ = $1;}
  33.         | expr '+' expr {$$ = $1 + $3;}
  34.         | expr '-' expr {$$ = $1 - $3;}
  35.         | expr '*' expr {$$ = $1 * $3;}
  36. %%

  37. void yyerror(char *s) {
  38.     fprintf(stderr, "%s\n", s);
  39. }

  40. int main(int argc, char **argv) {
  41.     yyparse();
  42.     return 0;
  43. }

阅读(662) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~