我只从 flex 和 bison 开始。我写了一个解析器,它应该识别 C 中的变量声明
例如
int a; float b3; char * aaa;。
在输出端,它应该写一个有效的声明和“ok”。它可以编译,但不会在输出中显示“ok”。我不知道我是否很好地使用了令牌。我应该如何改进它?
我的文件.l
alpha [a-zA-Z]
digit [0-9]
%{
#include <stdio.h>
#include "cw22.tab.h"
%}
%%
"int" { printf("int") ; } //return INT ;
"float" { printf("float") ; } //return FLOAT ;
"char" { printf("char") ; } //return CHAR ;
"char *" { printf("char *") ; } //return CHAR_8 ;
";" { printf(";") ; } //return SYM;
{alpha}({alpha}|{digit})* { printf("%s", yytext) ; } //return ID;
%%
int yywrap(void)
{
return 1;
}
我的文件.y
%{
#include <stdio.h>
#include <stdlib.h>
%}
%token ID
%token INT
%token FLOAT
%token CHAR
%token CHAR_8
%token SYM
%%
start : TYPE ID SYM
;
TYPE : INT
| FLOAT
| CHAR
| CHAR_8
;
%%
main(int argc, char **argv)
{
yyparse();
printf("ok");
return 0;
}
yyerror(char *s)
{
fprintf(stderr, "errorL %s\n", s);
}