私の考えは、ブール値の式を計算できるパーサーを作成することです。次のステップは、それを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;
}