J'essaie d'identifier un jeton entier en utilisant flex et yacc. C'est ma syntaxe de fichier flex pour les entiers.Jeton entier utilisant flex et yacc
%{
#include "main.h"
#include "y.tab.h"
#include <stdlib.h>
#include <string.h>
#define YYSTYPE char *
void yyerror(char *);
%}
code "code"
special ":"
turn "turn"
send "send"
on "on"
pin "pin"
for "for"
num "[0-9]+"
%%
{code} {return CODE;}
{special} {return SPECIAL; }
{turn} {return OPRTURN;}
{send} {return OPRSEND;}
{on} {return OPRON;}
{pin} {return PORT;}
{for} {return FOR;}
{num} { yylval.iValue = atoi(yytext); return INTEGER;}
%%
int yywrap(void) {
return 1;
}
dans le fichier yacc ..
%{
#include "main.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
// char *name[10];
void startCompiler();
/* prototypes */
nodeType *enm(char* c);
nodeType *opr(int oper,int nops,...);
nodeType *id(int i);
nodeType *con(int value);
nodeType *cmd(char *c);
void freeNode(nodeType *p);
int ex(nodeType *p);
int yylex(void);
void yyerror(char *s);
//int sym[26]; /* symbol table */
%}
%union {
int iValue; /* integer value */
char sIndex; /* symbol table index */
char *str; /* symbol table index */
nodeType *nPtr; /* node pointer */
};
%token <iValue> INTEGER
%token CODE SPECIAL OPRTURN OPRSEND OPRON PORT FOR
%type <nPtr> stmt stmt_list oper operation duration pin location
%%
input : function { exit(0);}
;
input : function { exit(0);}
;
function : function stmt { ex($2); freeNode($2);}
|
;
stmt :
| PORT location { printf("Port taken"); }
;
location : INTEGER { printf("Number is %d",$1); }
;
mais quand j'exécute le programme, il ne reconnaît pas le numéro,
entrée est
broche 4
Sortie
sortie doit être
Numéro de port est pris 4
Qu'est-ce que je manque ici? Tous les autres jetons fonctionnent correctement.
Merci d'avance.
Veuillez publier suffisamment de code pour exécuter le code et reproduire le problème. Également être plus clair sur ce que l'entrée, la production réelle et la production attendue. Est-ce que l'entrée "pin 4" et la sortie "4"? Et le résultat attendu serait "Nombre pris" et rien d'autre? – sepp2k
@ sepp2k J'ai ajouté les codes complets. effectivement ce que je dois identifier est mon code obtient «pin 4» et identifier la broche et le numéro. Ensuite, je peux utiliser ce numéro pour un traitement ultérieur dans mon code C. – Sachith
Je ne suis toujours pas clair sur ce que votre entrée, la sortie réelle et la sortie attendue sont. Je ne vois pas comment la sortie peut être "4", il n'y a rien dans votre code qui imprime juste un nombre sans texte supplémentaire. – sepp2k