GoGPT Best VPN GoSearch

온웍스 파비콘

re2c - 클라우드에서 온라인

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

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

프로그램:

이름


re2c - 정규식을 C/C++ 코드로 변환

개요


재2C [옵션] FILE

기술


재2C C/C++용 렉서 생성기입니다. 내부에서 정규식 사양을 찾습니다.
C/C++는 주석을 달고 하드 코딩된 DFA로 바꿉니다. 사용자는 일부를 제공해야 합니다
생성된 DFA를 제어하고 맞춤설정하기 위한 인터페이스 코드

옵션


-? -h --도움
짧은 도움을 요청하십시오.

-b --비트 벡터
암시 -s. 비트 벡터를 사용하여 더 나은 코드를
컴파일러. 키워드가 몇 개 이상 있는 사양에 가장 유용합니다(예:
대부분의 프로그래밍 언어).

-c --정황
(f) lex와 같은 조건 지원을 지원하는 데 사용됩니다.

-d --디버그 출력
현재 위치에 대한 정보를 덤프하는 파서를 생성합니다.
파서가 입력을 파싱하는 동안 상태. 이것은 파서 문제를 디버그하는 데 유용합니다.
및 상태. 이 스위치를 사용하는 경우 매크로를 정의해야 합니다. 이데버그 그건
두 개의 매개변수가 있는 함수처럼 호출됩니다. 무효화 이데버그 (정수 상태, 이륜 전차 흐름).
첫 번째 매개변수는 상태를 수신하거나 -1 두 번째 매개변수는
현재 커서에 입력

-D --방출점
Graphviz 점 데이터를 내보냅니다. 그런 다음 예를 들어 처리할 수 있습니다. -Tpng 입력.점 >
출력.png. 상태가 많은 스캐너는 충돌이 발생할 수 있습니다.

-e --ecb
EBCDIC를 지원하는 파서를 생성하십시오. 생성된 코드는 모든
최대 0xFF의 문자. 이 모드에서 재2C 입력 문자 크기가 1이라고 가정합니다.
바이트. 이 스위치는 다음과 호환되지 않습니다. -w, -x, -u 그리고 -8.

-f --저장 가능 상태
저장 가능한 상태를 지원하는 스캐너를 생성합니다.

-F --플렉스 구문
플렉스 구문에 대한 부분 지원. 이 플래그가 활성화되면 명명된 정의
중괄호로 묶어야 하며 등호 없이 정의할 수 있으며
종결 세미콜론. 대신 이름은 직접 큰따옴표로 묶인 문자열로 처리됩니다.

-g --계산된-고토스
GCC의 계산된 goto 기능을 활용하는 스캐너를 생성합니다. 그건 재2C
결정이 특정 복잡성을 가질 때마다 점프 테이블을 생성합니다(예: 많은
조건이 달리 필요한 경우). 이것은 GCC에서만 사용할 수 있으며 다음을 생성합니다.
다른 컴파일러로 컴파일할 수 없는 출력. 이것은 다음을 의미합니다. -b
복잡도 임계값은 현재 구성을 사용하여 구성할 수 있습니다.
cgoto:임계값.

-i --디버그 정보 없음
출력하지 않음 #선 정보. 이것은 CMS 도구를 사용하려는 경우에 유용합니다.
전에, 재2C 사용자에게 다음을 요구하지 않는 경우 원하는 출력 재2C
소스에서 빌드할 때

-o 출력 --출력=출력
지정 출력 파일.

-r --재사용 가능
다음을 사용하여 스캐너 정의를 재사용할 수 있습니다. /*!사용:re2c */ 시간 내에 /*!규칙:re2c */. 에
이 모드 /*!re2c */ 블록과 정확히 하나 /*!규칙:re2c */ 있어야합니다.
규칙은 모든 사람이 저장하고 사용합니다. /*!사용:re2c */ 이어지는 블록.
이러한 블록에는 내부 구성이 포함될 수 있습니다. 특히 re2c:플래그:e,
re2c:플래그:w, re2c:플래그:x, re2c:플래그:u 그리고 re2c:플래그:8. 그래야 가능하다
서로 다른 문자 유형에 대해 동일한 스캐너를 여러 번 생성하려면
입력 메커니즘 또는 다른 출력 메커니즘. NS /*!사용:re2c */ 블록 수
의 규칙 집합에 추가될 추가 규칙도 포함합니다.
/*!규칙:re2c */.

-s --중첩된 경우
일부 스위치에 대해 중첩된 if를 생성합니다. 많은 컴파일러는 생성을 위해 이 지원이 필요합니다.
더 나은 코드.

-t 머리글 --type-header=헤더
만들기 머리글 (f) lex와 같은 조건 지원을 위한 유형을 포함하는 파일입니다.
다음 경우에만 활성화할 수 있습니다. -c 사용 중입니다.

-u --유니코드
UTF-32를 지원하는 파서를 생성하십시오. 생성된 코드는 모든 유효한
최대 0x10FFFF의 유니코드 문자. 이 모드에서 재2C 입력 문자를 가정합니다
크기는 4바이트입니다. 이 스위치는 다음과 호환되지 않습니다. -e, -w, -x 그리고 -8. 이것은 의미합니다
-s.

-v --번역
버전 정보를 표시합니다.

-V --버넘
버전을 숫자 XXYYZZ로 표시합니다.

-w --와이드 문자
UCS-2를 지원하는 파서를 생성합니다. 생성된 코드는 모든 유효한
최대 0xFFFF의 유니코드 문자. 이 모드에서 재2C 입력 문자를 가정합니다
크기는 2바이트입니다. 이 스위치는 다음과 호환되지 않습니다. -e, -x, -u 그리고 -8. 이것은 의미합니다
-s.

-x --utf-16
UTF-16를 지원하는 파서를 생성하십시오. 생성된 코드는 모든 유효한
최대 0x10FFFF의 유니코드 문자. 이 모드에서 재2C 입력 문자를 가정합니다
크기는 2바이트입니다. 이 스위치는 다음과 호환되지 않습니다. -e, -w, -u 그리고 -8. 이것은 의미합니다
-s.

-8 --utf-8
UTF-8를 지원하는 파서를 생성하십시오. 생성된 코드는 모든 유효한
최대 0x10FFFF의 유니코드 문자. 이 모드에서 재2C 입력 문자를 가정합니다
크기는 1바이트입니다. 이 스위치는 다음과 호환되지 않습니다. -e, -w, -x 그리고 -u.

--대소문자를 구분하지 않음
모든 문자열은 대소문자를 구분하지 않으므로 모든 "-표현식은 동일한 방식으로 처리됩니다.
'-표현입니다.

--대소문자 반전
작은따옴표와 큰따옴표 문자열의 의미를 반전시킵니다. 이 스위치 싱글로
따옴표는 대소문자를 구분하고 큰따옴표는 대소문자를 구분하지 않습니다.

--생성 날짜 없음
생성된 파일에서 날짜 출력을 억제합니다.

--생성 날짜 없음
생성된 파일에서 버전 출력을 억제합니다.

--인코딩 정책 갱신
방법 지정 재2C 유니코드 대리자를 처리해야 합니다. 갱신 다음 중 하나일 수 있습니다.
실패 (대리게이트가 발생하면 오류와 함께 중단), 대용품 (조용히 대체
오류 코드 포인트가 0xFFFD인 대리), 무시 (대리게이트를 일반 코드로 취급
포인트들). 기본적으로 재2C 서로게이트를 무시합니다(이전 버전과의 호환성을 위해). 유니코드
표준에 따르면 독립 실행형 대리는 유효하지 않은 코드 포인트이지만 다른
라이브러리와 프로그램은 이들을 다르게 취급합니다.

--입력 입력
re2c 입력 API를 지정합니다. 입력 다음 중 하나일 수 있습니다. 디폴트 값, 관습.

-S --해골
re2c 생성 코드를 C/C++ 소스에 포함하는 대신
동일한 DFA에 대한 독립형 프로그램입니다. 정확성과
성능 시험.

--빈 클래스 갱신
사용자가 빈 문자 클래스를 입력하는 경우 수행할 작업. 갱신 다음 중 하나일 수 있습니다.
다음 : 일치하지 않는 (빈 입력 일치: 꽤 비논리적이지만 이것은
이전 버전과의 호환성을 위한 기본값), 일치 없음 (어느 것과도 일치하지 않음
입력), 오류 (컴파일 오류). 다양한 구성 방법이 있으니 참고하세요.
빈 클래스, 예: [], [^\x00-\xFF], [\x00-\xFF][\x00-\xFF].

--dfa-최소화 <테이블 | 무어>
DFA를 최소화하기 위해 re2c에서 사용하는 내부 알고리즘(기본값: 무어). 양쪽 테이블
채우기 및 무어의 알고리즘은 동일한 DFA를 생성해야 합니다(최대 상태
재라벨링). 테이블 채우기 알고리즘은 훨씬 간단하고 느립니다. 그것은 역할
참조 구현.

-1 --단일 패스
더 이상 사용되지 않으며 아무 작업도 수행하지 않습니다(현재 단일 패스가 기본적으로 사용됨).

-W 모든 경고를 켭니다.

-워러
경고를 오류로 바꾸십시오. 이 옵션은
경고, 지금까지 켜져 있거나 앞으로 켜질 경고에만 영향을 미칩니다.
나중에 켜짐.

-W
개별 켜기 경고.

-아니-
개별 끄기 경고.

-워러-
개별 켜기 경고 오류로 처리합니다(이는 -W).

-무-오류-
이 특정 항목을 처리하지 마십시오. 경고 오류로. 이것은 경고를 끄지 않습니다
자체.

-W상태-주문
생성된 프로그램이 조건 번호 지정에 대해 암시적으로 가정하는 경우 경고합니다.
둘 중 하나를 사용해야 합니다. -NS, --유형 헤더 옵션 또는 /*!유형:re2c*/ 지시어
숫자에 대한 조건 이름 매핑 생성 및 자동 생성 조건 사용
이름.

-Wempty-문자 클래스
정규식에 빈 문자 클래스가 포함되어 있으면 경고합니다. 합리적인 관점에서
빈 문자 클래스와 일치시키려는 관점은 의미가 없습니다. 항상
불합격. 그러나 이전 버전과의 호환성을 위해 재2C 빈 문자 허용
클래스를 생성하고 이를 빈 문자열로 처리합니다. 사용하다 --빈 클래스 기본값을 변경하는 옵션
행동.

-Wmatch-빈 문자열
규칙의 정규식이 nullable이면 경고합니다(빈 문자열과 일치). DFA인 경우
루프에서 실행되고 빈 일치는 의도하지 않은 것입니다(입력 위치는 고급
수동으로), 렉서는 영원한 루프에 빠질 수 있습니다.

-WSwapped 범위
범위 하한이 상한보다 큰 경우 경고합니다. 기본 재2C 행동은
자동으로 범위 경계를 바꿉니다.

- 정의되지 않은 제어 흐름
일부 입력 문자열이 렉서에서 정의되지 않은 제어 흐름을 일으키는 경우 경고합니다(오류가
패턴이 보고됨). 이것은 가장 위험하고 흔한 실수입니다. 그것은 될 수 있습니다
기본 규칙을 추가하여 쉽게 수정 * (이 규칙은 우선 순위가 가장 낮고 일치합니다.
모든 코드 단위와 정확히 하나의 코드 단위를 소비함).

-쓸데없는 탈출
기호가 이스케이프되어서는 안 될 때 이스케이프되면 경고합니다. 기본적으로 re2c는 자동으로 무시합니다.
이스케이프하지만 이것은 이스케이프 시퀀스의 오타 또는 오류를 나타낼 수도 있습니다.

인터페이스 CODE


사용자는 C/C++ 코드(매크로, 함수,
변수 등) 또는 교체 구성. 정의해야 하는 기호
선택 사항은 특정 사용 사례에 따라 다릅니다.

YYCONDTYPE
In -c 사용할 수 있는 모드 -t 다음으로 사용되는 열거를 포함하는 파일을 생성하려면
정황. 각 값은 규칙 집합의 조건을 나타냅니다.

YYCTX마커
유형의 l-값 YYCTYPE *. 생성된 코드는 후행 컨텍스트 역추적을 저장합니다.
정보 YYCTX마커. 스캐너가 다음과 같은 경우에만 사용자가 이 매크로를 정의하면 됩니다.
사양은 하나 이상의 정규식에서 후행 컨텍스트를 사용합니다.

YYCTYPE
입력 기호(코드 단위)를 유지하는 데 사용되는 유형입니다. 대개 이륜 전차 or 부호 이륜 전차 을 통한
ASCII, EBCDIC 및 UTF-8, 부호 짧은 UTF-16 또는 UCS-2 및 부호 INT 을 통한
UTF-32.

YYCURSOR
유형의 l-값 YYCTYPE * 현재 입력 기호를 가리킵니다. 생성된
코드 진보 YYCURSOR 기호가 일치하기 때문입니다. 입장 시, YYCURSOR 로 추정된다
현재 토큰의 첫 번째 문자를 가리킵니다. 출구에서, YYCURSOR 가리킬 것이다
다음 토큰의 첫 번째 문자.

이데버그 (상태, 흐름)
이것은 다음 경우에만 필요합니다. -d 플래그가 지정되었습니다. 쉽게 디버깅할 수 있습니다.
모든 상태에 대해 사용자 정의 함수를 호출하여 생성된 파서. 함수
다음 서명이 있어야 합니다. 무효화 이데버그 (정수 상태, 이륜 전차 흐름). 그만큼
첫 번째 매개변수는 상태 또는 -1을 수신하고 두 번째 매개변수는
현재 커서에 입력

YYFILL (엔)
생성된 코드 "호출"" YYFILL (엔) 버퍼가 (재)채움이 필요할 때: 적어도
n 추가 문자를 제공해야 합니다. YYFILL (엔) 조정해야 YYCURSOR,
YYLIMIT, 와이마커 그리고 YYCTX마커 필요에 따라. 일반적인 프로그래밍의 경우
언어 n 가장 긴 키워드의 길이에 XNUMX을 더한 길이가 됩니다. 사용자가 배치할 수 있는
양식의 주석 /*!최대:re2c*/ 삽입 YYMAXFILL 로 설정된 정의
최대 길이 값.

YYGET 조건 ()
이 정의는 다음과 같은 경우 스캐너 코드를 입력하기 전에 조건을 가져오는 데 사용됩니다.
사용 -c 스위치. 값은 열거형의 값으로 초기화해야 합니다.
YYCONDTYPE 유형.

YGETSTATE ()
사용자는 다음과 같은 경우에만 이 매크로를 정의하면 됩니다. -f 플래그가 지정되었습니다. 그 안에
이 경우 생성된 코드는 "호출" YGETSTATE () 스캐너의 맨 처음에
저장된 상태를 얻으려면. YGETSTATE () 부호 있는 정수를 반환해야 합니다. NS
값은 스캐너가 처음으로 입력되었음을 나타내는 -1이어야 합니다.
또는 이전에 저장한 값 YYSETSTATE (들). 두 번째 경우에는 스캐너가
마지막 위치 바로 다음에 작업 재개 YYFILL (엔) 호출되었습니다.

YYLIMIT
유형의 표현 YYCTYPE * 버퍼의 끝을 표시하는 YYLIMIT[-1] 이다
버퍼의 마지막 문자). 생성된 코드는 반복적으로 비교 YYCURSOR
YYLIMIT 버퍼가 (재)충전이 필요한 시점을 결정하기 위해.

와이마커
유형의 l-값 YYCTYPE *. 생성된 코드는 역추적 정보를 다음 위치에 저장합니다.
와이마커. 일부 쉬운 스캐너는 이것을 사용하지 않을 수 있습니다.

YYMAXFILL
이것은 자동으로 정의됩니다. /*!최대:re2c*/ 위에서 설명한 대로 차단합니다.

YYSET 조건 (C)
이 정의는 전환 규칙에서 조건을 설정하는 데 사용됩니다. 이것은 단지
때 사용 -c 활성 상태이고 전환 규칙이 사용 중입니다.

YYSETSTATE (들)
사용자는 다음과 같은 경우에만 이 매크로를 정의하면 됩니다. -f 플래그가 지정되었습니다. 그 안에
이 경우 생성된 코드는 "호출" YYSETSTATE 전화하기 직전에 YYFILL (엔). 그만큼
에 매개 변수 YYSETSTATE 특정 항목을 고유하게 식별하는 부호 있는 정수입니다.
대신에 YYFILL (엔) 불리게 된 것입니다. 사용자가 저장을 원할 경우
스캐너의 상태 및 YYFILL (엔) 호출자에게 돌아가기만 하면 됩니다.
해당 고유 식별자를 변수에 저장합니다. 나중에 스캐너가 호출되면
다시, 그것은 부를 것이다 YGETSTATE () 중단된 곳에서 바로 실행을 재개합니다. NS
생성된 코드에는 둘 다 포함됩니다 YYSETSTATE (들) 그리고 YGETSTATE 경우에도 YYFILL (엔)
비활성화됩니다.

통사론


코드 재2C 의 세트로 구성 규칙, NAMED 정의 그리고 교체 구성.

규칙
규칙은 정규식으로 구성됩니다(참조 정규병 표현) 블록과 함께
연결된 정규식이 일치할 때 실행될 C/C++ 코드입니다. 너
여는 중괄호 또는 시퀀스로 코드를 시작할 수 있습니다. :=. 코드가
그런 다음 중괄호로 재2C 중괄호 깊이를 계산하고 코드 찾기를 중지합니다.
자동으로. 그렇지 않으면 중괄호가 허용되지 않으며 재2C 에서 코드 찾기를 중지합니다.
공백으로 시작하지 않는 첫 번째 줄. 두 개 이상의 규칙이 중복되는 경우
첫 번째 규칙이 선호됩니다.
정규식 { C / C ++ 암호 }

정규식 := C / C ++ 암호

하나의 특별한 규칙이 있습니다: 기본 규칙 *
* { C / C ++ 암호 }

* := C / C ++ 암호

기본 규칙에 유의하십시오. * ~와 다르다 [^]: 기본 규칙은 우선 순위가 가장 낮고 일치합니다.
모든 코드 단위(유효하거나 유효하지 않음)는 항상 하나의 문자를 소비합니다. 동안 [^]
모든 유효한 코드 포인트(코드 단위 아님)와 일치하며 여러 코드 단위를 사용할 수 있습니다. 사실로,
가변 길이 인코딩을 사용하는 경우 * 유효하지 않은 입력과 일치하는 유일한 방법입니다.
캐릭터(참조 인코딩 자세한 내용은).

If -c 활성 상태이면 각 정규식 앞에 쉼표로 구분된 목록이 옵니다.
조건 이름. 일반적인 명명 규칙 외에 두 가지 특별한 경우가 있습니다. <*> (이러한 규칙
모든 조건에 병합됨) 및 <> (이러한 규칙에는 연결된 일반
식, 해당 코드는 모든 작업에 병합됨). 비어 있지 않은 규칙은 추가로 지정할 수 있습니다.
새로운 조건. 그 경우 재2C 변경하는 데 필요한 코드를 생성합니다.
자동으로 조건. 규칙은 다음을 사용할 수 있습니다. :=> 코드를 자동으로 생성하는 단축키로
새로운 조건 상태를 설정할 뿐만 아니라 새로운 조건으로 실행을 계속합니다.
상태. 시작 사이에 코드가 있는 루프에서는 바로 가기 규칙을 사용하면 안 됩니다.
루프와 재2C 하지 않는 한 차단 re2c:조건:고토 로 변경됩니다 계속. 코드가
모든 규칙 이전에 필요합니다(단순한 점프는 아니지만) 다음을 사용하여 수행할 수 있습니다.
의사 규칙.
정규식 { C / C ++ 암호 }

정규식 := C / C ++ 암호

* { C / C ++ 암호 }

* := C / C ++ 암호

정규식 => 조건 { C / C ++ 암호 }

정규식 => 조건 := C / C ++ 암호

* => 조건 { C / C ++ 암호 }

* => 조건 := C / C ++ 암호

정규식 :=> 조건

<*> 정규식 { C / C ++ 암호 }

<*> 정규식 := C / C ++ 암호

<*> * { C / C ++ 암호 }

<*> * := C / C ++ 암호

<*> 정규식 => 조건 { C / C ++ 암호 }

<*> 정규식 => 조건 := C / C ++ 암호

<*> * => 조건 { C / C ++ 암호 }

<*> * => 조건 := C / C ++ 암호

<*> 정규식 :=> 조건

<> { C / C ++ 암호 }

<> := C / C ++ 암호

<> => 조건 { C / C ++ 암호 }

<> => 조건 := C / C ++ 암호

<> :=> 조건

<> :=> 조건

<! 조건 목록> { C / C ++ 암호 }

<! 조건 목록> := C / C ++ 암호

{ C / C ++ 암호 }

:= C / C ++ 암호

NAMED 정의
명명된 정의의 형식은 다음과 같습니다.
name = 정규식;

If -F 활성 상태인 경우 명명된 정의의 형식도 다음과 같습니다.
name { 정규식 }

교체 구성
re2c:condprefix = yyc;
조건 레이블에 사용되는 접두사를 지정할 수 있습니다. 즉 이 텍스트는
생성된 출력 파일의 조건 레이블 앞에 추가됩니다.

re2c:condenumpprefix = yyc;
조건 값에 사용되는 접두사를 지정할 수 있습니다. 즉 이 텍스트는
생성된 출력 파일의 조건 열거형 값 앞에 추가됩니다.

re2c:cond:디바이더 = /* *********************************** */ ;
조건 블록에 대한 구분자를 사용자 정의할 수 있습니다. 당신이 사용할 수있는 @@ 에 넣어
조건의 이름을 지정하거나 다음을 사용하여 자리 표시자를 사용자 지정합니다. re2c:cond:divider@cond.

re2c:cond:divider@cond = @@;
의 조건 이름으로 대체될 자리 표시자를 지정합니다.
re2c:cond:디바이더.

re2c:조건:고토 = 고토 @@; ;
다음과 함께 사용되는 조건 goto 문을 사용자 정의할 수 있습니다. :=> 스타일 규칙.
당신이 사용할 수 @@ 조건의 이름을 입력하거나 다음을 사용하여 자리 표시자를 사용자화하려면
re2c:cond:goto@cond. 다음으로 변경할 수도 있습니다. 계속;, 당신을 허용할 것입니다
루프 시작과 re2c 사이의 모든 코드를 포함하여 다음 루프 사이클을 계속하려면
블록.

re2c:cond:goto@cond = @@;
의 조건 레이블로 대체될 자리 표시자를 지정합니다.
re2c:조건:고토.

re2c:들여쓰기:상단 = 0;
사용할 최소 들여쓰기 수를 지정합니다. 숫자 값이 필요합니다.
XNUMX보다 크거나 같습니다.

re2c:들여쓰기:문자열 = \t ;
들여쓰기에 사용할 문자열을 지정합니다. 다음을 포함해야 하는 문자열이 필요합니다.
외부 도구에 필요한 경우가 아니면 공백만 사용하십시오. 지정하는 가장 쉬운 방법
공백은 작은따옴표나 큰따옴표로 묶는 것입니다. 원하지 않는 경우
들여쓰기를 하지 않으려면 이것을 ""로 설정하기만 하면 됩니다.

re2c:yych:변환 = 0;
이 설정이 XNUMX이 아닌 경우 재2C 자동으로 변환 코드 생성
yych가 읽힐 때마다. 이 경우 유형은 다음을 사용하여 정의해야 합니다.
re2c:정의:YYCTYPE.

re2c:yych:방출 = 1;
세대 이야 이것을 0으로 설정하여 억제할 수 있습니다.

re2c:yybm:XNUMX진수 = 0;
XNUMX으로 설정하면 XNUMX진수 테이블이 사용되며 그렇지 않으면 XNUMX진수 테이블이 사용됩니다.
생성.

re2c:yyfill:활성화 = 1;
생성을 억제하려면 이것을 XNUMX으로 설정하십시오. YYFILL (엔). 이것을 사용할 때 반드시
생성된 스캐너가 입력 뒤에서 읽지 않는지 확인합니다. 이것을 허용
동작으로 인해 프로그램에 심각한 보안 문제가 발생할 수 있습니다.

re2c:yyfill:체크 = 1;
이것은 0으로 설정하여 다음을 사용하여 사전 조건의 출력을 억제할 수 있습니다. YYCURSOR 그리고
YYLIMIT 유용할 때 YYLIMIT + YYMAXFILL 항상 액세스할 수 있습니다.

re2c:정의:YYFILL = YYFILL ;
대체 YYFILL. 기본적으로 재2C 중괄호 안에 인수를 생성하고
뒤에 세미콜론 YYFILL. 필요한 경우 YYFILL 오히려 자의적 진술
전화보다, 설정 re2c:define:YYFILL:네이키드 XNUMX이 아닌 값으로 사용
re2c:정의:YYFILL@len 내부의 형식 매개 변수를 나타내기 위해 YYFILL 몸.

re2c:정의:YYFILL@len = @@ ;
내부에서 이 텍스트의 모든 발생 YYFILL 실제로 대체됩니다
논의.

re2c:yyfill:매개변수 = 1;
다음 중괄호의 인수를 제어합니다. YYFILL. XNUMX이면 agrment가 생략됩니다. 만약에
XNUMX이 아닌 경우 인수가 생성됩니다. re2c:define:YYFILL:네이키드 XNUMX이 아닌 값으로 설정됩니다.

re2c:define:YYFILL:네이키드 = 0;
중괄호와 세미콜론 뒤에 있는 인수를 제어합니다. YYFILL. XNUMX이면 농약과
세미콜론은 생략됩니다. XNUMX이 아닌 경우 인수가 생성됩니다.
re2c:yyfill:매개변수 XNUMX으로 설정되고 무조건 세미콜론이 생성됩니다.

re2c:시작 레이블 = 0;
XNUMX이 아닌 정수로 설정하면 다음 스캐너 블록의 시작 레이블이
스캐너 자체에서 사용하지 않더라도 생성됩니다. 그렇지 않으면 정상 yy0 처럼
시작 레이블은 필요한 경우에만 생성됩니다. 텍스트 값으로 설정하면 레이블
정상적인 시작 레이블인지 여부에 관계없이 해당 텍스트가 생성됩니다.
사용 여부. 이 설정은 시작 레이블이 설정된 후 0으로 재설정됩니다.
생성.

re2c:레이블 접두사 = yy ;
번호가 매겨진 레이블의 접두사를 변경할 수 있습니다. 기본값은 yy 될 수있다
유효한 레이블인 문자열을 설정하십시오.

re2c:상태:중단 = 0;
XNUMX이 아닐 때 스위치 -f 활성 상태입니다 YGETSTATE 블록에는 다음이 포함됩니다.
중단되는 기본 케이스와 초기화에 -1 케이스가 사용됩니다.

re2c:상태:다음 라벨 = 0;
때 사용 -f 여부를 제어하기 위해 활성화됩니다. YGETSTATE 블록 다음에
yy다음: 라벨 라인. 사용하는 대신 yy다음 일반적으로 구성을 사용할 수도 있습니다.
시작 레이블 특정 시작 레이블을 강제 실행하거나 기본값으로 yy0 시작 레이블로.
전용 라벨을 사용하는 대신 라벨을 분리하는 것이 더 나은 경우가 많습니다. YGETSTATE
실제 스캐너 코드에서 코드를 배치하여 /*!getstate:re2c*/ 댓글.

re2c:cgoto:임계값 = 9;
인셀덤 공식 판매점인 -g 활성 상태입니다. 이 값은 트리거하는 복잡성 임계값을 지정합니다.
중첩된 if 및 결정 비트 필드를 사용하는 대신 점프 테이블 생성. NS
임계값은 모든 경우에 필요한 경우 계산된 추정치와 비교됩니다.
사용된 비트맵은 임계값을 2로 나눕니다.

re2c:yych:변환 = 0;
입력이 부호 있는 문자를 사용하고 -s or -b 스위치는 유효합니다 re2c
자동으로 서명되지 않은 문자 유형으로 변환할 수 있습니다.
내부 단일 문자에 필요합니다. 이 설정이 XNUMX이거나 비어 있는 경우
문자열 변환이 비활성화되었습니다. XNUMX이 아닌 숫자를 사용하면 변환이 수행됩니다.
YYCTYPE. 해당 값이 inplace 구성에 의해 제공되는 경우
사용 된. 그렇지 않으면 될 것입니다 (YYC타입) 해당 구성에 대한 변경 사항은
더 오래 가능합니다. 이 설정이 문자열이면 중괄호를 지정해야 합니다. 지금
귀하의 입력이 이륜 전차 * 버퍼이고 위에서 언급한 스위치를 사용하고 있습니다.
당신은 설정할 수 있습니다 YYCTYPE부호 이륜 전차 이 설정을 1 또는 (서명되지 않은
숯).

re2c:정의:YYCONDTYPE = YYCONDTYPE ;
조건 지원에 사용되는 열거 -c 방법.

re2c:정의:YYCTXMARKER = YYCTX마커 ;
정의를 덮어쓸 수 있습니다. YYCTX마커 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:정의:YYCTYPE = YYCTYPE ;
정의를 덮어쓸 수 있습니다. YYCTYPE 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:정의:YYCURSOR = YYCURSOR ;
정의를 덮어쓸 수 있습니다. YYCURSOR 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:정의:YYDEBUG = 이데버그 ;
정의를 덮어쓸 수 있습니다. 이데버그 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:정의:YYGETCONDITION = YYGET 조건 ;
대체 YYGET 조건. 기본적으로 재2C 다음에 중괄호를 생성합니다.
YYGET 조건. 세트 re2c:define:YYGETCONDITION:네이키드 중괄호를 생략하려면 XNUMX이 아닌 값으로 설정합니다.

re2c:define:YYGETCONDITION:네이키드 = 0;
다음 중괄호를 제어합니다. YYGET 조건. XNUMX이면 중괄호가 생략됩니다. XNUMX이 아닌 경우
중괄호가 생성됩니다.

re2c:정의:YYSETCONDITION = YYSET 조건 ;
대체 YYSET 조건. 기본적으로 재2C 에서 인수를 생성합니다.
중괄호 및 세미콜론 뒤에 YYSET 조건. 필요한 경우 YYSET 조건 an
호출이 아닌 임의의 명령문, 설정 re2c:define:YYSETCONDITION:네이키드
XNUMX이 아닌 사용 re2c:정의:YYSETCONDITION@cond 내부의 형식 매개변수를 나타내기 위해
of YYSET 조건 몸.

re2c:정의:YYSETCONDITION@cond = @@ ;
내부에서 이 텍스트의 모든 발생 YYSET 조건 로 대체됩니다
실제 주장.

re2c:define:YYSETCONDITION:네이키드 = 0;
중괄호와 세미콜론 뒤에 있는 인수를 제어합니다. YYSET 조건. XNUMX이면 둘 다
arument와 세미콜론은 생략합니다. XNUMX이 아니면 인수와 세미콜론이 모두
생성.

re2c:정의:YYGETSTATE = YGETSTATE ;
대체 YGETSTATE. 기본적으로 재2C 다음에 중괄호를 생성합니다.
YGETSTATE. 세트 re2c:define:YYGETSTATE:네이키드 중괄호를 생략하려면 XNUMX이 아닌 값으로 설정합니다.

re2c:define:YYGETSTATE:네이키드 = 0;
다음 중괄호를 제어합니다. YGETSTATE. XNUMX이면 중괄호가 생략됩니다. XNUMX이 아닌 경우 중괄호
생성됩니다.

re2c:정의:YYSETSTATE = YYSETSTATE ;
대체 YYSETSTATE. 기본적으로 재2C 중괄호로 인수를 생성합니다.
그리고 뒤에 세미콜론 YYSETSTATE. 필요한 경우 YYSETSTATE 임의의
호출보다는 진술, 설정 re2c:define:YYSETSTATE:네이키드 XNUMX이 아닌 값으로 사용
re2c:정의:YYSETSTATE@cond 내부의 형식 매개 변수를 나타내기 위해 YYSETSTATE 몸.

re2c:정의:YYSETSTATE@상태 = @@ ;
내부에서 이 텍스트의 모든 발생 YYSETSTATE 실제로 대체됩니다
논의.

re2c:define:YYSETSTATE:네이키드 = 0;
중괄호와 세미콜론 뒤에 있는 인수를 제어합니다. YYSETSTATE. XNUMX이면 둘 다
및 세미콜론은 생략됩니다. XNUMX이 아니면 인수와 세미콜론이 모두 생성됩니다.

re2c:정의:YYLIMIT = YYLIMIT ;
정의를 덮어쓸 수 있습니다. YYLIMIT 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:정의:YYMARKER = 와이마커 ;
정의를 덮어쓸 수 있습니다. 와이마커 따라서 설정하여 이를 방지합니다.
값을 필요한 실제 코드로 변경합니다.

re2c:레이블:yyFillLabel = yyFillLabel ;
레이블 이름을 덮어쓸 수 있습니다. yyFillLabel.

re2c:레이블:yy다음 = yy다음 ;
레이블 이름을 덮어쓸 수 있습니다. yy다음.

re2c:변수:yyaccept = 응수락해;
변수 이름을 덮어쓸 수 있습니다. 응응응.

re2c:변수:yybm = yybm ;
변수 이름을 덮어쓸 수 있습니다. yybm.

re2c:변수:yych = 이야 ;
변수 이름을 덮어쓸 수 있습니다. 이야.

re2c:변수:yyctable = yyctable ;
둘 다 -c 그리고 -g 그때 활성 재2C 이 변수를 사용하여 정적
점프 테이블 YYGET 조건.

re2c:변수:yystable = 안정적인 ;
더 이상 사용되지 않습니다.

re2c:변수:yytarget = yy목표 ;
변수 이름을 덮어쓸 수 있습니다. yy목표.

정규병 표현
"foo" 리터럴 문자열 "foo". ANSI-C 이스케이프 시퀀스를 사용할 수 있습니다.

'푸' 리터럴 문자열 "foo" (문자 [a-zA-Z]는 대소문자를 구분하지 않음). ANSI-C 이스케이프
시퀀스를 사용할 수 있습니다.

[엑시즈] 캐릭터 클래스; 이 경우 정규식은 다음 중 하나와 일치합니다. x, yz.

[abj-oZ]
범위가 있는 문자 클래스 성냥 a, b, 의 모든 편지 j 을 통하여 o or Z.

[^클래스]
반전 문자 클래스.

r \ s 일치 r 그렇지 않다 s. r 그리고 s 정규 표현식이어야 합니다.
캐릭터 클래스로 표현된다.

r* XNUMX개 이상의 발생 r.

r+ 하나 이상의 발생 r.

r? optional r.

(R) r; 괄호는 우선 순위를 재정의하는 데 사용됩니다.

r s r 다음 s (연쇄).

r | sr or s (대안).

r / s r 그러나 뒤에 오는 경우에만 s. 그 주 s 일치하는 텍스트의 일부가 아닙니다.
이러한 유형의 정규 표현식을 "후행 컨텍스트"라고 합니다. 후행 컨텍스트는
명명된 정의의 일부가 아니라 규칙의 끝일 뿐입니다.

r{n} 성냥 r 정확하게 n 시간.

r{n,} 성냥 r 적어도 n 시간.

r{n,m} 성냥 r 적어도 n 몇 번이지만 그 이상은 아닙니다. m 시간.

. 개행 문자를 제외한 모든 문자와 일치합니다.

name 에 의해 지정된 명명된 정의와 일치합니다. name 오직 -F 꺼져 있습니다. 만약에 -F 활성
그러면 큰따옴표로 묶인 것처럼 작동하고 문자열과 일치합니다.
"이름".

문자 클래스 및 문자열 리터럴은 XNUMX진수 또는 XNUMX진수 문자를 포함할 수 있습니다.
정의 및 다음 이스케이프 시퀀스 세트: \a, \b, \f, \n, \r, \t, \v, \\.
XNUMX진수 문자는 백슬래시와 XNUMX개의 XNUMX진수로 정의됩니다(예: \ 377).
0에서 0xFF까지의 XNUMX진수 문자는 소문자 백슬래시로 정의됩니다. x
XNUMX진수(예: \x12). 0x100에서 0xFFFF까지의 XNUMX진수 문자는 다음과 같이 정의됩니다.
백슬래시, 소문자 \u 또는 대문자 \X 및 XNUMX개의 XNUMX진수(예:
\ u1234). 0x10000에서 0xFFFFffff까지의 XNUMX진수 문자는 백슬래시로 정의됩니다.
대문자 \U 및 XNUMX자리 XNUMX진수(예: \U12345678).

이식 가능한 유일한 "모든" 규칙은 기본 규칙입니다. *.

스캐너 세이프가드가 저장 가능


-f 플래그가 지정되고, 재2C 현재 상태를 저장할 수 있는 스캐너를 생성하고,
호출자에게 반환하고 나중에 중단된 곳에서 정확히 작업을 다시 시작합니다.

의 기본 작업 재2C 스캐너가 추가 입력을 요청하는 "당기기" 모델입니다.
필요할 때마다. 그러나 이 작동 모드는 스캐너가
"소유자"는 구문 분석 루프이며 항상 편리한 것은 아닙니다.

일반적으로 스트림에서 스캐너 앞에 전처리기가 있거나 이를 위해
다른 절차적 데이터 소스와 상관없이 스캐너는 다음을 제외하고 더 많은 데이터를 "요청"할 수 없습니다
스캐너와 소스는 모두 별도의 스레드에 있습니다.

The -f 플래그는 바로 이 상황에 유용합니다. 사용자가 다음에서 작동하는 스캐너를 설계할 수 있습니다.
"푸시" 모델, 즉 데이터가 청크 단위로 스캐너에 공급되는 경우. 스캐너가
소비할 데이터가 부족하면 상태를 저장하고 호출자에게 반환합니다. 언제 더
입력 데이터가 스캐너에 공급되면 중단된 위치에서 정확히 작업을 재개합니다.

"당기기" 모델과 비교하여 필요한 변경 사항:

· 사용자는 매크로를 제공해야 합니다. YYSETSTATE () 그리고 YGETSTATE (상태).

· -f 옵션은 선언을 금지합니다. 이야 그리고 응응응. 따라서 사용자는 다음을 선언해야 합니다.
이것들. 또한 사용자는 이를 저장하고 복원해야 합니다. 예에서
example/push_model/push.re 이들은 (C++) 클래스의 필드로 선언됩니다.
스캐너는 메서드이므로 명시적으로 저장/복원할 필요가 없습니다. C의 경우 그들은
예를 들어 매개변수로 전달된 구조에서 필드를 선택하는 매크로를 만들 수 있습니다.
또는 로컬 변수로 선언하여 다음과 같이 저장할 수 있습니다. YYFILL (엔) 그 때
반환하기로 결정하고 함수 진입 시 복원됩니다. 또한, 더 많을 수 있습니다
상태를 저장하는 데 효율적입니다. YYFILL (엔) 때문에 YYSETSTATE (상태) 불렀다.
무조건. YYFILL (엔) 그러나 얻지 않는다 상태 매개변수로
지역 변수에 상태를 저장하려면 YYSETSTATE (상태).

· 수정하다 YYFILL (엔) 더 많은 입력이 필요한 경우 (호출하는 함수에서) 반환합니다.

· 추가 입력이 필요한지 인식하고 적절하게 응답하도록 호출자를 수정합니다.

· 생성된 코드에는 마지막 상태를 복원하는 데 사용되는 스위치 블록이 포함됩니다.
corspoding 뒤에 점프하여 YYFILL (엔) 전화. 이 코드는 자동으로 생성됩니다.
첫 번째 에필로그에서 /*!re2c */ 블록. 생성을 트리거하는 것이 가능합니다.
YGETSTATE () 를 배치하여 더 일찍 차단 /*!getstate:re2c*/ 논평. 이것은 특히
스캐너 코드가 루프 안에 래핑되어야 할 때 유용합니다.

참조하시기 바랍니다 example/push_model/push.re "푸시" 모델 스캐너용. 생성된 코드는
내부 구성을 사용하여 조정 상태:중단 그리고 상태:다음 레이블.

스캐너 세이프가드가 조건 고객지원


다음을 사용할 때 정규식 앞에 조건 이름 목록을 추가할 수 있습니다. -c
스위치. 이 경우 재2C 각 조건에 대한 스캐너 블록을 생성합니다. 어디에 각각
생성된 블록에는 자체 전제 조건이 있습니다. 전제 조건은 인터페이스에 의해 제공됩니다.
밝히다 YYGET조건() 다음 유형이어야 합니다. YYCONDTYPE.

두 가지 특수 규칙 유형이 있습니다. 첫째, 조건의 규칙 <*> 모두 병합됩니다
조건(해당 조건의 다른 규칙보다 우선 순위가 낮음). 그리고
두 번째로 빈 조건 목록을 사용하면 다음을 포함하지 않는 코드 블록을 제공할 수 있습니다.
스캐너 부분. 정규 표현식을 허용하지 않는다는 의미입니다. 조건 값
이 특수 블록을 참조하는 것은 항상 열거 값이 0인 블록입니다.
이 특수 규칙의 코드는 스캐너를 초기화하는 데 사용할 수 있습니다. 그것은 전혀
이러한 규칙이 필요하지만 때로는 전용
초기화되지 않은 상태.

비어 있지 않은 규칙을 사용하면 새 조건을 지정할 수 있으므로 전환 규칙이 됩니다.
정의에 대한 호출을 생성하는 것 외에도 YYSETCONDITION 다른 특별한 코드는 없습니다
생성.

코드 블록에 코드를 추가할 수 있는 또 다른 종류의 특수 규칙이 있습니다.
특정 조건 세트의 모든 규칙 또는 모든 코드 블록에 대한 모든 규칙. 이것은 될 수있다
일부 작업이 규칙 간에 공통적일 때 유용합니다. 예를 들어 이것은 저장하는 데 사용할 수 있습니다.
스캔한 문자열의 길이입니다. 이러한 특수 설정 규칙은 느낌표로 시작합니다.
다음 중 하나의 조건 목록 <! 상태, ... > 또는 별 . 언제 재2C
상태에 설정 규칙과 별표 설정이 없는 규칙에 대한 코드를 생성합니다.
규칙이 있는 경우 해당 코드가 설정 코드로 사용됩니다.

인코딩


재2C 다음 인코딩을 지원합니다. ASCII(기본값), EBCDIC(-e), UCS-2(-w), UTF-16
(-x), UTF-32(-u) 및 UTF-8(-8). 내부 구성 참조 re2c:플래그.

인코딩에 대해 이야기할 때 다음 개념을 명확히 해야 합니다. 코드 포인트는
단일 인코딩 기호를 나타내는 추상 번호. 코드 단위는 가장 작은 단위입니다.
인코딩된 텍스트에 사용되는 메모리(입력의 한 문자에 해당)
개울). 에 따라 단일 코드 포인트를 나타내기 위해 하나 이상의 코드 단위가 필요할 수 있습니다.
인코딩에. 고정 길이 인코딩에서 각 코드 포인트는 동일하게 표현됩니다.
코드 단위의 수. 가변 길이 인코딩에서 다른 코드 포인트는
다른 수의 코드 단위로 표시됩니다.

ASCII 고정 길이 인코딩입니다. 코드 공간은 0에서 100까지의 0xXNUMX 코드 포인트를 포함합니다.
0xFF. 하나의 코드 포인트는 정확히 하나의 1바이트 코드 단위로 표현됩니다.
코드 포인트와 동일한 값. 크기 YYCTYPE 1바이트여야 합니다.

EBCDIC 고정 길이 인코딩입니다. 코드 공간은 0에서 100까지의 0xXNUMX 코드 포인트를 포함합니다.
0xFF. 하나의 코드 포인트는 정확히 하나의 1바이트 코드 단위로 표현됩니다.
코드 포인트와 동일한 값. 크기 YYCTYPE 1바이트여야 합니다.

UCS-2 고정 길이 인코딩입니다. 코드 공간은 0에서 10000까지의 0xXNUMX 코드 포인트를 포함합니다.
0xFFFF. 하나의 코드 포인트는 정확히 하나의 2바이트 코드 단위로 표현됩니다.
코드 포인트와 동일한 값. 크기 YYCTYPE 2바이트여야 합니다.

UTF-16 가변 길이 인코딩입니다. 코드 공간에는 모든 유니코드 코드 포인트가 포함됩니다.
0에서 0xD7FF까지 및 0xE000에서 0x10FFFF까지. 하나의 코드 포인트는
하나 또는 두 개의 2바이트 코드 단위. 크기 YYCTYPE 2바이트여야 합니다.

UTF-32 고정 길이 인코딩입니다. 코드 공간에는 0부터 모든 유니코드 코드 포인트가 포함됩니다.
0xD7FF로 그리고 0xE000에서 0x10FFFF로. 하나의 코드 포인트는 정확히
하나의 4바이트 코드 단위. 크기 YYCTYPE 4바이트여야 합니다.

UTF-8 가변 길이 인코딩입니다. 코드 공간에는 모든 유니코드 코드 포인트가 포함됩니다.
0에서 0xD7FF까지 및 0xE000에서 0x10FFFF까지. 하나의 코드 포인트는
1, XNUMX, XNUMX 또는 XNUMX개의 XNUMX바이트 코드 단위 시퀀스. 크기 YYCTYPE 1이어야합니다
바이트.

유니코드에서 0xD800에서 0xDFFF(대리) 범위의 값은 유효한 유니코드 코드가 아닙니다.
포인트, 유니코드 코드 포인트에 매핑되는 코드 단위의 인코딩된 시퀀스
범위 0xD800-0xDFFF는 형식이 잘못되었습니다. 사용자가 제어하는 ​​방법 재2C 그러한 불량품을 취급합니다
시퀀스 --인코딩 정책 깃발(참조 옵션 전체 설명을 위해).

일부 인코딩의 경우 유효한 인코딩된 스트림에서 발생하지 않는 코드 단위가 있습니다(예:
UTF-0의 8xFF 바이트). 생성된 스캐너가 잘못된 입력을 확인해야 하는 경우 유일한 true
그렇게하는 방법은 기본 규칙을 사용하는 것입니다 *. 전체 범위 규칙에 유의하십시오. [^] 유효하지 않은 것을 잡지 않을 것입니다
가변 길이 인코딩이 사용되는 경우 코드 단위([^] "모든 유효한 코드 포인트"를 의미하지만,
기본 규칙 * "가능한 모든 코드 단위"를 의미함).

일반적인 입력 API


재2C 일반적으로 포인터와 같은 프리미티브를 사용하여 입력에 대해 작동합니다. YYCURSOR, 와이마커,
YYCTX마커 그리고 YYLIMIT.

일반 입력 API( --입력 관습 스위치) 입력을 사용자 정의할 수 있습니다.
작업. 이 모드에서는 재2C 입력에 대한 모든 작업을 다음과 같이 표현합니다.
다음 프리미티브:

┌───────────────────────────────────────────────────── ──┐
YYPEK () │ 현재 입력 문자 가져오기 │
├───────────────────────────────────────────────────── ──┤
와이스킵 () │ 다음 문자로 이동 │
├───────────────────────────────────────────────────── ──┤
YY백업 () │ 백업 현재 입력 위치 │
├───────────────────────────────────────────────────── ──┤
YY백업PCTX () │ 백업 현재 입력 위치 │
│ │ 후행 컨텍스트 │
├───────────────────────────────────────────────────── ──┤
이리스토어 () │ 현재 입력 위치 복원 │
├───────────────────────────────────────────────────── ──┤
YYRESTORECTX () │ 현재 입력 위치 복원 │
│ │ 후행 컨텍스트 │
├───────────────────────────────────────────────────── ──┤
일레스탄 (엔) │ 미만인지 확인 n 입력 │
│ │ 문자가 남음 │
└───────────────────────────────────────────────────── ──┘

몇 가지 예를 제공하는 몇 가지 유용한 링크:

1. http://skvadrik.github.io/aleph_null/posts/re2c/2015-01-13-input_model.html

2. http://skvadrik.github.io/aleph_null/posts/re2c/2015-01-15-input_model_custom.html

onworks.net 서비스를 사용하여 re2c 온라인 사용


무료 서버 및 워크스테이션

Windows 및 Linux 앱 다운로드

Linux 명령

Ad




×
광고
❤️여기에서 쇼핑, 예약, 구매하세요. 비용이 들지 않아 서비스를 무료로 유지하는 데 도움이 됩니다.