私はYaccプログラミングを始める前に、入力テキストファイル に正しくペアのかっこのシーケンスが含まれているかどうかをチェックするプログラムを書くのは簡単な作業です。誤ったシーケンス は、「構文エラー!」として通知されます。私はバイソンとフレックスを使用します。bison yacc yyerrorは機能しません
例正しいデータ: (()()((())())()) が、 (() が正しくありません
私の問題は、私はそれが動作するはずだと思うことですが、。 。yyerror関数は、たぶん私は何か間違ったことをやっている動作していないように、私を修正してください思える ここに私のコード Yaccのコードです:。
%{
int yylex();
void yyerror(char* x);
%}
%%
S: S A
|A
;
A: '('S')'
|'(' ')'
;
とのlexコード:
%{
#include "y.tab.h"
%}
%%
[\(\)] return(yytext[0]);
. {printf("%c - error!\n",yytext[0]);}
%%
void yyerror(char* x)
{
printf("syntax error");
exit(1);
}
したがって、問題は構文エラーを発生させないということですが、どのくらい括弧を書くかは関係ありません。 編集: は、ここで私はそれをコンパイル方法は次のとおりです。 screen
印刷しないでください。あなたが提供されたエラーを印刷します。 – EJP
exit(1)も機能しないので、問題はありません。それはyyerrorメソッドを入力しません –
私はコメントではなく、答えとしてそれを投稿した理由です。それは間違ったままです。 – EJP