2009-11-17 2 views
1

Dans mon fichier yacc j'ai des choses comme ce qui suit:Comment retourner les littéraux de flex à yacc?

var_declaration : type_specifier ID ';' 
       | type_specifier ID '[' NUM ']' ';' ; 

type_specifier : INT | VOID ; 

ID, NUM, INT et NUL sont des jetons qui se sont retournés de flex, de sorte yacc n'a aucun problème de les reconnaître. Le problème est que dans ce qui précède, il y a des choses comme '[' et ';'. Quand ceux-ci sont reconnus par flex, que devrait-on retourner à yacc?

Répondre

4

Vous pouvez simplement renvoyer les caractères eux-mêmes. Les jetons sont garantis de ne pas entrer en conflit avec des caractères ASCII:

http://www.gnu.org/software/bison/manual/html_node/Token-Decl.html

Bison sélectionne automatiquement les codes qui ne sont pas en conflit les uns avec les autres ou avec des caractères ASCII.

Donc dans votre fichier flex,

[\[\];]  { return yytext[0]; } 

est OK.

+0

Que trouve [\\ [\\];]? – neuromancer

+0

Il s'agit d'une règle qui correspond à l'un des trois caractères '[', ']' ou ';'. –

+0

Oups, accidentellement cliqué sur la flèche vers le bas. Si vous modifiez votre réponse, cela me permettra de le changer et je clique sur la flèche du haut. J'ai aussi besoin de faire correspondre d'autres choses comme() et {}. Y at-il quelque chose de similaire pour ceux-là? – neuromancer

Questions connexes