Возможный дубликат:
Хорошие инструменты для создания C / C ++ парсера / анализатора
Строковый ввод для сгибания лексера
Моя идея состоит в том, чтобы создать синтаксический анализатор, который может вычислять выражение Boolean, и мой следующий шаг — использовать его в моей программе на c ++, но я не знаю, как его использовать.
В настоящее время этот калькулятор может работать в командной строке, код не очень хороший, и я не знаю, как использовать его в моей программе. Я хочу использовать функцию lex_yacc(var)
вызвать этот калькулятор, и var
это вход, например, основная программа прочитала var
является (T+F)
, Так что он будет отправлен lex_yacc(var)
наконец, функция возвращается 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;
}
Задача ещё не решена.
Других решений пока нет …