欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
GNU bison
来自开放百科 - 灰狐
(版本间的差异)
小 |
|||
(未显示1个用户的6个中间版本) | |||
第1行: | 第1行: | ||
− | + | {{SeeWikipedia}} | |
− | + | GNU bison是一个自由软件,用于自动生成语法分析器程序,实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新版本中,Bison增加了对GLR语法分析算法的支持。 | |
− | + | GNU bison基本兼容[[Yacc]],并做了一些改进。它一般与[[GNU Flex]]一起使用。 | |
− | [[ | + | ==Examples== |
+ | touch parse.y | ||
+ | %{ | ||
+ | #include<stdio.h> | ||
+ | %} | ||
+ | |||
+ | %token NUM | ||
+ | %left '+' '-' | ||
+ | %left '*' '/' | ||
+ | |||
+ | %start line | ||
+ | |||
+ | %% | ||
+ | line: | ||
+ | /* empty */ | ||
+ | |line exp '\n' {printf("%d\n",$2);} | ||
+ | | error '\n'; | ||
+ | |||
+ | exp: exp '+' exp {$$ = $1 + $3;} | ||
+ | | exp '*' exp {$$ = $1 * $3;} | ||
+ | | exp '-' exp {$$ = $1 - $3;} | ||
+ | | exp '/' exp { if ($3 == 0) | ||
+ | $$ = 0; | ||
+ | else | ||
+ | $$ = $1/$3;} | ||
+ | | NUM {$$ = $1;}; | ||
+ | %% | ||
+ | |||
+ | yyerror() | ||
+ | { | ||
+ | printf("Error detected in parsing\n"); | ||
+ | } | ||
+ | |||
+ | main() | ||
+ | { | ||
+ | yyparse(); | ||
+ | } | ||
+ | bison parse.y | ||
+ | |||
+ | ==链接== | ||
+ | *[http://www.gnu.org/software/bison/ GNU bison主页] | ||
+ | |||
+ | [[category:GNU]] |
2023年6月27日 (二) 04:50的最后版本
您可以在Wikipedia上了解到此条目的英文信息 GNU bison Thanks, Wikipedia. |
GNU bison是一个自由软件,用于自动生成语法分析器程序,实际上可用于所有常见的操作系统。Bison把LALR形式的上下文无关文法描述转换为可做语法分析的C或C++程序。在新版本中,Bison增加了对GLR语法分析算法的支持。
GNU bison基本兼容Yacc,并做了一些改进。它一般与GNU Flex一起使用。
[编辑] Examples
touch parse.y
%{ #include<stdio.h> %}
%token NUM %left '+' '-' %left '*' '/'
%start line
%%
line:
/* empty */ |line exp '\n' {printf("%d\n",$2);} | error '\n';
exp: exp '+' exp {$$ = $1 + $3;} | exp '*' exp {$$ = $1 * $3;} | exp '-' exp {$$ = $1 - $3;} | exp '/' exp { if ($3 == 0) $$ = 0; else $$ = $1/$3;} | NUM {$$ = $1;}; %%
yyerror() { printf("Error detected in parsing\n"); }
main() { yyparse(); }
bison parse.y
[编辑] 链接
分享您的观点