0

可能重复:为 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;
}
4

0 回答 0