C に似た言語用の語彙および構文アナライザーを作成する必要があります。この言語では、「記号 % から行末までのすべて」をコメントとして定義します。次の宣言は正しいですか?
Flex
...
[%][^\n]*[\n] { return T_COMMENT; }
[\n] { return T_NEWLINE; }
Bison
...
comment:com text newline;
text: |name text|digit text;
...
com: T_COMMENT { printf("%s",yytext); };
newline: T_NEWLINE { printf("%s",yytext); };
また、引用記号 " を定義する必要があります。次は正しいですか (flex)?
"\"" { return T_QUOTE; }
flex と bison の入力ファイルにはコンパイル エラーはありませんが、この C ライクな言語で書かれたプログラムをテスト入力として使用すると、結果として 1 行目に字句エラーが発生します。この行には字句エラーはありません。私のプログラムは次のように始めなければなりません: PROGRAM name_of_program とそれに対応する改行 次の宣言を行います: Flex
"PROGRAM" { return T_PROGRAM; }
バイソン
%start programma
%token T_PROGRAM
...
programma:PROGRAM name newline function STARTMAIN dec_var command ENDMAIN eof;
...
PROGRAM: T_PROGRAM { printf("%s",yytext); };
...
(大文字の単語は言語の一部であるため、PROGRAM のように定義されます) 何か間違ったことを書きますか? 問題は改行の定義にあると思いますが、よくわかりません。
ご回答ありがとうございます。長い投稿で申し訳ありません。