2017-04-10 7 views
1
내가 플렉스 및 들소에 새로운 오전

, 내 Mac에서, 나는이 사용하여 내 Mac에서 플렉스 및 들소 설치 _yylex dyld : 기호를 찾을 수 없습니다 : 게으른 상징이 실패 바인딩이 내 <code>test1ll.l</code> 파일 <pre><code>brew install flex && brew link flex --force brew install bison && brew link bison --force </code></pre> <p>입니다</p> :

flex -otest1ll.c test1ll.l 
g++ test1ll.c -otest1 -lfl 
./test1 

내가 이러한 오류를 가지고 :

%{ 
    #include <iostream> 
    using namespace std; 
%} 
%% 
[0-9]+  { cout << "Number "; } 
[a-zA-Z]+  { cout << "Word "; } 
[ \t]   ; 
%% 

후 나는 다음과 같은 명령을 실행

dyld: lazy symbol binding failed: Symbol not found: _yylex 
    Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib 
    Expected in: flat namespace 

dyld: Symbol not found: _yylex 
    Referenced from: /usr/local/opt/flex/lib/libfl.2.dylib 
    Expected in: flat namespace 

Abort trap: 6 

누군가가 설명하고 해결할 수 있습니까? 고맙습니다.

답변

1

C++을 사용하려는 경우 C 링크를 사용하는 libfl을 사용하는 대신 플렉스 스캐너를 자체 포함하는 것이 더 쉽습니다.

두 번째 %% 후, 첫 번째 %% 전에 %option noyywrap 추가 (단, 아래 참조) yywrap가 필요하지 않도록하고 마지막에 간단한 main를 추가 : 개인적으로


int main() { 
    while (yylex()) {} 
    return 0; 
} 
내가 선호 :

%option noinput nounput noyywrap nodefault 

처음 두 옵션을 사용하면 -Wall으로 컴파일 할 수 있습니다. input() 또는 unput()이며 스캐너가 일부 입력을 인식하지 못하면 flex가 불만을 표시합니다. 이 경우 스캐너가 영숫자가 아닌 문자를 처리하지 못하고 표준 출력으로 표시됩니다. (하지만 아마도 그 의도는 의도적 인 것입니다.)