Dit is de opdracht fst-compiler die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
fst-compiler, fst-compiler-utf8 - Twee compilers voor SFST-programma's
KORTE INHOUD
fst-compiler grammatica-bestand [ output-bestand ]
fst-compiler-utf8 grammatica-bestand [ output-bestand ]
OPTIES
-c Bewaar de transducer in een compact formaat dat wordt gebruikt door fst-infl2.
-l Bewaar de transducer in lowmem-formaat.
-s Schakel oppervlak en analyselaag van de transducer. Deze schakelaar moet je gebruiken
bestelling te gebruiken eerste-infl (fst-infl2, eerste-infl3) voor generatie in plaats van analyse.
PRODUCTBESCHRIJVING
fst-compiler is een compiler voor finite-state transducerprogramma's. Het genereert een geminimaliseerd
eindige toestandstransducer die kan worden gebruikt met eerste morgen, eerste-infl, eerste afdruk, eerst vergelijken,
eerste-ontleden, en eerste rooster. De compacte transducerweergave die wordt gegenereerd met
de vlag -c wordt ondersteund door eerste-infl2, eerste trein, en eerste wedstrijd. De geheugen-efficiënt
transducerrepresentatie die wordt gegenereerd met de vlag -l, wordt alleen ondersteund door eerste-
infl3.
Het eerste programmaargument is de naam van een bestand dat het transducerprogramma bevat.
De programmeertaal wordt hieronder beschreven. Het tweede argument is de naam van het bestand
waarnaar de resulterende transducer in binaire vorm zal worden geschreven. Als een tweede argument is
ontbreekt, wordt er naar de uitvoer geschreven stevig.
fst-compiler-utf8 verschilt fst-compiler alleen in de tekencodering. fst-compiler-
utf8 ondersteunt UTF8-codering van de bronbestanden terwijl fst-compiler voor gebruikt moet worden
8-bits karaktercodes zoals latin1 die een uitbreiding zijn van de ASCII-code. Informatie
over de codering wordt opgeslagen in de transducerbestanden en gebruikt door de andere SFST-programma's.
FILE FORMATS
Een transducerprogramma bestaat uit een (optionele) reeks van alfabet en variabele
definities gevolgd door een enkele omzetter uitdrukking die het resultaat bepaalt
omvormer.
Alfabet
Een alfabetdefinitie bestaat uit het sleutelwoord ALPHABET gevolgd door = en een transducer
uitdrukking bijv
ALFABET = [az]:[AZ]
Deze opdracht herdefinieert het alfabet als de set symboolparen die voorkomt op de
overgangen van de transducer. Voorkomen van operatoren op twee niveaus, ontkenningsoperatoren en
niet-geciteerde perioden moeten altijd worden voorafgegaan door een alfabetische definitie.
Variabelen
Er zijn twee verschillende soorten variabelen. Symbool reeks variabelen zijn ingesloten door hasj
tekens (#) en neem symboolreeksen (zie hieronder) als waarden:
#UC# = AZ
#LC# = az
Omzetter variabelen worden omsloten door dollartekens en nemen transduceruitdrukkingen als
waarden:
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
Variabelen waarvan de naam begint met het symbool `=' zijn speciaal overeenkomst variabelen. Als een
Als de overeenkomstvariabele meer dan eens voorkomt in een transduceruitdrukking, zal dit altijd zo zijn
dezelfde waarde. Beschouw het volgende transducerprogramma:
$=1$ = [abc]
$=1$X$=1$
De resultaattransducer herkent de strings aXa, bXb en cXc. Alleen acyclische transducers
(dwz transducers met een eindige reeks stringtoewijzingen) kunnen worden toegewezen aan een overeenkomst
variabelen.
Symbolen
Een symbool is ofwel
- een enkel karakter zoals A s 5,
- een teken tussen aanhalingstekens zoals \* of \_,
- een symbool met meerdere tekens zoals of (wat altijd is
tussen punthaken) of
- een backslash gevolgd door een cijfer dat de numerieke code is van de
aangewezen karakter
- het nulsymbool <>.
Symbool volgorde
Een symboolreeks is een reeks tekens, symbolen met meerdere tekens en tekens
bereiken, bijv. az \. .
symbool bereik
Een symboolbereik is ofwel
- een enkel symbool
- een reeks symbolen tussen vierkante haken zoals [A-Za-z] of
- een reeks symbolen die begint met ^ en tussen vierkante haken staat, zoals [^A-Za-z]
(aanduiding van het complement van [a-zA-Z]) of
- de periode (die elk symbool uit het alfabet vertegenwoordigt)
Transducer uitdrukkingen
Een transducerexpressie (TE) wordt recursief als volgt gedefinieerd:
- Een paar van twee symboolbereiken gescheiden door een dubbele punt is een TE.
[az]:[aZ]
- Een enkel symboolbereik zoals [az] is een TE.
Het is een korte vorm voor [az]:[az].
- Twee symboolreeksen tussen accolades en gescheiden door een dubbele punt zijn
at. {a[bc]}:{def} is gelijk aan a:db:e <>:f | a:dc:e <>:f.
- XY is een TE als X en Y TE's zijn.
(Spaties worden genegeerd, tenzij ze tussen aanhalingstekens staan.)
- (X) is een TE als X een TE is.
- X op is een TE is X is een TE en op is ofwel * (Kleene's steroperator), +
(Kleene's plus-operator), of ? (optie-operator)
-op X is een TE is X is een TE en op is ofwel! (ontkenningsoperator), ^
(operator doeltaalextractie), _ (operator brontaalextractie) of ^_
(bron- en doelschakelaaroperator).
- X op Y is een TE is X en Y zijn TEs en op is of & (conjunctie
exploitant), | (disjunctie-operator), || (compositie-operator), of - (aftrekken
bediener)
- L x op y R is een TE als L en R TE's zijn, x en y symboolbereiken en zijn
op is ofwel => (beperking op twee niveaus), <= (dwang op twee niveaus) of <=> (beperking op twee niveaus)
beperking en dwang).
- X op L__R is een TE als X, L en R TE's zijn en op ofwel ^-> (opwaarts
vervanging), _-> (vervanging naar beneden), /-> (vervanging naar links) of \-> (vervanging naar rechts
vervanging). Bovendien moeten L en R automaten definiëren (dwz die hun strings in kaart brengen
op zichzelf). Deze operators komen overeen met de vervangende operators van Karttunen. Als de
pijl wordt gevolgd door een vraagteken (?), de vervanging wordt optioneel.
- X << l is een TE als X een TE is, en l een van beide is
a of de vorm a:b waarbij a en b enkele karakters of symbolen zijn. Het resultaat is een
transducer waar l vrij in X werd ingebracht. De transducer ab << c is bijvoorbeeld
gelijk aan c*ac*bc*.
- X op Y L1__R2, ... , LN__RN is een TE als X,Y, L1 tot en met LN en R1
via RN zijn TE's, en op is ofwel => (algemene beperking), <= (algemene dwang), ^=>
(algemene oppervlaktebeperking), ^<= (algemene oppervlaktedwang), ^<=> (algemene oppervlaktedwang).
beperking en dwang), _=> (algemene diepe beperking), _<= (algemene diepe dwang),
_<=> (algemene diepe beperking en dwang). (Deze operators zijn als volgt geïmplementeerd
een suggestie van Anssi Yli-Jyra.)
- "fnaam" is een TE. De compiler leest het bestand met de naam fname en draait
het in een transducer van de vorm lijn1|lijn2|lijn3|... waarbij linex de x-de lijn is van
het bestand. Alle tekens behalve : en \ worden letterlijk geïnterpreteerd (dus niet als
operatoren). Deze TE wordt meestal gebruikt om bijvoorbeeld een morfeemlijst uit een bestand te lezen.
- " " is een TE. De compiler leest een vooraf gecompileerde transducer uit
het bestand met de naam fname. Dit
Verdere functies
Opmerkingen beginnen met het symbool % en lopen door tot het einde van de regel. Spaties worden genegeerd
tenzij ze worden geciteerd. Uitdrukkingen eindigen aan het einde van een regel, tenzij aan het einde van een regel
wordt voorafgegaan door een backslash. Het bevel
#include "fnaam"
kan worden gebruikt om broncode in te voegen vanuit een bestand met de naam fname. Het bevel
RE >> "fnaam"
slaat de reguliere expressie RE op in het bestand fname. Het bevel
#gebruik hopcroft
vertelt de compiler om vanaf nu het Hopcroft-minimalisatie-algoritme te gebruiken, en
#gebruik standaard
schakelt terug naar het standaard minimalisatie-algoritme (Brzozowski). Het bevel
VOORBEELD
Hier is een voorbeeld van een eenvoudig transducerprogramma. Ervan uitgaande dat het bestand "adj-stams"
bevat de twee regels
En het is heel gemakkelijk
laat
groot
deze transducer zal de bijvoeglijke naamwoorden correct analyseren eenvoudig, gemakkelijker, gemakkelijkst en laat,
later en laatste.
ALFABET = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<>e)
$R2$ = e<=><> ( :<>e)
$R$ = $R$ & $R2$
$Stems$ = "adj-stammen"
$S$ = $Stengels$ ( :<>| :{er}| :{Est})
$S$ || $R$
EXIT STATUS
fst-compiler geeft 0 terug, tenzij er een fout optreedt.
Gebruik fst-compiler online met behulp van onworks.net-services