さまざまなコメントや「終わりのない」コメント エラーさえもキャッチするルールを書こうと奮闘しています。
これは Pascal に基づく言語用です。コメントには次の形式を使用できます。
(* ...with any characters within... *)
(*
* separated onto multiple lines
*)
(* they can contain "any" symbol, so -, +, :, ; , etc. should be ignored *)
ただし、次のようなコメント エラーをキャッチする必要があります。
(* this comment has no closing r-parenthesis *
また(* this comment is missing an asterisk )
私はこれまでのところこれを持っています:
{%
int yylval;
vector<string> string_table;
int string_table_index = 0;
int yyline = 1, yycolumn = 1;
%}
delim [ \t\n]
ws {delim}+
letter [a-zA-Z]
digit [0-9]
id {letter}({letter}|{digit})*
number {digit}+
float {digit}+(\.{digit}+)?(E[+\-]?{digit}+)?
%%
{ws} {yycolumn += yyleng;}
"(*" {
int c;
yycolumn += yyleng;
while ((c = yyinput()) != '*' && c != EOF) {
c = yyinput(); /* read additional text */
if (c == '*') {
while ((c = yyinput()) == '*') {
c = yyinput();
if (c == ')') {
break; /* found the end */
} else if (c == EOF) {
cout << "EOF in comment\n";
break;
} else {
cout << "unended comment, line = "
<< yyline << ", column = "
<< yycolumn-yyleng << "\n";
}
}
}
}
}
最後の括弧をキャッチしていません(常に出力され
RPARENtoken
ます!)、コメント内のすべての文字を無視しているわけではありません(つまり
MINUStoken
、「-」の出力)複数行のコメントをキャッチすることはできません。
終了していないコメント エラーを正しくキャッチしているかどうかはわかりません。
私は近くにいると思います...誰かが私がどこで間違ったかを見ることができますか?