| HOME / 정보공유 / AIX 명령어 모음

yacc
yacc yacc 명령 목적 문맥의 구속을 받지 않는 문법 스펙으로 이루어진 입력으로부터 LALR(1) 해석 프로그램을 작성합니다. 구문
yacc [ -b Prefix ] [ -C ] [ -d ] [ -l ] [ -NnNumber ] [ -NmNumber ] [ -NrNumber ] [ -p Prefix ] [ -s ] [ -t ] [ -v ] [ -y Path ] Grammar
설명
yacc 명령은 문맥의 구속을 받지 않는 문법 스펙을 LALR(1) 해석 알고리즘을 실행하는 간단한 자동 기계에 필요한 표의 집합으로 변환합니다. 문법은 모호할 수 있습니다. 즉 지정된 선행 규칙은 모호성을 해결하는 데 사용됩니다.
C 언어 컴파일러로 출력 파일 y.tab.c를 컴파일하여 yyparse 기능을 생성해야 합니다. 이 기능은 yylex 어휘 분석기와, main 서브루틴 및 yyerror 오류 처리 서브루틴(사용자가 이 서브루틴들을 제공해야 함)과 함께 로드되어야 합니다. lex 명령은 yyparse 서브루틴에서 사용할 수 있는 어휘 분석기를 작성하는데 유용합니다. main 및 yyerror 서브루틴의 단순 버전은 yacc 라이브러리 liby.a를 통해 사용할 수 있습니다. 또한, yacc는 C++ 출력을 작성하는 데 사용될 수 있습니다.
yacc 생성 C 파일(y.tab.c)을 -DYACC_MSG 옵션으로 컴파일하여 Message Facility 사용에 필요한 코드를 포함시킬 수 있습니다. 컴파일에서 이 옵션을 사용할 경우, yyparse 서브루틴 및 YYBACKUP 매크로에서 생성되는 오류 메세지는 yacc_user.cat 카탈로그에서 발췌됩니다.
비 영어권 지역의 사용자가 영어 이외의 언어로 오류 메세지를 수신할 수 있게 합니다. 카탈로그를 찾거나 열 수 없으면, yyparse 및 YYBACKUP 서브루틴은 디폴트 영어 메세지를 표시합니다.
yacc 명령은 LANG, LC_ALL, LC_CTYPE 및 LC_MESSAGES 환경 변수의 영향을 받습니다.
플래그
-b Prefix 모든 출력 파일 이름의 접두어로 y 대신 Prefix를 사용하십시오. 코드 파일 y.tab.c, 헤더 파일 y.tab.h(-d가 지정될 때 작성됨) 및 설명 파일 y.output(-v를 지정할 때 작성됨)은 Prefix.tab.c, Prefix.tab.h 및 Prefix.output으로 각각 변경됩니다.
-C C++ 컴파일러에서 사용하기 위해 y.tab.c 파일 대신 y.tab.C 파일을 생성합니다. 입출력에 대해 I/O 스트림 라이브러리를 사용하려면, 매크로 _CPP_IOSTREAMS를 정의하십시오.
-d 파일 y.tab.h를 생성합니다. 이 파일에는 yacc 지정 토큰 코드를 사용자의 토큰 이름과 연관시키는 #define문이 있습니다. 이 플래그를 사용하면 y.tab.c가 아니라 소스 파일이 이 헤더 파일을 포함함으로써 토큰 코드에 액세스할 수 있도록 허용합니다.
-l #line 구성을 y.tab.c에 포함시키지 마십시오. 문법과 이에 연관되는 조치가 완전히 디버깅된 후에만 이를 사용하십시오.
-NnNumber 토큰 및 터미널 이외 이름 배열의 크기를 Number로 변경합니다. 디폴트 값은 8000입니다. 유효한 값은 8000 이상이어야 합니다.
-NmNumber 메모리 상태 배열의 크기를 Number로 변경합니다. 디폴트 값은 40000입니다. 유효한 값은 40000 이상이어야 합니다.
-NrNumber 대형 문법을 처리할 내부 버퍼 크기를 변경합니다. 디폴트 값은 2000입니다. 유효한 값은 2000 이상이어야 합니다.
-p Prefix yacc 명령에서 작성된 모든 외부 이름에 대한 접두어로 yy 대신 Prefix를 사용하십시오. 영향을 받는 외부 이름으로는 yychar, yylval, yydebug, yyparse( ), yylex( ) 및 yyerror( )이 있습니다(이전에, -p는 대체 해석기를 지정하기 위해 사용되었지만, 지금은 -yPath를 사용하여 대체 해석기를 지정할 수 있습니다).
-s yyparse 기능을 몇 개의 작은 기능으로 나눕니다. 기능 크기는 문법 크기에 다소 비례하므로, yyparse 기능이 컴파일, 최적화 또는 효과적인 실행을 하기에는 너무 클 수 있습니다.
-t 수행시간 디버깅 모드를 컴파일합니다. 기본적으로 y.tab.c가 컴파일될 때 이 코드는 포함되지 않습니다. 그러나, 수행시간 디버깅 코드는 프리프로세서 매크로 YYDEBUG의 제어 하에 있습니다. YYDEBUG가 제로가 아닌 값을 가질 경우, C 컴파일러(cc)는 -t 플래그 사용 여부에 관계없이 디버깅 코드를 포함합니다. YYDEBUG는 컴파일러에 디버깅 코드를 포함시키지 않으려는 경우, 0의 값을 가져야 합니다. 이 코드를 컴파일하지 않으면 yyparse 서브루틴의 조작 속도는 더 빠를 것입니다.
-t 플래그는 디버깅 코드의 컴파일을 야기하지만 실제로 디버그 모드를 온 상태로 켜지는 않습니다. 디버그 출력을 가져 오려면, C 언어 선언인 int yydebug=1을 yacc 문법 파일의 선언 섹션에 추가하거나 dbx를 통해 yydebug를 설정하여 yydebug 변수를 설정해야 합니다.
-v 파일 y.output을 준비합니다. 문법의 모호성으로 인해 발생한 상충에 대한 보고서 및 해석 테이블에 대한 읽기 가능한 설명이 포함되어 있습니다.
-y Path 디폴트 /usr/lib/yaccpar 파일 대신 Path에 의해 지정된 해석기 프로토타입을 사용합니다(이전에, -p는 대체 해석기를 지정하기 위해 사용되었습니다).
종료 상태
이 명령은 다음과 같은 종료 값으로 복귀됩니다.
0 성공적으로 완료했습니다.
>0 오류가 발생하였습니다.
예제
다음 명령은
yacc grammar.y
grammar.y 파일로부터 yacc 규칙을 얻어서 출력을 y.tab.c에 놓습니다.
다음 명령은
yacc -d grammar.y
예 1과 같이 기능하지만, y.tab.h 파일도 생성합니다. 이 파일에는 grammar.y 파일에 정의된 각 토큰에 대한 C 스타일의 #define문이 있습니다.
파일
y.output 문법 모호성으로 인해 발생한 상충에 대한 보고서 및 해석 테이블에 대한 설명이 포함되어 있습니다.
y.tab.c 출력 파일을 포함하고 있습니다.
y.tab.h 토큰 이름에 대한 정의를 포함하고 있습니다.
yacc.tmp 임시 파일
yacc.debug 임시 파일
yacc.acts 임시 파일
/usr/ccs/lib/yaccpar C 프로그램을 위한 해석기 원형을 포함하고 있습니다.
/usr/ccs/lib/liby.a 실행 시간 라이브러리를 포함하고 있습니다.
관련 정보
lex 명령.