영어프랑스어스페인어

Ad


온웍스 파비콘

yaccposix - 클라우드의 온라인

Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터를 통해 OnWorks 무료 호스팅 제공업체에서 yaccposix 실행

이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 공급자에서 실행할 수 있는 명령 yaccposix입니다.

프로그램:

이름


yacc — 또 다른 컴파일러 컴파일러(개발)

개요


야크 [-dltv] [-b 파일 접두사] [-p Sym_prefix] 문법

기술


XNUMXD덴탈의 야크 유틸리티는 문맥 자유 문법에 대한 설명을 읽어야 합니다. 문법 그리고 C를 쓰세요
ISO C 표준을 준수하는 소스 코드, 코드 파일 및 선택적으로 헤더
정보를 현재 디렉토리의 헤더 파일에 저장합니다. 생성된 소스 코드는
다음을 제외하고 정의되지 않았거나 지정되지 않았거나 구현에 정의된 동작에 의존하지 않습니다.
제공된 문법에서 직접 복사한 경우 또는 다음과 같은 경우
구현에 의해 문서화됩니다. C 코드는 기능 및 관련 루틴을 정의해야 합니다.
및 요구 사항을 충족하는 구문 분석 알고리즘을 실행하는 자동 장치용 매크로
알고리즘.

문법의 형식과 의미는 확장 설명 섹션에 설명되어 있습니다.

C 소스코드와 헤더파일은 C의 입력에 적합한 형태로 생성되어야 한다.
컴파일러(참조 c99).

옵션


XNUMXD덴탈의 야크 유틸리티는 POSIX.1-2008의 기본 정의 볼륨을 준수해야 합니다. 섹션
12.2, 유틸리티 통사론 가이드 라인, 지침 9를 제외하고.

다음 옵션이 지원됩니다.

-b 파일 접두사
파일 접두사 대신 y 모든 출력 파일 이름의 접두사로. 코드
파일 y.tab.c, 헤더 파일 y.tab.h (때 생성 -d 지정됨),
설명 파일 y.출력 (때 생성 -v 가 지정됨)로 변경됩니다.
파일 접두사.tab.c, 파일 접두사.tab.h파일 접두사.산출각각.

-d 헤더 파일을 작성하십시오. 기본적으로 코드 파일만 작성됩니다. NS #밝히다
명령문은 다음에 의해 할당된 토큰 코드를 연결합니다. 야크 사용자가 선언한
토큰 이름. 이것은 다음 이외의 소스 파일을 허용합니다. y.tab.c 토큰에 액세스하려면
코드.

-l 포함하지 않는 코드 파일 생성 #선 구성. 이 옵션의 경우
존재하지 않으면 코드 파일 또는 헤더 파일에 다음이 포함되어 있는지 여부가 지정되지 않습니다.
#선 지시. 이것은 문법과 연관된
작업이 완전히 디버깅됩니다.

-p Sym_prefix
Sym_prefix 대신 yy 에 의해 생성된 모든 외부 이름의 접두사로
야크. 영향을 받는 이름에는 다음 기능이 포함됩니다. yyparse(), 일렉스(), 그리고
yy오류() 및 변수 일발, 이차이디버그. (나머지에서
이 섹션에서 인용된 XNUMX개의 기호는 기본 이름을 사용하여 참조됩니다.
단지 표기상의 편의를 위한 것입니다.) 지역 이름은 다음의 영향을 받을 수도 있습니다. -p
옵션; 그러나, 그 -p 옵션은 영향을 미치지 않습니다 #밝히다 에 의해 생성된 기호
야크.

-t 디버깅 컴파일을 허용하도록 조건부 컴파일 지시문 수정
코드 파일의 코드. 런타임 디버깅 문은 항상 다음 위치에 포함되어야 합니다.
코드 파일이지만 기본적으로 조건부 컴파일 지시문은
편집.

-v 파서에 대한 설명과 충돌 보고서를 포함하는 파일 작성
문법의 모호성에 의해 생성됩니다.

피연산자


다음 피연산자가 필요합니다.

문법 명령어가 포함된 파일의 경로 이름(이하 문법에 대한
파서가 생성될 것입니다. 문법 형식은 다음 항목에 설명되어 있습니다.
확장 설명 섹션.

STDIN


사용하지 않습니다.

입력 파일


파일 문법 확장 설명에 지정된 형식의 텍스트 파일이어야 합니다.
안내

환경 변수


다음 환경 변수는 실행에 영향을 미칩니다. 야크:

설정되지 않은 국제화 변수에 대한 기본값을 제공하거나
없는. (POSIX.1-2008의 기본 정의 볼륨을 참조하십시오. 섹션 8.2,
국제화 변수 국제화를 위해
로케일 범주의 값을 결정하는 데 사용되는 변수)

LC_ALL 비어 있지 않은 문자열 값으로 설정된 경우 다른 모든 값을 재정의합니다.
국제화 변수.

LC_CTYPE 텍스트 데이터의 바이트 시퀀스 해석을 위한 로케일 결정
문자로(예: 다중 바이트 문자가 아닌 단일 바이트
인수 및 입력 파일).

LC_메시지
의 형식과 내용에 영향을 주는 데 사용해야 하는 로케일을 결정합니다.
표준 오류에 기록된 진단 메시지.

NLS경로 처리를 위한 메시지 카탈로그의 위치를 ​​결정합니다. LC_메시지.

XNUMXD덴탈의 LC_* 변수는 실행에 영향을 미칩니다. 야크 명시된 유틸리티. NS 본관()
정의 된 함수 야크 도서관 다음을 호출합니다:

setlocale(LC_ALL, "")

따라서 생성된 프로그램은 야크 또한 이러한 내용의 영향을 받습니다.
런타임에 변수.

비동기 이벤트


기본.

표준 출력


사용하지 않습니다.

STDERR


시프트/감소 또는 감소/감소 충돌이 감지되는 경우 문법, 야크 쓸 것이다
이러한 충돌을 지정되지 않은 형식의 표준 오류로 보고합니다.

표준 오류는 진단 메시지에도 사용됩니다.

출력 파일


코드 파일, 헤더 파일 및 설명 파일은 텍스트 파일이어야 합니다. 모두는
다음 섹션에서 설명합니다.

암호 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
이 파일에는 C 소스 코드가 포함되어야 합니다. yyparse() 기능. 그것은 포함한다
다음과 같이 매크로 대체가 수행되는 다양한 의미론적 작업에 대한 코드
확장 설명 섹션에 설명되어 있습니다. 또한 다음의 사본을 포함해야 합니다. #밝히다
헤더 파일의 명령문. 만약 %노동 조합 선언이 사용되면 선언
YYSTYPE도 이 파일에 포함됩니다.

헤더 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
헤더 파일에는 다음이 포함되어야 합니다. #밝히다 토큰 번호를 연결하는 명령문
토큰 이름. 이렇게 하면 코드 파일이 아닌 소스 파일이 토큰 코드에 액세스할 수 있습니다.
경우 %노동 조합 선언이 사용되는 경우 YYSTYPE에 대한 선언 및 외부 YYSTYPE 일발
선언도 이 ​​파일에 포함되어야 합니다.

상품 설명 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
설명 파일은 상태 머신에 대한 설명을 포함하는 텍스트 파일이어야 합니다.
지정되지 않은 형식을 사용하여 파서에 해당합니다. 내부 테이블에 대한 제한(참조
제한) 또한 구현에 정의된 방식으로 보고되어야 합니다. (일부 구현
동적 할당 기술을 사용할 수 있으며 보고할 특정 제한 값이 없습니다.)

확장 기술


XNUMXD덴탈의 야크 명령은 대상 언어의 문법을 정의하는 데 사용되는 언어를 허용합니다.
에 의해 생성된 테이블 및 코드로 구문 분석 야크. 허용되는 언어 야크
대상 언어의 문법은 다음을 사용하여 아래에 설명되어 있습니다. 야크 입력 언어 자체.

입력 문법 대상 언어의 입력 구조를 설명하는 규칙 및
연결된 의미 체계를 제공하기 위해 이러한 규칙이 인식될 때 호출되는 코드
동작. 실행될 코드는 C-로 의도된 텍스트 본문으로 나타나야 합니다.
언어 코드. 이러한 텍스트 본문에는 C 언어 삼중 문자가 포함되지 않습니다. C 언어
내포물은 다음에 의해 처리될 때 올바른 기능을 형성하는 것으로 추정됩니다. 야크 출력으로
파일. 이 방법에 포함된 코드는 인식하는 동안 실행됩니다.
대상 언어.

문법이 주어지면, 야크 유틸리티는 OUTPUT FILES에 설명된 파일을 생성합니다.
부분. 코드 파일은 다음을 사용하여 컴파일 및 링크될 수 있습니다. c99. 선언과
문법 파일의 프로그램 섹션에 정의가 포함되지 않았습니다. 본관(), 일렉스(), 그리고
yy오류(), 컴파일된 출력은 외부에서 제공되는 버전과의 연결이 필요합니다.
기능. 기본 버전 본관() 및 yy오류()는 다음과 같이 제공됩니다. 야크 도서관과
를 사용하여 연결할 수 있습니다. -l y 피연산자 c99. 그만큼 야크 라이브러리 인터페이스는 필요하지 않습니다.
기본값 이외의 인터페이스 지원 yy 기호 접두사. 응용 프로그램 제공
어휘 분석기 기능, 일렉스(); NS 법률 유틸리티는 특별히 설계되었습니다.
그러한 루틴을 생성합니다.

입력 지원하는 언어
응용 프로그램은 모든 사양 파일이
주문: 선언, 문법 규칙프로그램, 이중으로 구분
문자("%%"). 선언 및 프로그램 섹션은 비어 있을 수 있습니다. 후자의 경우
비어 있음, 선행 "%%" 규칙 섹션과 구분하는 표시는 생략할 수 있습니다.

입력은 아래에 정의된 문법 구조를 따르는 자유 형식 텍스트입니다.

어휘 Structure of 전에, 문법
NS , , 그리고 다음을 제외하고 문자는 무시됩니다.
응용 프로그램은 이름이나 다중 문자 예약에 나타나지 않도록 해야 합니다.
기호. 의견은 다음과 같이 동봉됩니다. "/* ... */", 이름이 있는 모든 위치에 나타날 수 있습니다.
유효한.

이름은 임의의 길이로 문자, 마침표('.'), 밑줄('_'), 그리고
초기 숫자가 아닌 숫자. 대문자와 소문자는 구별됩니다. 적합 애플리케이션
로 시작하는 이름을 사용하지 않습니다. yy or YY 이후 야크 파서는 그러한 이름을 사용합니다. 많은
이름은 의 최종 출력에 나타납니다. 야크, 따라서 그들은 준수하도록 선택되어야 합니다.
C 컴파일러에 의해 생성된 추가 규칙이 사용됩니다. 특히 그들이 나타난다
in #밝히다 진술.

리터럴은 작은따옴표로 묶인 단일 문자로 구성됩니다. 모든
ISO C 표준에 의해 문자 상수에 대해 지원되는 이스케이프 시퀀스는 다음과 같아야 합니다.
~에 의해 지원되는 야크.

어휘 분석기와의 관계는 아래에서 자세히 설명합니다.

응용 프로그램은 NUL 문자가 문법 규칙 또는
리터럴.

선언 섹션
선언 섹션은 대상 언어를 정의하는 데 사용되는 기호를 정의하는 데 사용됩니다.
그리고 서로의 관계. 특히, 추가 정보의 대부분은
대상 언어에 대한 문맥 자유 문법의 모호성을 해결하는 데 필요한
여기에 제공됩니다.

보통 야크 생성하는 기호 이름과 해당 이름 사이의 관계를 지정합니다.
기본 숫자 값. 선언 섹션을 사용하면 다음을 제어할 수 있습니다.
이러한 값의 할당.

현재 토큰과 관련된 의미 정보를 유지하는 것도 가능합니다.
사용자 정의 C 언어의 구문 분석 스택 노동 조합, 조합원인 경우
문법의 다양한 이름과 관련이 있습니다. 선언 섹션은 다음을 제공합니다.
이것도.

아래의 첫 번째 선언자 그룹은 모두 이름 목록을 인수로 사용합니다. 그 목록은
선택적으로 C 공용체 구성원의 이름이 앞에 옵니다. 태그 이하) 등장
이내 '<''>'. (나머지 문서의 표기 규칙에 대한 예외로
이 경우 POSIX.1-2008의 볼륨태그> 메타변수를 나타내지는 않지만
기호를 둘러싼 리터럴 꺾쇠 괄호 문자) 태그 다음을 지정합니다.
이 줄에 명명된 토큰은 다음에 의해 참조되는 공용체 구성원과 동일한 C 유형이어야 합니다.
태그. 이에 대해서는 아래에서 더 자세히 설명합니다.

토큰을 정의하는 데 사용되는 목록의 경우 주어진 토큰의 첫 번째 출현 뒤에 올 수 있습니다.
양의 정수(XNUMX진수 문자열로). 이 작업이 완료되면 기본 값
사전적 목적을 위해 할당된 번호는 해당 번호로 간주됩니다.

다음 선언 name 토큰이 되려면:

%토큰 [<태그>] name [번호] [name [번호]]...

If 태그 이 있는 경우 이 줄의 모든 토큰에 대한 C 유형은 다음 유형으로 선언되어야 합니다.
참조 태그. 양의 정수인 경우, 번호, 다음을 따릅니다. name, 그 값은
토큰에 할당됩니다.

다음 선언 name 토큰이 되고 우선 순위를 지정합니다.

%왼쪽 [<태그>] name [번호] [name [번호]]...
%오른쪽 [<태그>] name [번호] [name [번호]]...

각각 이러한 기호 중 하나로 시작하는 하나 이상의 행이 이 섹션에 나타날 수 있습니다.
같은 줄에 있는 모든 토큰은 우선 순위 수준과 연관성이 동일합니다. 선
우선 순위 또는 바인딩 강도가 높은 순서입니다. %왼쪽 를 나타냅니다
해당 행의 연산자는 연관되어 있으며, %오른쪽 마찬가지로 권리를 나타냅니다
연관 연산자. 만약에 태그 존재하는 경우에 대한 C 유형을 선언해야 합니다. name설명된 대로
for %토큰.

다음 선언 name 토큰이 되며 사용할 수 없음을 나타냅니다.
연관적으로:

%비연결 [<태그>] name [번호] [name [번호]]...

파서는 이 토큰의 연관 사용을 발견하면 오류를 보고합니다. 만약에 태그 is
현재, 그것은 C 유형을 선언해야합니다 names에 대해 설명된 대로 %토큰.

다음은 조합원을 선언합니다. names는 터미널이 아니므로 필수입니다.
~을 가지려면 태그 필드 시작 부분:

%유형 <태그> name...

비단말기만 다루기 때문에 토큰 번호를 할당하거나 리터럴을 사용하는 것은
또한 금지. 이 구성이 있는 경우 야크 유형 검사를 수행해야 합니다. 이 경우
구문이 존재하지 않으면 구문 분석 스택은 INT 유형.

에 사용된 모든 이름 문법 에 의해 정의되지 않음 %토큰, %왼쪽, %오른쪽%비연결
선언은 비터미널 기호를 나타내는 것으로 가정합니다. NS 야크 유틸리티는보고해야합니다
적어도 하나의 왼쪽에 나타나지 않는 비단말 기호에 대한 오류
문법 규칙.

이름의 유형, 우선 순위 또는 토큰 번호가 지정되면
변경되었습니다. 토큰의 첫 번째 선언이 토큰 번호를 할당하지 않는 경우, 야크 하여야 한다
토큰 번호를 할당합니다. 이 할당이 이루어지면 토큰 번호는 변경되지 않습니다.
명시적 할당에 의해.

다음 선언자는 이전 패턴을 따르지 않습니다.

다음은 비 터미널을 선언합니다. name 너는 스타트 상징을 나타내는
문법 규칙에 의해 설명되는 가장 크고 가장 일반적인 구조:

%시작 name

기본적으로 첫 번째 문법 규칙의 왼쪽입니다. 이 기본값은
이 선언으로 재정의됩니다.

다음을 선언합니다. 야크 다양한 유형의 값을 합친 값 스택
원하는.

%노동 조합 { of 노동 조합 (in C)}

Union의 본문은 불균형 중괄호 전처리 토큰을 포함하지 않아야 합니다.

기본적으로 작업(아래 참조)과 어휘 분석기가 반환하는 값은 다음과 같습니다.
유형의 INT. 그만큼 야크 유틸리티는 유형을 추적하고 해당하는
결과 구문 분석기의 엄격한 유형 검사를 수행하기 위해 멤버 이름을 통합합니다.

또는 적어도 하나의태그> 구문이 사용되면 공용체를 선언할 수 있습니다.
헤더 파일에서(이는 다음을 사용하여 선언 섹션에 포함되어야 합니다. #포함
안에 구성하다 %{%}) 및 형식 정의 나타내는 YYSTYPE 기호를 정의하는 데 사용됩니다.
이 노조. 의 효과 %노동 조합 YYSTYPE 선언을 직접 제공하는 것입니다.
전에, 야크 입력.

C 언어 선언 및 정의는 선언 섹션에 나타날 수 있습니다.
다음 표시로:

%{ ... %}

이러한 명령문은 코드 파일에 복사되어야 하며 그 안에 전역 범위가 있으므로
규칙 및 프로그램 섹션에서 사용할 수 있습니다. 다음을 포함하지 않아야 합니다.
"%}" 주석, 문자열 리터럴 또는 다중 문자 상수 외부.

애플리케이션은 선언 섹션이 토큰에 의해 종료되었는지 확인해야 합니다. %%.

문법 규칙 in 야크
규칙 섹션은 함수에서 허용할 컨텍스트 없는 문법을 정의합니다. 야크
이러한 규칙을 생성하고 연결합니다. C 언어 작업 및 추가 우선 순위
정보. 문법은 아래에 설명되어 있으며 형식적 정의는 다음과 같습니다.

규칙 섹션은 하나 이상의 문법 규칙으로 구성됩니다. 문법 규칙의 형식은 다음과 같습니다.

A : BODY ;

상징물 A 터미널이 아닌 이름을 나타내며, BODY XNUMX의 시퀀스를 나타내거나
배우기 names, 문자s 님과 시맨틱 동작s 다음에 선택 사항이 올 수 있습니다.
상위 지배NS. 이름과 리터럴만 구성에 참여합니다.
문법; 시맨틱 동작과 우선 순위 규칙은 다른 방식으로 사용됩니다. NS 그리고
NS ~이다 야크 구두. 여러 개의 연속적인 문법 규칙이 있는 경우
같은 왼쪽, ('|') 다시 쓰기를 방지하는 데 사용할 수 있습니다.
왼쪽; 이 경우 마지막 규칙 이후에만 나타납니다. 몸
부분은 비어 있을 수 있습니다(또는 이름과 리터럴이 비어 있음).
기호는 빈 문자열과 일치합니다.

XNUMXD덴탈의 야크 유틸리티는 각 규칙에 고유 번호를 할당합니다. 세로 막대를 사용하는 규칙
표기법은 별개의 규칙입니다. 규칙에 할당된 번호는 설명에 나타납니다.
파일.

BODY를 구성하는 요소는 다음과 같습니다.

name, 문자
이들은 문법 규칙을 형성합니다: name 또는 토큰 또는 비단말;
문자 그 자체를 나타냅니다(어휘적으로 요구되는 따옴표는 적음).

시맨틱 동작
각 문법 규칙을 사용하여 사용자는 매번 수행할 작업을 연결할 수 있습니다.
규칙은 입력 프로세스에서 인식됩니다. ('액션''이라는 단어는
또한 파서의 동작(shift, reduce 등)을 참조하십시오.)

이러한 작업은 값을 반환할 수 있으며 이전에 의해 반환된 값을 얻을 수 있습니다.
행위. 이러한 값은 YYSTYPE 유형의 개체에 보관됩니다(참조 %노동 조합).
작업의 결과 값은 왼쪽에 있는 구문 분석 스택에 유지되어야 합니다.
규칙의 측면, 오른쪽의 일부로 다른 축소에 의해 액세스
옆. 를 사용하여태그> 선언 섹션에 제공된 정보,
에 의해 생성된 코드 야크 엄격하게 유형을 확인할 수 있으며 임의의 내용을 포함할 수 있습니다.
정보. 또한 어휘 분석기는 동일한 종류의
원하는 경우 토큰 값.

작업은 임의의 C 문이며 입력 또는 출력을 수행할 수 있으므로 다음을 호출합니다.
하위 프로그램을 만들고 외부 변수를 변경합니다. 작업은 하나 이상의 C 문입니다.
중괄호로 묶음 '{''}'. 다음을 포함하지 않아야 합니다.
불균형 중괄호 전처리 토큰.

특정 의사 변수를 작업에 사용할 수 있습니다. 접근을 위한 매크로입니다.
내부적으로 알려진 데이터 구조 야크.

$$ 액션의 값은 $$에 할당하여 설정할 수 있습니다. 입력하는 경우
확인이 활성화되어 있고 할당할 값의 유형은 다음과 같을 수 없습니다.
결정되면 진단 메시지가 생성될 수 있습니다.

$번호 이것은 다음에 의해 지정된 구성 요소에서 반환된 값을 나타냅니다.
토큰 번호 규칙의 오른쪽에서 왼쪽에서 오른쪽으로 읽습니다.
번호 XNUMX 또는 음수일 수 있습니다. 만약에 번호 XNUMX이거나 음수이면
파서 스택의 이름과 관련된 데이터를 나타냅니다.
현재 규칙의 맨 왼쪽 기호 앞에 있습니다. (그건, "$ 0"
가장 왼쪽에 있는 이름 바로 앞에 있는 이름을 나타냅니다.
파서의 스택에서 찾을 현재 규칙 및 "$−1"
기호 그것의 왼쪽.) 만약 번호 현재 과거의 요소를 나타냅니다.
규칙의 포인트 또는 스택의 맨 아래를 넘어서면 결과는 다음과 같습니다.
찾으시는 주소가 없습니다. 유형 검사가 활성화되고 값의 유형이
할당을 결정할 수 없으면 진단 메시지가 생성될 수 있습니다.

$<태그>번호
이것들은 없는 해당 기호와 정확히 일치합니다. 태그
포함하지만 엄격한 유형 검사를 허용합니다.
유형 변환). 효과는 매크로가 사용하도록 확장된다는 것입니다. 태그
YYSTYPE 공용체에서 요소를 선택하려면(사용 데이터 이름.태그).
이것은 다음과 같은 경우에 특히 유용합니다. 번호 긍정적이지 않습니다.

$<태그>$ 이것은 참조에 참조된 공용체 멤버의 유형을 부과합니다.
by 태그. 이 구성은 왼쪽을 참조할 때 적용됩니다.
컨텍스트 값은 문법에서 발생하며 야크 수단으로
유형을 선택하기 위해.

작업은 규칙의 모든 위치에서 발생할 수 있습니다(끝뿐만 아니라). 작업이 액세스할 수 있음
액션에 의해 반환된 값은 왼쪽으로, 반환되는 값은 다음과 같이 될 수 있습니다.
오른쪽에 있는 작업으로 액세스됩니다. 규칙 중간에 나타나는 작업
동작을 새로운 비단말 기호로 대체하는 것과 동일하며,
왼쪽에 터미널이 아닌 기호가 있는 빈 규칙을 추가합니다. NS
새 규칙과 관련된 의미론적 동작은 원래 규칙과 동일해야 합니다.
동작. 규칙 내에서 작업을 사용하면 충돌이 발생할 수 있습니다.
그렇지 않으면 존재합니다.

기본적으로 규칙의 값은 규칙의 첫 번째 요소 값입니다.
첫 번째 요소에 유형이 없는 경우(특히
리터럴) 및 유형 검사가 켜져 있습니다. %유형, 오류 메시지가 나타납니다.

상위
키워드 %정확 와 연결된 우선 순위 수준을 변경하는 데 사용할 수 있습니다.
특정 문법 규칙. 이에 대한 예는 단항 및 이진
연산자는 동일한 기호 표현을 갖지만 다른 값을 지정해야 합니다.
또는 모호한 if-else 구성을 처리하는 경우
필요한. 예약된 기호 %정확 의 본문 직후에 나타날 수 있습니다.
문법 규칙이며 토큰 이름이나 리터럴이 뒤에 올 수 있습니다. 그것은
문법 규칙의 우선 순위가 다음 토큰의 우선 순위가 되도록 합니다.
이름 또는 리터럴. 규칙 전체에 대한 조치가 따를 수 있음 %정확.

프로그램 섹션이 다음에 오는 경우 애플리케이션은 문법 규칙이 다음과 같은지 확인해야 합니다.
에 의해 종료 %%.

프로그램 섹션
XNUMXD덴탈의 프로그램 섹션에는 어휘 분석기의 정의가 포함될 수 있습니다. 일렉스() 및 모든
기타 기능; 예를 들어, 문법 규칙에 지정된 작업에 사용된 것입니다. 그것
프로그램 섹션이 다음에서 의미론적 조치를 선행하는지 아니면 뒤에 오는지 지정되지 않습니다.
출력 파일; 따라서 응용 프로그램에 매크로 정의가 포함되어 있고
시맨틱 액션의 코드에 적용하려는 선언은
이내 "%{ ... %}" 선언 섹션에서.

입력 문법
에 대한 다음 입력 야크 입력에 대한 파서를 생성합니다. 야크. 이 형식 구문
앞의 텍스트 구문 설명보다 우선합니다.

어휘 구조는 덜 정확하게 정의됩니다. 어휘 Structure of 전에, 문법 정의
대부분의 용어. 이전 용어와 아래 토큰 간의 대응은 다음과 같습니다.
다음과 같습니다.

식별자 의 개념에 해당한다. name, 이전에 주어진. 그것은 또한 포함합니다
이전에 정의된 리터럴.

C_식별자
이것은 이름이며 추가로 뒤에 오는 것으로 알려져 있습니다. . NS
리터럴은 이 토큰을 생성할 수 없습니다.

NUMBER 숫자 문자열(음수가 아닌 XNUMX진수 정수).

TYPE, 왼쪽, , LCURL, RCURL
이것들은 에 직접적으로 대응한다 %유형, %왼쪽, %%, %{%}.

{ ... } 이것은 다음을 포함할 수 있는 C 언어 소스 코드를 나타냅니다. '$'
이전에 논의된 매크로.

/* 문법 for 전에, 입력 야크. */
/* Basic 항목. */
/* XNUMXD덴탈의 수행원 are 인정 by 전에, 어휘 분석기. */

%token IDENTIFIER /* 식별자와 리터럴 포함 */
%token C_IDENTIFIER /* 식별자(리터럴은 아님)
뒤에 :. */
%토큰 번호 /* [0-9][0-9]* */

/* 예약어 : %type=>TYPE %left=>LEFT 등 */

%token 왼쪽 오른쪽 NONASSOC 토큰 PREC 유형 시작 조합

%token MARK /* %% 표시. */
%token LCURL /* %{ 표시. */
%token RCURL /* %} 표시. */

/* 8비트 문자 리터럴은 스스로를 의미합니다. */
/* 멀티바이트 문자에 대해 토큰을 정의해야 합니다. */

% 시작 사양

%%

사양 : defs MARK 규칙 꼬리
;
꼬리 : 마크
{
/* 이 작업에서 파일의 나머지 부분을 설정합니다. */
}
| /* 비어있는; 두 번째 MARK는 선택 사항입니다. */
;
defs : /* 비어 있습니다. */
| 데프 데프
;
def : 시작 식별자
| 노동 조합
{
/* 공용체 정의를 출력에 복사합니다. */
}
| LCURL
{
/* 출력 파일에 C 코드를 복사합니다. */
}
RCURL
| rword 태그 nlist
;
rword : 토큰
| 왼쪽
| 오른쪽
| 노나속
| 유형
;
tag : /* 비어 있음: 통합 태그 ID는 선택 사항입니다. */
| '<' 식별자 '>'
;
목록 : nmno
| Nlist nmno
;
nmno : IDENTIFIER /* 참고: % 유형에서는 리터럴이 유효하지 않습니다. */
| IDENTIFIER NUMBER /* 참고: % 유형에는 유효하지 않습니다. */
;

/* 규칙 섹션 */

규칙 : C_IDENTIFIER rbody prec
| 규칙 규칙
;
규칙 : C_IDENTIFIER rbody prec
| '|' rbody prec
;
rbody : /* 비어 있음 */
| rbody 식별자
| 몸짓
;
행동 : '{'
{
/* 액션 복사, $$ 번역 등. */
}
'}'
;
사전 : /* 비어 있음 */
| 식별자
| PREC IDENTIFIER 행위
| 사전 ';'
;

충돌
입력 문법에 대해 생성된 파서는 충돌이 발생하는 상태를 포함할 수 있습니다. NS
문법이 일치하지 않기 때문에 충돌이 발생합니다. 랄르(1). 모호한 문법에는 항상 다음이 포함됩니다.
적어도 하나 랄르(1) 갈등. NS 야크 유틸리티는 다음 중 하나를 사용하여 모든 충돌을 해결합니다.
기본 규칙 또는 사용자 지정 우선 순위 규칙.

충돌은 이동/충돌 감소 또는 충돌 감소/감소입니다. 시프트/리듀스
충돌은 주어진 상태 및 예견 기호에 대해 시프트 동작과
감소 조치가 가능합니다. 감소/감소 충돌은 주어진 상태에 대해
lookahead 기호, 두 가지 다른 규칙에 의한 감소가 가능합니다.

아래 규칙은 충돌이 발생할 때 취해야 할 조치를 지정하는 방법을 설명합니다. 아니다
모든 교대/감소 충돌은 이러한 방식으로 성공적으로 해결할 수 있습니다.
모호성 이외의 다른 원인으로 인해 이러한 시설을 부주의하게 사용하면 문제가 발생할 수 있습니다.
파서에서 받아들인 언어가 의도한 것과 많이 다릅니다. NS
설명 파일에는 원인을 이해하기에 충분한 정보가 포함되어야 합니다.
갈등. 모호성이 기본 규칙이나 명시적 규칙이 있어야 하는 이유인 경우
작동하는 파서를 생성하기에 충분합니다.

선언된 우선 순위 및 연관성(참조 선언 섹션) 하는 데 사용됩니다
다음과 같이 구문 분석 충돌을 해결합니다.

1. 우선순위 및 연관성은 각 문법 규칙과 연관됩니다. 그것은
규칙 본문에서 마지막 토큰 또는 리터럴의 우선 순위 및 연관성. 만약에
전에, %정확 키워드가 사용되면 이 기본값을 재정의합니다. 일부 문법 규칙은 그렇지 않을 수 있습니다.
우선 순위와 연관성을 모두 갖습니다.

2. 시프트/리듀스 충돌이 있고 문법 규칙과 입력 기호가 모두 있는 경우
우선 순위와 연관성이 있으면 충돌이 해결됩니다.
더 높은 우선 순위와 관련된 작업(이동 또는 감소)에 찬성합니다. 만약
우선 순위가 같으면 연관성이 사용됩니다. 왼쪽 연관 의미
감소, 오른쪽 연관은 이동을 의미하고 비 연관은 오류를 의미합니다.
구문 분석 중인 문자열입니다.

3. 규칙 2로 해결할 수 없는 교대/축소 충돌이 있는 경우 교대
완료. 이 방법으로 해결된 충돌은 에 설명된 진단 출력에서 ​​계산됩니다.
오류 처리.

4. 감소/감소 충돌이 있을 때 감소는 다음과 같은 문법 규칙에 의해 수행됩니다.
입력 시퀀스에서 더 일찍 발생합니다. 이 방법으로 해결된 충돌은
에 설명된 진단 출력 오류 처리.

우선 순위 또는 연관성에 의해 해결된 충돌은 교대/축소에서 계산되지 않습니다.
보고된 충돌을 줄이거나 줄입니다. 야크 표준 오류 또는
설명 파일.

오류 처리
토큰 오류 오류 처리를 위해 예약되어야 합니다. 이름 오류 에서 사용될 수 있습니다
문법 규칙. 구문 오류에서 구문 분석기가 복구할 수 있는 위치를 나타냅니다. NS
기본값 오류 값은 다음을 사용하여 변경할 수 있습니다. %토큰 선언.
어휘 분석기는 다음 값을 반환해서는 안 됩니다. 오류.

구문 분석기는 동작이 연관된 상태에 있을 때 구문 오류를 감지해야 합니다.
예견 기호는 오류. 시맨틱 동작으로 인해 파서가 시작될 수 있습니다.
매크로 YYERROR를 실행하여 오류 처리. YYERROR가 실행되면 의미론적
action은 제어를 파서로 다시 넘깁니다. YYERROR는 시맨틱 외부에서 사용할 수 없습니다.
행위.

구문 분석기가 구문 오류를 감지하면 일반적으로 다음을 호출합니다. yy오류() 문자
"통사론 오류" 그 주장으로. 파서가 여전히 있으면 호출이 이루어지지 않습니다.
오류가 감지되면 이전 오류에서 복구합니다. 파서는 다음과 같이 간주됩니다.
파서가 적어도 세 번 이상 이동할 때까지 이전 오류에서 복구
마지막 오류가 감지되었거나 의미 동작이 실행된 이후의 정상적인 입력 기호
매크로 예록. 파서는 다음을 호출하지 않습니다. yy오류() YYERROR가 실행될 때.

매크로 함수 YYRECOVERING은 구문 오류가 감지되고
파서는 아직 완전히 복구되지 않았습니다. 그렇지 않으면 XNUMX이 반환됩니다.

구문 오류가 구문 분석기에 의해 감지되면 구문 분석기는 이전 구문이
오류가 감지되었습니다. 이전 오류가 감지되고 정상적인 입력 기호가 없는 경우
이전 오류가 감지된 이후로 이동된 경우 파서는 다음을 확인합니다.
lookahead 기호는 endmarker입니다(참조 인터페이스 전에, 어휘 분석기). 그렇다면,
파서는 XNUMX이 아닌 값을 반환해야 합니다. 그렇지 않으면 예견 기호는 다음과 같습니다.
폐기되고 정상적인 구문 분석이 재개됩니다.

YYERROR가 실행되거나 구문 분석기가 구문 오류를 감지하고 이전 오류가 없는 경우
감지되었거나 이전 이후로 하나 이상의 일반 입력 기호가 이동되었습니다.
오류가 감지되면 파서는 파싱 스택이 완료될 때까지 한 번에 하나의 상태로 되돌아갑니다
비어 있거나 현재 상태가 전환을 허용합니다. 오류. 파서가 파서를 비우는 경우
스택에서 XNUMX이 아닌 값으로 반환됩니다. 그렇지 않으면 전환됩니다. 오류
그런 다음 정상적인 구문 분석을 재개합니다. 오류가 발생하기 전에 파서가 미리보기 기호를 읽는 경우
감지된 경우 해당 기호는 구문 분석이 재개될 때 여전히 예견 기호여야 합니다.

매크로 예록 의미론적 동작에서 구문 분석기는 마치 완전히
이전 오류에서 복구되었습니다. 매크로 이클리어린 파서가 버리게 한다
현재 예측 토큰. 현재 lookahead 토큰을 아직 읽지 않은 경우
이클리어린 효력이 없습니다.

매크로 YYACCEPT는 파서가 값 XNUMX을 반환하도록 합니다. 매크로 YYABORT
파서가 XNUMX이 아닌 값을 반환하도록 합니다.

인터페이스 전에, 어휘 분석기
XNUMXD덴탈의 일렉스() 함수는 다음을 반환하는 정수 값 함수입니다. 토큰 번호
토큰 읽기의 종류를 나타냅니다. 토큰과 관련된 값이 있는 경우
반환 일렉스() (토론 참조 태그 위)에 할당됩니다.
외부 변수 일발.

파서와 일렉스() 이러한 토큰 번호, 안정적인 통신에 동의하지 않음
그들 사이에 발생할 수 없습니다. (단일 바이트 문자) 리터럴의 경우 토큰은 단순히
현재 문자 집합에 있는 문자의 숫자 값입니다. 다른 토큰의 숫자
다음 중 하나를 선택할 수 있습니다. 야크, 또는 사용자가 선택합니다. 두 경우 모두, #밝히다 구축
의 C는 허용하는 데 사용됩니다. 일렉스() 이 숫자를 기호로 반환합니다. NS #밝히다
코드 파일에 넣고 해당 파일이 요청되면 헤더 파일에 넣습니다. 세트
허용되는 문자 야크 식별자에서 C. 토큰이 허용하는 것보다 큽니다.
그러한 문자를 포함하는 것으로 밝혀진 이름은 #밝히다 선언.

토큰 번호가 다음에 의해 선택된 경우 야크, 리터럴 이외의 토큰이 할당됩니다.
256보다 큰 숫자이지만 순서는 암시되지 않습니다. 토큰을 명시적으로 할당할 수 있습니다.
선언 섹션에 숫자가 처음 등장하면 숫자가 표시됩니다.
이 방법으로 정의되지 않은 이름과 리터럴은 기본 정의를 유지합니다. 모든 토큰 번호
할당 자 야크 리터럴에 사용되는 토큰 번호와 고유하고 구별되어야 합니다.
사용자 할당 토큰. 중복된 토큰 번호가 파서 생성에서 충돌을 일으키는 경우,
야크 오류를 보고해야 합니다. 그렇지 않으면 토큰 할당 여부가 지정되지 않습니다.
승인되거나 오류가 보고됩니다.

입력의 끝은 다음과 같은 특수 토큰으로 표시됩니다. 엔드마커, 토큰이 있는
XNUMX 또는 음수입니다. (이 값은 다른 토큰에 대해 유효하지 않습니다.) 모두
어휘 분석기는 끝에 도달하면 토큰 번호로 XNUMX 또는 음수를 반환해야 합니다.
그들의 입력. 토큰이 엔드마커를 제외하고 다음과 같은 구조를 형성하는 경우
시작 기호와 일치하면 파서는 입력을 수락해야 합니다. endmarker가 보이는 경우
다른 상황에서는 오류로 간주됩니다.

완료 전에, 프로그램
이외에도 yyparse() 및 일렉스(), 기능 yy오류() 및 본관()는 필수
완전한 프로그램을 만드십시오. 응용 프로그램은 공급할 수 있습니다 본관() 및 yy오류() 또는 그
루틴은 다음에서 얻을 수 있습니다. 야크 도서관.

야크 도서관
다음 기능은 야크 통해 접근 가능한 도서관 -l y
피연산자 c99; 따라서 다음과 같이 준수하는 응용 프로그램에 의해 재정의될 수 있습니다.

INT 본관(무효화)
이 함수는 yyparse() 및 지정되지 않은 값으로 종료합니다. 다른 행동
이 기능 내에서 지정되지 않습니다.

INT yy오류(const를 이륜 전차 *s)
이 함수는 NUL 종료 인수를 표준 오류에 기록하고 그 뒤에
NS .

의 순서 -l y-l l 에 주어진 피연산자 c99 중요하다; 신청서는
자체 제공하거나 본관() 기능을 수행하거나 -l y 선행 -l l.

디버깅 전에, 파서
에 의해 생성된 파서는 야크 선택적으로 진단할 수 있는 진단 시설이 있어야 합니다.
컴파일 타임 또는 런타임에 활성화됩니다(컴파일 타임에 활성화된 경우). NS
런타임 디버깅 코드의 컴파일은 전처리기인 YYDEBUG의 제어 하에 있습니다.
상징. YYDEBUG에 XNUMX이 아닌 값이 있으면 디버깅 코드가 포함되어야 합니다. 만약
값이 XNUMX이면 코드가 포함되지 않습니다.

디버깅 코드가 포함된 파서에서 외부 INT 이디버그 될 수 있습니다
런타임에 디버깅을 켜고(XNUMX이 아닌 값으로) 비활성화(XNUMX 값)하는 데 사용됩니다. NS
초기 값 이디버그 XNUMX이 됩니다.

인셀덤 공식 판매점인 -t 가 지정되면 YYDEBUG가 아직 없는 경우 코드 파일이 빌드됩니다.
컴파일 시간에 정의됨( c99 -D 예를 들어 YYDEBUG 옵션), YYDEBUG는
명시적으로 1로 설정하십시오. -t 지정되지 않은 경우 코드 파일은 다음과 같이 빌드되어야 합니다.
YYDEBUG가 아직 정의되지 않은 경우 명시적으로 XNUMX으로 설정됩니다.

디버깅 출력의 형식은 지정되지 않았지만 최소한 충분한 정보가 포함되어 있습니다.
이동 및 감소 동작과 입력 기호를 결정합니다. 또한 제공합니다
오류 복구에 대한 정보입니다.

알고리즘
에 의해 구성된 파서는 야크 구현 랄르(1) 문서화 된 구문 분석 알고리즘
문학. 파서가 테이블 구동인지 직접 코딩인지 여부는 지정되지 않습니다.

에 의해 생성된 파서 야크 에서 입력 기호를 요청하지 않습니다. 일렉스() 동안
오류 조치 이외의 유일한 조치는 단일 규칙에 의한 감소인 상태입니다.

구문 분석 이론의 문헌은 이러한 개념을 정의합니다.

제한
XNUMXD덴탈의 야크 유틸리티에는 여러 내부 테이블이 있을 수 있습니다. 이 테이블의 최소 최대값
다음 표에 나와 있습니다. 이 값의 정확한 의미는 구현입니다.
한정된. 구현은 이러한 값과 다음 사이의 관계를 정의해야 합니다.
구현 시 생성할 수 있는 오류 메시지 및
모든 내부 구조를 위한 공간. 구현은 이러한 리소스 그룹을 결합할 수 있습니다.
사용자가 사용할 수 있는 총계가 합계 아래로 떨어지지 않는 한 단일 풀로
이 섹션에서 지정한 크기의

표: 내부의 제한 in 야크

┌───────────┬──────────────────────────────────────── ─────┐
│ │ 최저한의 │ │
한도최고상품 설명
├───────────┼─────────┼──────────────────────────── ─────┤
│{INTERMS} │ 126 │ 토큰 수. │
│{NONTERM} │ 200 │ 비단말의 수. │
│{NPROD} │ 300 │ 규칙 수. │
│{NSTATES} │ 600 │ 상태 수. │
│{MEMSIZE} │ 5200 │ 규칙의 길이. 합계 │
│ │ │ 길이, 이름(토큰 및 │
│ │ │ 비단자), 모든 │
│ │ │ 문법 규칙. │
│ │ │ 왼쪽은 │에 대해 계산됩니다.
│ │ │가 아니더라도 각 규칙
│ │ │ │와 같이 명시적으로 반복됨
│ │ │ 에 명시된 문법 규칙 in
│ │ │ 야크. │
│{ACTSIZE} │ 4000 │ 동작 수. ``액션'' │
│ │ │ 여기(및 설명 │
│ │ │ 파일) 파서 작업 참조 │
│ │ │ (shift, reduce 등) not │
│ │ │ │에 정의된 의미론적 동작
│ │ │ 문법 규칙 in 야크. │
└───────────┴─────────┴───────────────────────────── ─────┘

EXIT 지위


다음 종료 값이 반환됩니다.

0 성공적으로 완료되었습니다.

>0 오류가 발생했습니다.

결과 OF 오류


오류가 발생하면 실행이 중단되고 야크 XNUMX이 아닌 상태로 종료됩니다.
부분 코드 파일 및 헤더 파일이 생성될 수 있습니다. 요약 정보는
설명 파일은 항상 생성되어야 합니다. -v 플래그가 있습니다.

XNUMXD덴탈의 수행원 섹션 are 유익합니다.

신청 사용법


기록 구현에서 이름에 대한 이름 충돌이 발생함 yacc.tmp, yacc.acts,
yacc.디버그, y.tab.c, y.tab.hy.출력 사본이 두 개 이상인 경우 야크 에서 실행 중입니다
한 번에 단일 디렉토리. NS -b 이 문제를 해결하기 위해 옵션이 추가되었습니다. NS
다중 허용 관련 문제 야크 동일한 파일에 배치할 파서는
를 추가하여 해결 -p 이전에 하드 코딩된 옵션을 재정의하는 옵션 yy 변수 접두사.

설명 -p 옵션은 함수 및 변수 이름의 최소 집합을 지정합니다.
여러 파서가 함께 링크될 때 충돌을 일으킵니다. YYSTYPE은 필요하지 않습니다.
변경되었습니다. 대신 프로그래머는 다음을 사용할 수 있습니다. -b 다른 파서에 대한 헤더 파일을 제공하기 위해
다른 이름을 가진 다음 파일 일렉스() 주어진 파서에 대해 다음을 포함할 수 있습니다
해당 파서의 헤더입니다. 다음과 같은 이름 yyclearerr 변경할 필요가 없습니다.
작업에서만 사용됩니다. 그들은 연결이 없습니다. 그것은 가능하다
구현에는 다음과 같은 것을 구현하기 위한 내부 이름과 같은 다른 이름이 있습니다.
yyclearerr, 또는 변경하려는 비표준 기능 제공 -p.

일반적으로 이항 연산자와 동일한 토큰인 단항 연산자는
우선순위가 조정되었습니다. 이것은에 의해 처리됩니다 %정확 와 관련된 자문 기호
해당 단항 연산자를 정의하는 특정 문법 규칙. (보다 문법 규칙 in 야크.)
애플리케이션은 단항 연산자에 이 연산자를 사용할 필요가 없지만 문법은
필요하지 않은 경우는 드뭅니다.

사용 예


액세스 권한 야크 라이브러리는 라이브러리 검색 피연산자로 얻어집니다. c99. 사용하려면
야크 도서관 본관() :

c99 y.tab.c -l y

둘 다 법률 도서관과 야크 라이브러리 포함 본관(). 액세스하려면 야크 본관() :

c99 y.tab.c lex.yy.c -l y -l l

이렇게 하면 야크 라이브러리가 먼저 검색되므로 본관() 사용.

역사 야크 라이브러리에는 일반적으로 코딩되는 두 개의 간단한 함수가 포함되어 있습니다.
응용 프로그램 프로그래머에 의해. 이러한 함수는 다음 코드와 유사합니다.

#포함
INT 메인(무효)
{
외부 INT yyparse();

setlocale(LC_ALL, "");

/* 다음 파서가 lex에 의해 생성된 것이라면,
애플리케이션은 LC_CTYPE이
및 LC_COLLATE는 POSIX 로케일로 설정됩니다. */
(무효) yyparse();
리턴(0);
}

#포함하다

int yyerror(const char *msg)
{
(무효) fprintf(stderr, "%s\n", msg);
리턴(0);
}

이론적 해석


의 참조 참조 서류 파서를 구성하는 데 도움이 될 수 있습니다
발전기. 참조된 DeRemer 및 Pennello 기사(작품과 함께
참조) 이 볼륨을 준수하는 파서를 생성하는 기술을 설명합니다.
POSIX.1-2008. 이 분야의 작업은 계속 진행 중이므로 구현자는
새로운 구현을 수행하기 전에 최신 문헌을 참조하십시오. 원본 Knuth 기사는
이러한 종류의 파서에 대한 이론적 근거는 있지만 생성하는 테이블은 비실용적으로
합리적인 문법을 위해 크므로 사용해서는 안 됩니다. '동등한'' 문구는
최고의 테이블을 보장하기 위해 의도적으로 랄르(1) 생성할 수 있습니다.

문법 클래스, 생성에 필요한 알고리즘 사이에 혼란이 있었습니다.
구문 분석기 및 언어를 구문 분석하는 데 필요한 알고리즘. 그들은 모두 합리적으로
직교. 특히, 전체 범위를 수용하는 파서 생성기는 LR(1)
문법은 다음을 허용하는 것보다 더 복잡한 테이블을 생성할 필요가 없습니다. SLR(1) (아
LR 문법의 상대적으로 약한 클래스) SLR(1). 그런
구현에서도 경우를 인식할 필요는 없습니다. 테이블 압축은 SLR(1)
문법이 SLR(1). 그만큼
속도 LR(1) 모든 클래스에 대한 파서는 테이블 표현에 더 의존하고
클래스보다 압축(또는 직접 파서가 생성된 경우 코드 생성)
테이블 생성기가 처리하는 문법.

파서 생성기의 속도는 문법 클래스에 따라 다소 다릅니다.
핸들. 그러나 LR 파서를 구성하기 위한 원래 Knuth 기사 알고리즘은
그 당시에는 비현실적으로 느린 것으로 저자에 의해 판단되었습니다. 풀 LR이 더 많지만
보다 복잡한 랄르(1) 컴퓨터 속도와 알고리즘이 향상됨에 따라 그 차이(측면에서
허용 가능한 벽시계 실행 시간)이 덜 중요해지고 있습니다.

잠재적인 저자는 참조된 DeRemer 및 Pennello 기사가
이전에 인용된 버그를 식별합니다. 랄르(1)
예견 세트) 일부에서 랄르(1) 앞에 나온 알고리즘 문
출판. 그들은 그 논문과 현재의 관련성을 찾는 데 시간을 할애해야 합니다.
특히 Aho's.

XNUMXD덴탈의 -b 허용을 위한 이식 가능한 방법을 제공하기 위해 옵션이 추가되었습니다. 야크 일하다
동일한 디렉토리에 여러 개의 개별 파서가 있습니다. 디렉토리에 둘 이상의 파일이 포함된 경우
야크 문법, 그리고 두 문법이 동시에 구성됩니다(예를 들어,
병렬 확인 프로그램), 충돌 결과. 해결책은 역사적 관행이 아니지만,
그것은 역사적 구현의 알려진 결함을 수정합니다. 해당 변경 사항은
파일 이름을 참조한 모든 섹션에 작성 y.tab.c (이제 ``코드 파일''),
y.tab.h (지금은 ``헤더 파일''), 그리고 y.출력 (지금은 ``설명 파일'').

문법 야크 입력은 System V 문서를 기반으로 합니다. 텍스트 설명
거기에 보여줍니다 ';' 규칙의 끝에 필요합니다. 문법과
구현에는 이것이 필요하지 않습니다. (사용 C_식별자 에서 감소가 발생합니다.
올바른 장소.)

또한 해당 구현에서 다음과 같은 구성 %토큰 에 의해 종료될 수 있습니다.
, 그러나 이것은 문법에 의해 허용되지 않습니다. 와 같은 키워드는 %토큰
또한 대문자로 표시되며 다시 논의되지 않습니다. 대부분의 장소에서 '%' 사용,
대체할 수 있으며 일부 기호에는 대체 철자가 있습니다.
(예 : %왼쪽 될 수 있습니다 "%<" 심지어 "\<").

역사적으로,태그> 다음을 제외한 모든 문자를 포함할 수 있습니다. '>', 공백을 포함하여
구현. 그러나 이후 태그 ISO C 표준 조합 구성원을 참조해야 합니다.
구현을 준수하려면 ISO C에 대한 문자 집합만 지원해야 합니다.
이 컨텍스트에서 표준 식별자.

일부 역사적 구현은 다음으로 종료되는 작업을 수락하는 것으로 알려져 있습니다.
기간. 역사적 구현은 종종 '$' 이름에서. 준수 구현
이러한 동작 중 하나를 지원할 필요가 없습니다.

언제 사용할지 결정 %정확 의 동작을 지정하는 데 어려움을 보여줍니다. 야크.
하는 상황이 있을 수 있습니다. 문법 엄밀히 말하면 오류는 아니지만 아직
야크 명확하게 해석할 수 없습니다. 문법의 모호함을 해결할 수 있습니다.
많은 경우 다음과 같은 추가 정보를 제공하여 해결됩니다. %유형 or
%노동 조합 선언. 종종 더 쉽고 일반적으로 더 작은 파서를 생성합니다.
적절한 경우 이 대안.

런타임 디버깅 코드 없이 생성된 프로그램의 크기와 실행 시간은 다음과 같습니다.
일반적으로 과거 구현에서 더 작고 약간 빠릅니다.

여러 역사적 구현의 통계 메시지에는 다음 유형이 포함됩니다.
정보 :

n/512 터미널, n/300 비단말
n/600 문법 규칙, n/1500개 주
n 이동/감소, n 보고된 충돌 감소/감소
n/350 작업 세트 사용
메모리: 상태 등 n/15000, 파서 n/ 15000
n/600개의 고유한 예측 세트
n 추가 폐쇄
n 교대 항목, n 예외
n 항목으로 이동
n goto 기본값으로 저장된 항목
사용된 옵티마이저 공간: 입력 n/15000, 출력 n/ 15000
n 테이블 항목, n 제로
최대 스프레드: n, 최대 오프셋: n

설명 파일의 내부 테이블 보고서는 구현 정의된 상태로 유지됩니다.
이러한 제한의 모든 측면도 구현에 의해 정의되기 때문입니다. 일부 구현
동적 할당 기술을 사용할 수 있으며 보고할 특정 제한 값이 없습니다.

형식 y.출력 형식 사양이 지정되지 않았기 때문에 파일이 제공되지 않았습니다.
응용 프로그램 이식성을 향상시키는 것으로 나타났습니다. 목록은 주로 인간을 돕기 위한 것입니다.
사용자는 파서를 이해하고 디버그합니다. 사용 y.출력 준수하는 응용 프로그램 스크립트에 의해
이례적일 것입니다. 또한 구현은 일관된 출력을 생성하지 않았으며
인기있는 형식이 분명했습니다. 구현에서 선택한 형식은 사람이
텍스트 파일이어야 한다는 요구 사항 외에도 읽을 수 있습니다.

표준 오류 보고서는 거의 사용되지 않기 때문에 구체적으로 설명되지 않습니다.
애플리케이션을 준수하고 구현을 제한할 이유가 없었습니다.

일부 구현은 다음을 인식합니다. "={" 에 상응하는 '{' 역사에 등장하기 때문에
선적 서류 비치. 이 구조는 오래 전에 쓸모없는 것으로 인식되고 문서화되었습니다.
1978, 참조 야크: 아직 다른 컴파일러-컴파일러. POSIX.1-2008의 이 볼륨
구식으로 남겨두고 생략하기로 결정했습니다.

다중 바이트 문자는 어휘 분석기가 인식하고 토큰으로 반환해야 합니다.
멀티바이트 문자 리터럴로 반환되어서는 안 됩니다. 토큰 오류 사용되는
오류 복구의 경우 일반적으로 기록 구현에서 값 256이 할당됩니다.
따라서 많은 멀티바이트 문자 집합에서 사용되는 토큰 값 256은
사용자 정의 토큰의 값으로 사용할 수 있습니다.

미래 오시는 길


없음.

onworks.net 서비스를 사용하여 온라인으로 yaccposix 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

  • 1
    itop - ITSM CMDB 오픈 소스
    itop - ITSM CMDB 오픈 소스
    IT 운영 포털: 완전한 개방
    소스, ITIL, 웹 기반 서비스
    완전히 포함하는 관리 도구
    맞춤형 CMDB, 헬프데스크 시스템 및
    서류맨...
    itop 다운로드 - ITSM CMDB 오픈소스
  • 2
    클레멘 타인
    클레멘 타인
    Clementine은 멀티 플랫폼 음악입니다.
    영감을 받은 플레이어 및 라이브러리 구성자
    아마록 1.4. 그것은 빠르고
    사용하기 쉬운 인터페이스,
    검색하고 ...
    클레멘타인 다운로드
  • 3
    XISMuS
    XISMuS
    주의: 누적 업데이트 2.4.3은
    출시되었습니다!! 업데이트는 모든
    이전 2.xx 버전. 업그레이드하는 경우
    버전 v1.xx에서 다운로드하고
    난 ..
    XISMuS 다운로드
  • 4
    페이스 트랙 누아르
    페이스 트랙 누아르
    모듈식 헤드트래킹 프로그램
    여러 얼굴 추적기, 필터 지원
    그리고 게임 프로토콜. 트래커 중에서
    SM FaceAPI, AIC 관성 헤드
    추적기 ...
    다운로드
  • 5
    PHP QR 코드
    PHP QR 코드
    PHP QR 코드는 오픈 소스(LGPL)입니다.
    QR 코드 생성을 위한 라이브러리,
    2차원 바코드. 기반으로
    libqrencode C 라이브러리, API 제공
    QR 코드 바코드 생성 중...
    PHP QR 코드 다운로드
  • 6
    프리시브
    프리시브
    Freeciv는 무료 턴 기반 게임입니다.
    멀티플레이어 전략 게임,
    플레이어는 a의 리더가 됩니다.
    문명을 얻기 위한 투쟁
    궁극적인 목표: 될...
    Freeciv 다운로드
  • 더»

Linux 명령

Ad