我是靠谱客的博主 落寞秋天,这篇文章主要介绍Lex和Yacc的入门lex和yacc简介lex使用yacc使用实例应用,现在分享给大家,希望可以做个参考。

  • lex和yacc简介
  • lex使用
  • yacc使用
  • 实例应用


lex和yacc简介

lex和yacc是自动编译C代码的工具,适合于解析简单语言.这些工具常用于编译器或者解释器的组成部分,或者用于读取配置文件.“lex”和“yacc”这两个名字所代表的也包括这些工具的 GNU 版本 flex 和 bison. lex 和 yacc 是一对配对工具。lex 将文件分解为成组的“记号(tokens)”,大体上类似于单词。yacc 接受 成组的记号,并将它们装配为高层次的结构,类似于句子。yacc 设计用来处理 lex 的输出,不过您也可以 编写自己的代码来完成此任务。同样,lex 的输出很大程度上设计用于为某类解析器提供数据。

lex使用

Lex语法分析

yacc使用

实例应用

使用的是linux系统下的flex和bison,它们是lex和yacc的加强版.
calculator.l的源码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
%{ #include <stdio.h> #include "y.tab.h" int yywrap(void) { return 1; } %} %% "+" return ADD; "-" return SUB; "*" return MUL; "/" return DIV; "n" return CR; ([1-9][0-9]*)|0|([0-9]+.[0-9]*) { double temp; sscanf(yytext, "%lf", &temp); yylval.double_value = temp; return DOUBLE_LITERAL; } [ t] ; . { fprintf(stderr, "lexical error.n"); exit(1); } %%

calculator.y源码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
%{ #include<stdio.h> #include<stdlib.h> #define YYDEBUG 1 %} %union { int int_value; double double_value; } %token <double_value> DOUBLE_LITERAL %token ADD SUB MUL DIV CR %type <double_value> expression term primary_expression %% line_list : line | line_list line ; line : expression CR { printf(">>%lfn",$1); } expression : term | expression ADD term { $$=$1+$3; } | expression SUB term { $$=$1-$3; } ; term : primary_expression | term MUL primary_expression { $$=$1*$3; } | term DIV primary_expression { $$=$1/$3; } ; primary_expression : DOUBLE_LITERAL ; %% int yyerror(char const *str) { extern char *yytext; fprintf(stderr,"parser error near %sn",yytext); return 0; } int main(void) { extern int yyparse(void); extern FILE *yyin; yyin=stdin; if(yyparse()){ fprintf(stderr,"Error! Error! Error!n"); exit(1); } }
复制代码
1
2
3
4
5
操作命令 $bison -ydv calculator.y $flex calculator.l $gcc -o calc y.tab.c lex.yy.c

最后

以上就是落寞秋天最近收集整理的关于Lex和Yacc的入门lex和yacc简介lex使用yacc使用实例应用的全部内容,更多相关Lex和Yacc内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(88)

评论列表共有 0 条评论

立即
投稿
返回
顶部