0

我只从 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);
}
4

0 回答 0