Zaczynam przygodę z yacc'em i lex'em. Mam kompletne źródło kompilatora jakiegoś basica, w którym "pionowy" apostrof (który w C jest używany do '0') jest zarezerwowany na komentaż.
Postanowiłem dodać '0' z C w postaci 0
, ale niestety nie daję rady: ani , "
", ` nie są wyłapywane, tylko lecą od handlera "każdy inny znak":
// plik.l, kompilowany alex.exe'em z http://www.bumblebeesoftware.com/
// tu cała masa tokenów
` { fprintf(stdout, "jest"); }
\` { fprintf(stdout, "jest"); }
"`" { fprintf(stdout, "jest"); }
\x60 { fprintf(stdout, "jest"); }
`[^`]` { fprintf(stdout, "jest"); }
. { sprintf(buf,"invalid character '0x%02x'\n", (unsigned int)yytext[0]);
yy_warning(buf);}
Kod basica dla tego: int i =
1``Lexer nie sygnalizuje "jest", a kompilator czepia się pierwszego apostrofu pisząc domyślny błąd "invalid character".