bison — Использование .c скомпилированного файла Lex Yacc в Stack Overflow

Возможный дубликат:
Хорошие инструменты для создания 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;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]