Je dois créer un analyseur syntaxique et lexical pour un langage de type c. Dans ce langage nous définissons comme commentaire "tout ce qui existe après le symbole% jusqu'à la fin de la ligne". Les déclarations suivantes sont-elles correctes?Définir un commentaire et une citation dans les erreurs flex et bison et lexicales
Flex
...
[%][^\n]*[\n] { return T_COMMENT; }
[\n] { return T_NEWLINE; }
Bison
...
comment:com text newline;
text: |name text|digit text;
...
com: T_COMMENT { printf("%s",yytext); };
newline: T_NEWLINE { printf("%s",yytext); };
Je dois aussi définir le symbole de citation ». Est-ce correct suivant (flex)?
"\"" { return T_QUOTE; }
Il n'y a pas d'erreur de compilation dans les fichiers d'entrée flex et bison, mais quand j'utilise un programme écrit dans ce langage de type c comme une entrée de test je reçois comme résultat l'erreur lexicale dans la ligne 1. Il n'y a pas d'erreur lexicale dans cette ligne Mon programme doit commencer comme ceci: PROGRAMME name_of_program et une nouvelle ligne compalsory I faire les déclarations suivantes: Flex
"PROGRAM" { return T_PROGRAM; }
Bison
%start programma
%token T_PROGRAM
...
programma:PROGRAM name newline function STARTMAIN dec_var command ENDMAIN eof;
...
PROGRAM: T_PROGRAM { printf("%s",yytext); };
...
(mots en majuscules sont définis comme le programme car ils font partie de la langue) -je écrire quelque chose de mal? Je pense que le problème est avec la définition de Newline mais je ne suis pas sûr.
Merci d'avance pour toute réponse. Désolé pour le long message.