Sto utilizzando Flex e Bison per un generatore di parser, ma ho problemi con gli stati di avvio nello scanner.Stati di avvio in Lex/Flex
Sto utilizzando le regole esclusive per affrontare commentare, ma questa grammatica non sembra corrispondere gettoni citati:
%x COMMENT
// { BEGIN(COMMENT); }
<COMMENT>[^\n] ;
<COMMENT>\n { BEGIN(INITIAL); }
"==" { return EQUALEQUAL; }
. ;
In questo semplice esempio la linea:
// a == b
isn' t corrisponde interamente a un commento, a meno che non includa questa regola:
<COMMENT>"==" ;
Come faccio a evitare tutto questo? t dover aggiungere tutti questi token alle mie regole esclusive?
Preferisco non dover utilizzare gli stati inclusivi se può essere evitato in quanto ho un sacco di regole. Il problema è che questa regola "eat comment" non sembra corrispondere a token con più di un carattere (come ==). – Dan
Quindi penso che potresti fare qualcosa di sbagliato. Devi creare un "parser secondario" per i commenti, che non corrisponde ai tuoi normali token. –
Dire, si desidera memorizzare la riga di ogni input, quindi questo ti darà numeri di linea errati? –