Я пытаюсь выучить lex и yacc.
Я пытаюсь понять, как выполнять правила грамматики.Мой файл уже был определен как:
fd 3x00
bk 100
setc 100
int xy3 fd 10 rt 90
rt
Мой вывод с printf и печать в файл прошел примерно так:
Keyword: fd
Illegal: 3x00
Keyword: bk
Keyword: setc
Number: 100
Keyword: int
Id: xy3
Keyword: fd
Number: 10
Keyword: rt
Number: 90
Вот мой файл lex - я только собираюсьчтобы показать его часть, чтобы сохранить этот пост как можно меньше
fd {return FD; }
[0-9]+[a-z]+[0-9]+ {} // this is the illegal entry 3x00
[\r\t\n]+ {}
bk {return BK;}
setc {return SETC;}
[-+]?[0-9]+ {yyval.ival = atoi(yytext); return NUMBER;}
int {fprintf(yyout, "%s\n", yytext);}
xy3 {fprintf(yyout, "%s\n", yytext);}
fd[0-9]+ {fprintf(yyout, "%s\n", yytext);}
%%
Вот мой файл yacc.Это не завершено, так как я не знаю, как это закончить.
%{
#include <ctype.h>
#include <stdio.h>
%}
%token NUMBER
%token ID
%token FD
%token BK
%token SETC
%token KEYWORD
%%
%%
main()
{
yyparse()
}
Я не уверен, как бы я написал правила грамматики для них.Могу ли я сделать свое собственное имя для выражения?
Может ли кто-нибудь помочь мне с одним примером, чтобы я мог видеть, как его закончить?