1

なぜこれらの結果が得られるのかわかりません。

++
+add
+syntax error 2

++
+add
+syntax error 4

++ は私の入力であり、lex は各文字をエコーし​​、yacc は + を取得するたびに追加を出力します。それは私にこのエラーを1つおきに与えています+それは取得します。入力方法に関係なく、すべての + で Enter キーを押しても同じ結果が得られます。

レックス

%{
#include "y.tab.h"

int chars = 0;
%}
%%
"+"     {ECHO; chars++; return ADD;}
.       {ECHO; chars++;}
\n      {ECHO;}
%%

yacc

%{
#include <stdio.h>
extern int chars;

void yyerror (const char *str) {
    printf ("%s %d\n", str, chars);
}
%}

%token ADD
%%
symbol  : ADD       {printf ("add\n");}
        ;
%%

int main () {
    while (1) {
        yyparse ();
    }
}
4

1 に答える 1

2

あなたの文法は、単一のトークンで構成される「文」のみを受け入れます+。2 番目+の を入力すると、構文エラーが発生します。あなたの文法では、ADD の後に ADD を使用することはできません。+文法が入力を受け入れるには、 の後の次のトークンはEOF でなければなりません。( .and\nの規則により、コードには他のあらゆる種類のものを入力できます+が、入力には 1 つしか入力できません。)

于 2013-03-13T02:32:54.450 に答える