该代码用于学习野牛和 flex,我是新手,但我想学习处理它们。
我正在尝试运行此代码,但我不知道错误在哪里,因为编译器说没问题,但我不知道为什么在我用数字 +573002597643 进行测试时会出现错误。这是一个有效的数字,因为我尝试遵守我的规则。
我的代码:
野牛:
%{
#include <stdio.h>
#include <stdlib.h>
extern int yylex();
extern int yyparse();
extern FILE* yyin;
void yyerror(const char* s);
%}
%union {
int ival;
float fval;
}
%token S_COL
%token<ival> I_AUX I_REGFIJO I_REGCEL I_NUMFIJO
%token T_NEWLINE T_QUIT
%start calculation
%%
calculation: T_NEWLINE
| S_COL I_REGCEL I_AUX I_NUMFIJO{ printf("Number phone: \n"); }
| S_COL I_REGFIJO I_REGFIJO I_NUMFIJO{ printf("Number local phone: \n"); }
| T_QUIT T_NEWLINE { printf("bye!\n"); exit(0); }
;
%%
int main() {
yyin = stdin;
do {
yyparse();
} while(!feof(yyin));
return 0;
}
void yyerror(const char* s) {
fprintf(stderr, "Parse error: %s\n", s);
exit(1);
}
弹性文件
%option noyywrap
%{
#include <stdio.h>
#define YY_DECL int yylex()
#include "tel.tab.h"
%}
%%
[ \t] ; // ignore all whitespace
\n {return T_NEWLINE;}
[1-9] {return I_REGFIJO;}
[0-9] {return I_AUX;}
[3][0-9][0-9] {return I_REGCEL;}
[\+][5][7] {return S_COL;}
[0-9][0-9][0-9][0-9][0-9][0-9] {return I_NUMFIJO;}
"exit" {return T_QUIT;}
"quit" {return T_QUIT;}
%%