追趕評論我與想寫一個規則,將捕獲各種意見,甚至是「unended」註釋錯誤掙扎。與萊克斯
這是基於帕斯卡的語言。註釋可以是下列形式:
(* ...with any characters within... *)
(*
* separated onto multiple lines
*)
,但我需要捕捉任何評論錯誤,如:
(* 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
爲「 - 」) - 它不能在多行上發表評論。
我不知道它是正確捕捉unended註釋錯誤。
我想我已經接近...誰能看到我錯在哪裏?