Я пытался сидеть здесь и читать учебники о том, как YACC работает с файлом lex, однако я не уверен, что смогу обернуть его вокруг.Я понимаю, что это для чтения фактического входного файла и определения, имеют ли функции, такие как сложение или вычитание, в правильном формате, но как это работает?Я понимаю, как работают файлы Lex, и сконструировал такую, которая возвращает определенные переменные на основе того, что встречается в файле.
Если у меня есть очень простая программа, как бы я проанализировал первые строки этого тестового языка программирования?Предположим, что «программа» - это определенное значение в lex, а также «is», «var», «begin», «+», «print», «;», «,» и «end».
Как записать файл yacc для того, чтобы прочитать первые несколько строк?
Тестовый файл:
program xyz is
var a, b, c
begin
a = 2;
b = 3;
c = a + b;
print c
end
Yaccer.y
%token EOFNUM 0
%token SEMINUM 1
%token LPARENNUM 2
%token RPARENNUM 3
%token ICONSTNUM 4
%token BEGINNUM 5
%token PROGRAMNUM 6
%token MINUSNUM 7
%token TIMESNUM 8
%token VARNUM 9
%token COMMANUM 10
%token IDNUM 11
%token ENDNUM 12
%token ISNUM 13
%token PLUSNUM 14
%token DIVNUM 15
%token PRINTNUM 16
%token EQUALNUM 17
%left '+' '-'
%left '*' '/'
%%
%%
#include "lex.yy.c"
#include <stdio.h>
yyerror(str)
char *str;
{ printf("yyerror: %s at line %d\n", str, yyline); }
main () {
if (!yyparse()) { printf("accept\n");}
else { printf("reject\n"); }
}
Я знаю, что для уравнений должно быть определено несколько типов%, однако я не уверен, как использовать типы вместе с объявлениями% left, или даже если это правильно.Я также не понимаю, как анализировать первую строку.