To jest polecenie fst-compiler-utf8, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z naszych wielu darmowych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online Windows lub emulator online MAC OS
PROGRAM:
IMIĘ
fst-compiler, fst-compiler-utf8 - Dwa kompilatory programów SFST
STRESZCZENIE
kompilator-fst plik gramatyczny [ plik wyjściowy ]
fst-kompilator-utf8 plik gramatyczny [ plik wyjściowy ]
OPCJE
-c Przechowuj przetwornik w kompaktowym formacie, którego używa fst-infl2.
-l Przechowuj przetwornik w formacie lowmem.
-s Powierzchnia przełączania i warstwa analityczna przetwornika. Musisz użyć tego przełącznika w
aby użyć pierwszy napływ (fst-infl2, fst-infl3) do generowania, a nie do analizy.
OPIS
kompilator-fst jest kompilatorem programów dla przetworników skończonych. Generuje zminimalizowane
Przetwornik skończony, który może być używany z pierwszy dzień, Fst-infl, pierwszy druk, pierwsze porównanie,
parsowanie fst, i fst-krata. Kompaktowa reprezentacja przetwornika, która jest generowana za pomocą
flaga -c jest obsługiwana przez fst-infl2, Fst-pociąg, i pierwszy mecz. Wydajna pamięć
reprezentacja przetwornika, która jest generowana z flagą -l, jest obsługiwana tylko przez pierwszy-
wpływ3.
Pierwszym argumentem programu jest nazwa pliku zawierającego program przetwornika.
Język programowania jest opisany poniżej. Drugi argument to nazwa pliku
do którego wynikowy przetwornik zostanie zapisany w postaci binarnej. Jeśli drugim argumentem jest
brak, dane wyjściowe zostaną zapisane do wyjście.
fst-kompilator-utf8 różni się od kompilator-fst tylko w kodowaniu znaków. pierwszy-kompilator-
utf8 obsługuje kodowanie UTF8 plików źródłowych, podczas gdy kompilator-fst ma być używany do
8-bitowe kody znakowe, takie jak latin1, które są rozszerzeniem kodu ASCII. Informacja
informacje o kodowaniu są przechowywane w plikach przetwornika i wykorzystywane przez inne programy SFST.
FILE FORMATY
Program przetwornika składa się z (opcjonalnej) sekwencji alfabet i zmienna
definicje, po których następuje pojedyncza transduktor wyrażenie co definiuje wynik
transduktor.
Alfabet
Definicja alfabetu składa się ze słowa kluczowego ALFABET, po którym następuje = i jakiegoś przetwornika
wyrażenie np
ALFABET = [az]:[AZ]
To polecenie redefiniuje alfabet jako zestaw par symboli występujących na
przejścia przetwornika. Wystąpienia operatorów dwupoziomowych, operatorów negacji i
okresy niecytowane muszą być zawsze poprzedzone definicją alfabetu.
Zmienne
Istnieją dwa różne typy zmiennych. symbol zestaw zmienne są ujęte haszem
znaki (#) i przyjmuj sekwencje symboli (patrz poniżej) jako wartości:
#UC# = AZ
#LC# = az
Transduktor zmienne są otoczone znakami dolara i przyjmują wyrażenia przetwornika jako
wartości:
$MAP$ = [az]:[AZ]+
$MAPA$ = [#LC#]:[#UC#]+
Zmienne, których nazwa zaczyna się od symbolu `=' są specjalne umowa zmienne. Jeżeli
zmienna zgodności występuje więcej niż raz w wyrażeniu przetwornika, zawsze będzie miała
tę samą wartość. Rozważ następujący program przetwornika:
$=1$ = [abc]
$=1$ X $=1$
Przetwornik wyniku rozpoznaje ciągi aXa, bXb i cXc. Tylko przetworniki acykliczne
(tj. przetworniki ze skończonym zestawem odwzorowań strun) mogą być przypisane do uzgodnienia
zmiennych.
Symbolika
Symbol to albo
- pojedynczy znak jak A s 5,
- cytowany znak, taki jak \* lub \_,
- symbol wieloznakowy, taki jak lub (co jest zawsze
ujęty w nawiasy kątowe) lub
- ukośnik odwrotny, po którym następuje liczba, która jest kodem numerycznym
wyznaczony znak
- symbol zerowy <>.
Sekwencja symboli
Sekwencja symboli to sekwencja znaków, wieloznakowe symbole i znak
zakresy, np. az \. .
zakres symboli
Zakres symboli to albo
- pojedynczy symbol
- sekwencja symboli ujęta w nawiasy kwadratowe, takie jak [A-Za-z] lub
- sekwencja symboli zaczynająca się od ^ i ujęta w nawiasy kwadratowe, takie jak [^A-Za-z]
(oznaczający dopełnienie [a-zA-Z]) lub
- kropka (która reprezentuje dowolny symbol z alfabetu)
Wyrażenia przetwornika
Ekspresja przetwornika (TE) jest rekurencyjnie definiowana w następujący sposób:
- Para dwóch zakresów symboli oddzielonych dwukropkiem to TE.
[az]:[aZ]
- Pojedynczy zakres symboli, taki jak [az], to TE.
Jest to krótka forma dla [az]:[az].
- Dwie sekwencje symboli ujęte w nawiasy klamrowe i oddzielone dwukropkiem to
jedli. {a[bc]}:{def} jest równoważne a:db:e <>:f | a:dc:e <>:f.
- XY jest TE, jeśli X i Y są TE.
(Puste są ignorowane, chyba że są cytowane).
- (X) jest TE, jeśli X jest TE.
- X op to TE to X to TE, a op to albo * (operator gwiazdy Kleene'a), +
(operator plusa Kleine) lub ? (operator opcjonalności)
-op X to TE to X to TE, a op to albo ! (operator negacji), ^
(operator ekstrakcji języka docelowego), _ (operator ekstrakcji języka źródłowego) lub ^_
(operator przełącznika źródłowego i docelowego).
- X op Y to TE to X i Y to TE, a op to albo & (spójnik
operator), | (operator alternatywy), || (operator kompozycji) lub - (odejmowanie
operator)
- L x op y R jest TE, jeśli L i R są TE, x i y są zakresami symboli i
op to albo => (ograniczenie dwupoziomowe), <= (przymus dwupoziomowy) albo <=> (ograniczenie dwupoziomowe
ograniczenia i przymusu).
- X op L__R jest TE, jeśli X, L i R są TE, a op to ^-> (w górę
zastąpienie), _-> (zastąpienie w dół), /-> (zastąpienie w lewo) lub \-> (w prawo
wymiana). Ponadto L i R muszą zdefiniować automaty (tj. które mapują ich ciągi)
na siebie). Operatory te odpowiadają operatorom zamiany Karttunena. Jeśli
po strzałce następuje znak zapytania (?), zamiana staje się opcjonalna.
- X << l jest TE jeśli X jest TE, a l jest jedną z postaci
a lub postać a:b, gdzie aib są pojedynczymi znakami lub symbolami. Wynik jest
przetwornik, w którym l zostało swobodnie wstawione do X. Na przykład przetwornik ab << c to
odpowiednik c*ac*bc*.
- X op Y L1__R2, ... , LN__RN jest TE jeśli X,Y, L1 do LN i R1
poprzez RN to TE, a op to albo => (ogólne ograniczenie), <= (ogólny przymus), ^=>
(ogólne ograniczenie powierzchni), ^<= (ogólna koercja powierzchniowa), ^<=> (ogólna powierzchnia
ograniczenie i przymus), _=> (ogólne ograniczenie głębokie), _<= (ogólny przymus głęboki),
_<=> (ogólne głębokie ograniczenie i przymus). (Te operatory zostały wdrożone po
sugestia Anssi Yli-Jyry.)
- "fname" to TE. Kompilator odczytuje plik o nazwie fname i obraca
do przetwornika postaci linia1|linia2|linia3|... gdzie liniax jest x-tym wierszem
plik. Wszystkie znaki inne niż : i \ są interpretowane dosłownie (tzn. nie jako
operatorów). Ten TE jest zwykle używany np. do odczytywania listy morfemów z pliku.
- " " to TE. Kompilator odczytuje wstępnie skompilowany przetwornik z
plik o nazwie fname. Ten
Dalsze funkcje
Komentarze zaczynają się od symbolu % i rozciągają się do końca wiersza. Puste miejsca są ignorowane
chyba że są cytowane. Wyrażenia kończą się na końcu wiersza, chyba że koniec wiersza
jest poprzedzony odwrotnym ukośnikiem. Komenda
#include "fname"
może być użyty do wstawienia kodu źródłowego z pliku o nazwie fname. Komenda
RE >> "fname"
przechowuje wyrażenie regularne RE w pliku fname. Komenda
#użyj hopcrofta
mówi kompilatorowi, aby od teraz używał algorytmu minimalizacji Hopcrofta, i
#Zastosowanie domyślne
przełącza z powrotem do domyślnego algorytmu minimalizacji (Brzozowski). Komenda
PRZYKŁAD
Oto przykład prostego programu przetwornika. Zakładając, że plik „adj-stems”
zawiera dwie linie
łatwo
późno
duży
ten przetwornik poprawnie przeanalizuje formy przymiotnikowe łatwe, łatwiejsze, najłatwiejsze i spóźnione,
później i najpóźniej.
ALFABET = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<> e)
$R2$ = e<=><> ( :<> e)
$R$ = $R$ i $R2$
$Pnie$ = "przym-pnie"
$S$ = $Pędy$ ( :<>| :{er}| :{est})
$S$ || $R$
EXIT STATUS
kompilator-fst zwraca 0, chyba że wystąpi jakiś błąd.
Użyj fst-compiler-utf8 online za pomocą usług onworks.net