파일을 구문 분석하는 데 PLY를 사용하고 있습니다. 줄에 오류가있을 때 사용자에게 메시지를 인쇄해야합니다. 메시지는 Error at the line 4과 같습니다. def p_error(p):
flag_for_error = 1
print ("Erreur de syntaxe sur la ligne %d" % (p.lineno))
이것이 작동하지 않는 이유를 알지 못합니다. 나는 $$로 usind int 값을 시도했지만 완벽하게 작동했다. 그러나 다른 방법이 없다면 char와 함께 사용하기를 바란다. 이 내 .L 파일입니다 %{
#include "y.tab.h"
%}
%option noyywrap
%option yylineno
%%
DEFINE return DEFINETA
이전에 결코 만난 적이없는 문제가 있습니다. 프로그램을 중단시키는 코드가 어떤 것인지 알고 있습니다. 해결 방법을 모르겠습니다. 두 개의 함수에서 특정 "키"를 검색하는 두 개의 연결된 목록이 있습니다. 이제는 함수가 Ifs에서 제대로 작동하지만 루프가 아니기 때문에 의도 한대로 작동하지 않을 수 있습니다. 링크 된 목록을 한 번만 통과하며 보낸 정보는 올
다음 문법을 작성했으며 Bison이 줄이기/줄이기 충돌에 대해 경고합니다. parser.y: warning: 1 reduce/reduce conflict [-Wconflicts-rr]
어떻게 문법의 어느 부분에서 충돌이 발생하는지 감지 할 수 있습니까? 내가 충돌을 볼 수있는 Bison에 의해 생성 된 로그가 있습니까? 또한 어떻게 해결할 수 있을까요?
lex & yacc을 사용하는 컴파일러로 작업 중입니다. 컴파일 오류가 발생하고 한 항목을 해결할 수 있다면 나머지는 제자리에 떨어질 것이라고 믿습니다. 나는 같은 프로젝트를 컴파일 :이 In file included from scanner.lex:11:
y.tab.h:6: error: syntax error before "tree"
y.tab.h:6:
파서를 생성하고 생성하는 데 사용하는 두 개의 파일이 있습니다. 파일 1 : drive.l %{
#include<stdio.h>
#include<string.h>
#include"y.tab.h"
/*
#define START 1
#define STOP 2
#define FWD 3
#define BACK 4
#define UP 5
#d
내 parser.y 파일에 충돌이 없었습니다. 그러나 구문 트리를 구성하는 동작을 도입하면 12 개의 새로운 시프트/감소 충돌이 발생했습니다. 너희들이 이것에 대해 어떤 생각을 갖고 있니? 아래로 내 parser.y 및 컴파일 로그가 있습니다. Parser.y : %{
#include <stdio.h>
#include "main.h"
#include
jflex 및 byaccj를 사용하여 AST를 작성하고 있습니다. 나는 오류를 해결할 수없는, 그리고 난 형 변환을 사용했지만 오류가 문법에 다음과 같은 규칙에 대해 을 계속 : program : CLASS Program '{' field_decl '}' {
program1 $$ = new program1($1.sval, $2.sval, $
일부 추가 문자 가져옵니다 L [a-zA-Z_]
A [a-zA-Z_0-9]
%%
{L}{A}* { yylval.id = yytext; return IDENTIFIER; }
을 그리고 난 내 YACC 파일에서 다음을 수행하십시오 primary_expression
: IDENTIFIER { puts("IDENTIF
yacc 파일을 "컴파일"하려고 할 때 위의 오류를 찾지 못하는 것 같습니다. 나는 누군가가 선을 지적하고 내가 문제를 해결하기 위해해야 할 일을 알려주기를 바라고있다. 내 파일을 나열했습니다 : %token Identifier Int Real_Num And Array
%token Begin Boolean Div Do Else
%token End F