Неопределенная ссылка на 'yylex' в функции 'yyparse ()' - PullRequest
0 голосов
/ 03 мая 2019

Каждый раз, когда я пытаюсь решить проблему, я получаю эту ошибку.Я не знаю, что я делаю не так.Вот мой файл yacc и мой файл lexx:

ЗДЕСЬ МОЙ YFILE.Y

%{

#include <iostream>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define YYSTYPE double
#include "y.tab.h"
extern "C" FILE * yyin;
extern "C" int yylex();
extern int yyparse(void *);
using namespace std;
int yyerror(const char* s);
%}



%token DIGIT CHARACTER OP LEFT_PAR RIGHT_PAR SEMICOLON EQUAL NEWLINE OTHER

%union{
        char *s;
}


%%

assignment:
            id EQUAL expression SEMICOLON NEWLINE
                ;
expression:
            id OP id '{OP id}'
                | id OP id '{'LEFT_PAR'}' '{'expression'}' '{'RIGHT_PAR'}' NEWLINE
                | id OP id '{'LEFT_PAR expression'}' '{'RIGHT_PAR'}' NEWLINE
                ;
id:
                CHARACTER
                |id CHARACTER
                |id DIGIT
                ;
%%



int yyerror(const char *s)
{
        cout <<"error" << s << endl;
        return -1;
}

main (){
        FILE *yyin  = fopen("ex.txt","r");
        yyparse();
        fclose(yyin);

        printf("hi");
        return 0;
}

ЗДЕСЬ МОЙ GRAMMARRULES.L

%{
#include "y.tab.h"
#include <stdio.h>
#define YY_DECL extern "C" int yylex()
using namespace std;
#include <iostream>
void ERROR();
%}


digit [0-9]+
char [a-zA-Z]
op [+\-*/%]


%%
{digit} {return (DIGIT);}
{char}  {return (CHARACTER);}
{op}    {return (OP);}
"("     {return (LEFT_PAR);}
")"     {return (RIGHT_PAR);}
"="     {return (EQUAL);}
";"     {return (SEMICOLON);}
"\n"    {return (NEWLINE);}
.   {return (OTHER);}


%%

void ERROR(){
    cout << OTHER <<endl;
}

У меня есть правила грамматикии я получаю сообщение об ошибке неопределенной ссылки на 'yylex' в 'yyparse ()'

1 Ответ

0 голосов
/ 05 мая 2019

Если у вас возникла эта проблема, файлы yacc и lex должны иметь одинаковые имена.Например, snazzle.l и snazzle.y.

...