Синтаксическая ошибка в Bison после обработки одного токена - PullRequest
2 голосов
/ 27 апреля 2011

Я пытаюсь разогнаться на Flex и Bison.Я могу разобрать один токен с очень простым «языком», но на втором он не работает, хотя токен является легитимным.*

%{
#include <stdio.h>

extern "C" {
  int yyparse(void);
  int yylex(void);
  int yywrap() { return 1; }
  extern int yylineno;
  extern char* yytext;
  extern int yylval;
}

/* #define YYSTYPE char * */

void yyerror(const char *message)
{
  fprintf(stderr, "%d: error: '%s' at '%s', yylval=%u\n", yylineno, message, yytext, yylval);
}

main()
{
  yyparse();
}

%}

%token PLAIN_TEXT INTEGER_NUMBER

%%
test : text | number;

text : PLAIN_TEXT
        {
          /*printf("plain text\n");*/
        };

number : INTEGER_NUMBER
        {
          /*printf("number\n");*/
        };

%%

Результаты:

$ ./test
cat
plain text entered: 'cat'

dog
plain text entered: 'dog'
1: error: 'syntax error' at 'dog', yylval=0

$ ./test
34
Number entered

34
Number entered
1: error: 'syntax error' at '34', yylval=0

Почему я получаю эту синтаксическую ошибку?

1 Ответ

3 голосов
/ 27 апреля 2011

В вашем test.y отсутствует грамматика для случая, когда несколько test продолжаются.Итак, как насчет добавления грамматики следующим образом?

%%
tests : test | tests test; /* added */

test : text | number;

...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...