2
yyerror 함수에서 줄 번호를 인쇄하려고하면 오류가 발생합니다. 나는 OSX에서 일하고있다.Flex Bison : Building C 컴파일러 - 줄 번호 오류 메시지
(compiler.l에서 행 번호)
%{
#include "compiler.tab.h"
int lineNumber = 1;
%}
%%
int { return INT; }
float { return FLOAT; }
void { return VOID; }
do { return DO; }
while { return WHILE; }
if { return IF; }
return { return RETURN; }
else { return ELSE; }
\/\/(.)* { return COMMENT; }
\/\*(.)*\*\/ { return COMMENT; }
[a-zA-Z][a-zA-Z0-9_]* { return IDENT; }
[0-9]+\.[0-9]+ { sscanf(yytext, "%lf", &yylval.reell); return FVAL; }
[0-9]+ { yylval.integer = atoi(yytext); return IVAL; }
\({ return OPA; }
\) { return CPA; }
\{ { return OB; }
\} { return CP; }
\; { return SEMICOLON; }
\, { return COMMA; }
\! { return NOT; }
\-\- { return DECREMENT; }
\+\+ { return INCREMENT; }
\<\< { return LSHIFT; }
\=\= { return EQUALS; }
\<\= { return LTOE; }
\>\= { return GTOE; }
\&\& { return AND; }
\|\| { return OR; }
\= { return ASSIGNMENT; }
\< { return LT; }
\> { return GT; }
\/ { return DIVIDE; }
\* { return MULTIPLY; }
\+ { return PLUS; }
\- { return MINUS; }
[ ]+ { return BLNK; }
[\n]* { ++lineNumber; return NL; }
%%
compiler.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "compiler.h"
extern int lineNumber;
int main (void)
{
yyparse();
return 0;
}
void yyerror(char * str)
{
fprintf(stderr, "Error: %s, Line %d\n", str, lineNumber);
}
나는 다음과 같은 오류 메시지가 얻을 : 아키텍처 x86_64에 대한
정의되지 않은 문자 : "_lineNumber ", 참조 된 에서 : _yyerror in compiler.o ld : ar (을)를 찾을 수 없습니다. chitecture의 x86_64에의 collect2 : LD가 반환 한 종료 이것은 내가 컴파일하는 데 사용하는 명령 (쉘 파일)입니다
상태 :
#!/bin/bash
flex compiler.l
bison -d compiler.y
gcc -g -c compiler.tab.c -o compiler_y.o
gcc -g -Wall -std=c99 -c lex.yy.c
gcc -g -c compiler.tab.c -o compiler_y.o
gcc -g -Wall -std=c99 -c compiler.c
gcc -g -o compiler compiler.o compiler_y.o lex.yy.o -lm -lfl
태그를 지정할 때주의하십시오. Flex는 Apache/Adobe UI 프레임 워크에 사용됩니다. Gnu-flex는 어휘 분석기에 사용됩니다. – JeffryHouser
'.l' 파일에서 그 행을 어디에 넣었습니까? 외부 심볼로 정의하지 않은 것 같습니다. (그렇다면 실행 파일에 컴파일 된 렉서를 포함하지 않습니다.) – rici
@rici 나는 compiler.l의 전체 코드를 넣었다. 희망이 도움이됩니다. 도와 주셔서 감사합니다. – hapablap