필자는 여기 앉아서 YACC가 lex 파일과 함께 작동하는 방법에 대한 자습서를 읽으려고했지만 필자는 내 머리를 감쌀 수 있는지 확신하지 못했습니다. 실제 입력 파일을 읽고 추가 또는 뺄셈과 같은 함수가 올바른 형식인지 여부를 확인하는 것이지만 이것이 어떻게 작동하는지 이해합니다. 필자는 Lex 파일의 작동 방식을 이해하고 파일에 들어있는 내용을 기반으로 정의 된 변수를 반환하는 파일을 생성했습니다.Yacc/Lexer : 어떻게 작동하나요?
매우 간단한 프로그램이 있다면이 테스트 프로그래밍 언어의 첫 번째 줄을 어떻게 분석해야합니까? "프로그램"은 "is", "var", "begin", "+", "print", ";", ","end "뿐만 아니라 lex에 정의 된 값이라고 가정합시다.
처음 몇 줄을 읽으려면 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 선언과 함께, 또는 이것이 올바른 경우에도 마찬가지입니다. 나는 또한 첫 번째 라인을 분석하는 방법에 대해 혼란 스럽다.