可能重复:为 flex lexer
创建 C/C++ 解析器/分析器
字符串输入的好工具
我的想法是创建一个可以计算布尔表达式的解析器,我的下一步是在我的c++程序中使用它,但我不知道如何使用它。
目前这个计算器可以在命令行下运行,代码不好,不知道怎么在我的程序中使用。我想用一个函数lex_yacc(var)
来调用这个计算器,并且var
是输入,比如主程序读取的var
是is (T+F)
,所以会发送到lex_yacc(var)
,最后func返回1
。
我将 lexya.l 定义如下:
%{
#include <stdlib.h>
void yyerror(char *);
#include "lexya_a1.tab.h"
%}
%%
"T" { yylval = 1; return boolean; }
"F" { yylval = 0; return boolean; }
"!F" { yylval = 1; return boolean; }
"!T" { yylval = 0; return boolean; }
[+*\n] return *yytext;
"(" return *yytext;
")" return *yytext;
[\t] ;/* .... */
. yyerror("....");
%%
int yywrap(void) {
return 1;
}
和 lexya_a1.y:
%{
#include <stdlib.h>
int yylex(void);
void yyerror(char *);
%}
%token boolean
%left '+' '-'
%left '*'
%left '(' ')'
%%
program:
program expr '\n' { printf("%d\n", $2); }
|
;
expr:
boolean { $$ = $1; }
| expr '*' expr { $$ = $1 * $3; }
| expr '+' expr { $$ = $1 + $3; }
| '(' expr ')' { $$ = $2; }
;
%%
void yyerror(char *s) {
printf("%s\n", s);
}
int main(void) {
yyparse();
return 0;
}