이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 fst-compiler 명령입니다.
프로그램:
이름
fst-compiler, fst-compiler-utf8 - SFST 프로그램용 컴파일러 XNUMX개
개요
fst 컴파일러 문법 파일 [ 결과물 파일 ]
fst-컴파일러-utf8 문법 파일 [ 결과물 파일 ]
옵션
-c fst-infl2에서 사용하는 컴팩트 형식으로 변환기를 저장합니다.
-l 변환기를 lowmem 형식으로 저장합니다.
-s 변환기의 표면과 분석 레이어를 전환합니다. 이 스위치를 사용해야 합니다.
사용하는 순서 fst-infl (fst-infl2, fst-infl3) 분석보다는 생성을 위해.
기술
fst 컴파일러 유한 상태 변환기 프로그램용 컴파일러입니다. 최소화된 결과를 생성합니다.
다음과 함께 사용할 수 있는 유한 상태 변환기 첫 번째 아침, fst-infl, 첫 번째 인쇄, 첫 번째 비교,
첫 번째 구문 분석, 과 첫 번째 격자. 다음으로 생성된 컴팩트 변환기 표현
-c 플래그는 다음에서 지원됩니다. fst-infl2, 첫 번째 기차, 과 첫 번째 일치. 메모리 효율성
-l 플래그로 생성된 변환기 표현은 다음에서만 지원됩니다. 처음-
infl3.
첫 번째 프로그램 인수는 변환기 프로그램을 포함하는 파일의 이름입니다.
프로그래밍 언어는 아래에 설명되어 있습니다. 두 번째 인수는 파일 이름입니다.
결과 변환기는 이진 형식으로 기록됩니다. 두 번째 인수가 다음과 같은 경우
누락된 경우 출력은 다음 위치에 기록됩니다. 표준 출력.
fst-컴파일러-utf8 ~와 다르다 fst 컴파일러 문자 인코딩에서만 가능합니다. fst-컴파일러-
utf8 소스 파일의 UTF8 인코딩을 지원하는 반면 fst 컴파일러 에 사용됩니다
ASCII 코드의 확장인 latin8과 같은 1비트 문자 코드입니다. 정보
인코딩 정보는 변환기 파일에 저장되고 다른 SFST 프로그램에서 사용됩니다.
FILE 형식
변환기 프로그램은 다음의 (선택적) 시퀀스로 구성됩니다. 알파벳 과 변수
정의 다음에 단일 변환기 표현 결과를 정의하는 것
변환기.
알파벳
알파벳 정의는 키워드 ALPHABET과 그 뒤에 = 및 일부 변환기로 구성됩니다.
표현 예:
알파벳 = [az]:[AZ]
이 명령은 알파벳을 문자 쌍의 집합으로 재정의합니다.
변환기의 전환. XNUMX단계 연산자, 부정 연산자 및
따옴표가 없는 마침표 앞에는 항상 알파벳 정의가 와야 합니다.
변수
변수에는 두 가지 유형이 있습니다. 상징 세트 변수 해시로 둘러싸여 있습니다
기호(#) 및 기호 시퀀스(아래 참조)를 값으로 사용합니다.
#UC# = AZ
#LC# = az
변환기 변수 달러 기호로 묶여 있고 변환기 표현을 다음과 같이 취합니다.
값 :
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
이름이 '=' 기호로 시작하는 변수는 특별합니다. 협정 변수. 만약
일치 변수가 변환기 표현식에서 두 번 이상 발생하면 항상 다음과 같습니다.
같은 값. 다음 변환기 프로그램을 고려하십시오.
$=1$ = [abc]
$=1$ X $=1$
결과 변환기는 문자열 aXa, bXb 및 cXc를 인식합니다. 비순환 변환기만 해당
(즉, 유한한 문자열 매핑 세트가 있는 변환기)를 합의에 할당할 수 있습니다.
변수.
기호
기호는 다음 중 하나입니다.
- A s 5와 같은 단일 문자,
- \* 또는 \_와 같은 인용 문자,
- 다음과 같은 다중 문자 기호 또는 (항상 그렇습니다
꺾쇠괄호로 묶음) 또는
- 백슬래시 뒤에 숫자가 옵니다. 이는 해당 항목의 숫자 코드입니다.
지정문자
- 널 기호 <>.
기호 순서
기호 시퀀스는 문자, 다중 문자 기호 및 문자의 시퀀스입니다.
범위(예: az \. .
기호 범위
기호 범위는 다음 중 하나입니다.
- 단일 기호
- [A-Za-z]와 같이 대괄호로 묶인 기호 시퀀스 또는
- ^로 시작하고 [^A-Za-z]와 같이 대괄호로 묶인 기호 시퀀스
([a-zA-Z]의 보수 지정) 또는
- 마침표(알파벳의 기호를 나타냄)
변환기 표현
변환기 표현식(TE)은 다음과 같이 재귀적으로 정의됩니다.
- 콜론으로 구분된 두 기호 범위의 쌍은 TE입니다.
[az]:[aZ]
- [az]와 같은 단일 기호 범위는 TE입니다.
[az]:[az]의 약식입니다.
- 중괄호로 묶이고 콜론으로 구분된 두 개의 기호 시퀀스는
먹었다. {a[bc]}:{def}는 a:db:e <>:f | a:dc:e <>:f.
- X와 Y가 TE이면 XY는 TE입니다.
(인용되지 않는 한 공백은 무시됩니다.)
- X가 TE이면 (X)는 TE입니다.
- X op는 TE이고 X는 TE이고 op는 *(Kleene의 별 연산자), +
(Kleene의 플러스 연산자), 또는 ? (선택 연산자)
- op X는 TE이고 X는 TE이고 op는 둘 중 하나입니다! (부정 연산자), ^
(대상 언어 추출 연산자), _(원어 언어 추출 연산자) 또는 ^_
(소스 및 대상 스위치 연산자).
- X op Y는 TE이고 X이고 Y는 TE이고 op는 &(접속사)
연산자), | (분리 연산자), || (합성 연산자) 또는 - (뺄셈
운영자)
- L x op y R은 L과 R이 TE이고 x와 y가 기호 범위이고
op는 =>(XNUMX단계 제한), <=(XNUMX단계 강제) 또는 <=>(XNUMX단계 제한) 중 하나입니다.
제한과 강요).
- X, L 및 R이 TE이고 op가 ^->(위쪽)인 경우 X op L__R은 TE입니다.
교체), _->(하향 교체), /->(왼쪽 교체) 또는 \->(오른쪽 교체)
대사). 게다가 L과 R은 오토마타(즉, 문자열을 매핑하는 오토마타)를 정의해야 합니다.
자신에게). 이러한 연산자는 Karttunen의 대체 연산자에 해당합니다. 만약
화살표 뒤에 물음표(?)가 오면 교체는 선택 사항이 됩니다.
- X << l은 X가 TE이고 l이 다음 형식 중 하나인 경우 TE입니다.
a 또는 a:b 형식입니다. 여기서 a와 b는 단일 문자 또는 기호입니다. 결과는
l이 X에 자유롭게 삽입된 변환기. 예를 들어 변환기 ab << c는 다음과 같습니다.
c*ac*bc*와 같습니다.
- X op Y L1__R2, ..., LN__RN은 X,Y, L1부터 LN 및 R1인 경우 TE입니다.
RN을 통한 것은 TE이고 op는 =>(일반 제한), <=(일반 강제), ^=> 중 하나입니다.
(일반 표면 제한), ^<= (일반 표면 강제), ^<=> (일반 표면)
제한 및 강제), _=>(일반 심층 제한), _<=(일반 심층 강제),
_<=> (일반적인 깊은 제한 및 강제). (이 연산자는 다음과 같이 구현되었습니다.
Anssi Yli-Jyra의 제안.)
- "fname"은 TE입니다. 컴파일러는 fname이라는 파일을 읽고
line1|line2|line3|... 형식의 변환기로 변환합니다. 여기서 linex는 x번째 라인입니다.
파일. : 및 \를 제외한 모든 문자는 문자 그대로 해석됩니다(예: 다음과 같이 해석되지 않음).
연산자). 이 TE는 일반적으로 파일에서 형태소 목록을 읽는 데 사용됩니다.
- " "는 TE입니다. 컴파일러는 TE에서 미리 컴파일된 변환기를 읽습니다.
fname이라는 파일. 이것
추가 기능
주석은 % 기호로 시작하고 줄 끝까지 확장됩니다. 공백은 무시됩니다.
인용되지 않는 한. 줄 끝이 아닌 한 줄 끝에서 표현식이 종료됩니다.
앞에는 백슬래시가 옵니다. 명령
#include "fname"
fname이라는 파일에서 소스 코드를 삽입하는 데 사용할 수 있습니다. 명령
RE >> "fname"
정규식 RE를 fname 파일에 저장합니다. 명령
#홉크로프트를 사용하세요
이제부터 Hopcroft 최소화 알고리즘을 사용하도록 컴파일러에 지시합니다.
#기본값 사용
기본 최소화 알고리즘(Brzozowski)으로 다시 전환합니다. 명령
예
다음은 간단한 변환기 프로그램의 예입니다. 파일이 "adj-stems"라고 가정합니다.
두 줄이 포함되어 있습니다
쉽게
늦은
큰
이 변환기는 형용사 형태인 easy, easy, easy 및 late를 올바르게 분석합니다.
나중에, 그리고 최신.
알파벳 = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<> 전자)
$R2$ = e<=><> ( :<> 전자)
$R$ = $R$ & $R2$
$Stems$ = "조정-줄기"
$S$ = $줄기$ ( :<>| :{er}| :{동부 표준시})
$S$ || $R$
EXIT 지위
fst 컴파일러 오류가 발생하지 않는 한 0을 반환합니다.
onworks.net 서비스를 사용하여 온라인으로 fst-compiler를 사용하세요.