Ini adalah perintah fst-compiler yang dapat dijalankan di penyedia hosting gratis OnWorks menggunakan salah satu dari beberapa workstation online gratis kami seperti Ubuntu Online, Fedora Online, emulator online Windows atau emulator online MAC OS
PROGRAM:
NAMA
fst-compiler, fst-compiler-utf8 - Dua kompiler untuk program SFST
RINGKASAN
kompiler fst file tata bahasa [ berkas keluaran ]
fst-compiler-utf8 file tata bahasa [ berkas keluaran ]
PILIHAN
-c Simpan transduser dalam format ringkas yang digunakan oleh fst-infl2.
-l Simpan transduser dalam format lowmem.
-s Beralih permukaan dan lapisan analisis transduser. Anda harus menggunakan sakelar ini di
memesan untuk digunakan pertama-infl (pertama-infl2, pertama-infl3) untuk generasi daripada analisis.
DESKRIPSI
kompiler fst adalah kompiler untuk program transduser keadaan terbatas. Ini menghasilkan yang diminimalkan
transduser keadaan terbatas yang dapat digunakan dengan Fst-mor, infl pertama, cetak pertama, perbandingan pertama,
penguraian pertama, dan fst-kisi. Representasi transduser kompak yang dihasilkan dengan
bendera -c, didukung oleh pertama-infl2, kereta pertama, dan pertandingan pertama. Hemat memori
representasi transduser yang dihasilkan dengan flag -l, hanya didukung oleh pertama-
infl3.
Argumen program pertama adalah nama file yang berisi program transduser.
Bahasa pemrograman dijelaskan di bawah ini. Argumen kedua adalah nama file
yang transduser yang dihasilkan akan ditulis dalam bentuk biner. Jika argumen kedua adalah
hilang, output akan ditulis ke stdout.
fst-compiler-utf8 berbeda dari kompiler fst hanya dalam pengkodean karakter. kompiler fst-
utf8 mendukung pengkodean UTF8 dari file sumber sedangkan kompiler fst akan digunakan untuk
Kode karakter 8-Bit seperti latin1 yang merupakan perpanjangan dari kode ASCII. Informasi
tentang pengkodean disimpan dalam file transduser dan digunakan oleh program SFST lainnya.
FILE FORMAT
Program transduser terdiri dari urutan (opsional) dari: alfabet dan variabel
definisi diikuti oleh satu transduser ekspresi yang menentukan hasil
transduser.
Alfabet
Definisi alfabet terdiri dari kata kunci ALPHABET diikuti oleh = dan beberapa transduser
ekspresi misalnya
ALPHABET = [az]:[AZ]
Perintah ini mendefinisikan ulang alfabet sebagai himpunan pasangan simbol yang terjadi pada
transisi transduser. Kemunculan operator dua tingkat, operator negasi dan
periode tanpa tanda kutip selalu harus didahului dengan definisi alfabet.
Variabel
Ada dua jenis variabel yang berbeda. Символ set variabel diapit oleh hash
tanda (#) dan ambil urutan simbol (lihat di bawah) sebagai nilai:
#UC# = AZ
#LC# = az
Transduser variabel diapit oleh tanda dolar dan mengambil ekspresi transduser sebagai
nilai:
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
Variabel yang namanya dimulai dengan simbol `=' adalah spesial perjanjian variabel. Jika
variabel kesepakatan terjadi lebih dari sekali dalam ekspresi transduser, itu akan selalu memiliki
nilai yang sama. Pertimbangkan program transduser berikut:
$=1$ = [abc]
$=1$ X $=1$
Transduser hasil mengenali string aXa, bXb, dan cXc. Hanya transduser asiklik
(yaitu transduser dengan serangkaian pemetaan string yang terbatas) dapat ditetapkan ke kesepakatan
variabel.
Simbol
Sebuah simbol adalah
- satu karakter seperti A s 5,
- karakter yang dikutip seperti \* atau \_,
- simbol multi-karakter seperti atau (yang selalu
tertutup dalam tanda kurung siku) atau
- garis miring terbalik diikuti oleh angka yang merupakan kode numerik dari
karakter yang ditunjuk
- simbol nol <>.
Urutan simbol
Urutan simbol adalah urutan karakter, simbol multi-karakter, dan karakter
rentang, misalnya az \. .
rentang simbol
Rentang simbol adalah
- simbol tunggal
- urutan simbol yang diapit tanda kurung siku seperti [A-Za-z] atau
- urutan simbol yang dimulai dengan ^ dan diapit dalam tanda kurung siku seperti [^A-Za-z]
(menunjuk komplemen dari [a-zA-Z]) atau
- periode (yang mewakili simbol apa pun dari alfabet)
Ekspresi transduser
Ekspresi transduser (TE) didefinisikan secara rekursif sebagai berikut:
- Sepasang dari dua rentang simbol yang dipisahkan oleh titik dua adalah TE.
[az]:[aZ]
- Rentang simbol tunggal seperti [az] adalah TE.
Ini adalah kependekan dari [az]:[az].
- Dua barisan simbol yang diapit kurung kurawal dan dipisahkan oleh titik dua adalah
makan. {a[bc]}:{def} sama dengan a:db:e <>:f | a:dc:e <>:f.
- XY adalah TE jika X dan Y adalah TE.
(Kosong diabaikan kecuali jika dikutip.)
- (X) adalah TE jika X adalah TE.
- X op adalah TE adalah X adalah TE dan op adalah * (operator bintang Kleene), +
(Operator plus Kleene), atau ? (operator opsional)
- op X adalah TE adalah X adalah TE dan op adalah keduanya ! (operator negasi), ^
(operator ekstraksi bahasa target), _ (operator ekstraksi bahasa sumber), atau ^_
(operator sakelar sumber dan sasaran).
- X op Y adalah TE adalah X dan Y adalah TEs dan op adalah salah satu & (konjungsi
operator), | (operator disjungsi), || (operator komposisi), atau - (pengurangan
operator)
- L x op y R adalah TE jika L dan R adalah TEs, x dan y adalah rentang simbol dan
op adalah => (pembatasan dua tingkat), <= (pemaksaan dua tingkat), atau <=> (pemaksaan dua tingkat
larangan dan paksaan).
- X op L__R adalah TE jika X, L dan R adalah TE dan op adalah ^-> (ke atas
penggantian), _-> (penggantian ke bawah), /-> (penggantian ke kiri) atau \-> (penggantian ke kanan
penggantian). Selanjutnya, L dan R harus mendefinisikan automata (yaitu yang memetakan string mereka
ke diri mereka sendiri). Operator ini sesuai dengan operator pengganti Karttunen. jika
panah diikuti oleh tanda tanya (?), penggantian menjadi opsional.
- X << l adalah TE jika X adalah TE, dan l adalah salah satu dari bentuk
a atau bentuk a:b di mana a dan b adalah karakter atau simbol tunggal. Hasilnya adalah
transduser di mana l secara bebas dimasukkan ke dalam X. Transduser ab << c misalnya adalah
setara dengan c*ac*bc*.
- X op Y L1__R2, ... , LN__RN adalah TE jika X,Y, L1 melalui LN dan R1
melalui RN adalah TE, dan op adalah => (pembatasan umum), <= (pemaksaan umum), ^=>
(pembatasan permukaan umum), ^<= (pemaksaan permukaan umum), ^<=> (permukaan umum
pembatasan dan paksaan), _=> (pembatasan mendalam umum), _<= (pemaksaan mendalam umum),
_<=> (pembatasan mendalam umum dan paksaan). (Operator ini diimplementasikan sebagai berikut
saran oleh Anssi Yli-Jyra.)
- "nama f" adalah TE. Kompiler membaca file bernama fname dan ternyata
menjadi transduser berbentuk line1|line2|line3|... di mana linex adalah garis ke-x dari
berkas. Semua karakter selain : dan \ ditafsirkan secara harfiah (yaitu tidak sebagai
operator). TE ini biasanya digunakan misalnya untuk membaca daftar morfem dari sebuah file.
- " " adalah TE. Kompilator membaca transduser pra-kompilasi dari
file bernama fname. Ini
Fitur Lebih Lanjut
Komentar dimulai dengan simbol % dan diperpanjang hingga akhir baris. Kosong diabaikan
kecuali mereka dikutip. Ekspresi berakhir di akhir baris kecuali akhir baris
didahului dengan garis miring terbalik. Perintah
#sertakan "nama-nama"
dapat digunakan untuk menyisipkan kode sumber dari file bernama fname. Perintah
RE >> "nama asli"
menyimpan ekspresi reguler RE dalam file fname. Perintah
#gunakan hopcroft
memberitahu kompiler untuk menggunakan algoritma minimisasi Hopcroft mulai sekarang, dan
#gunakan bawaan
beralih kembali ke algoritme minimalisasi default (Brzozowski). Perintah
CONTOH
Berikut adalah contoh program transduser sederhana. Dengan asumsi bahwa file "adj-stems"
berisi dua baris
Mudah
terlambat
besar
transduser ini dengan benar akan menganalisis bentuk kata sifat mudah, lebih mudah, termudah dan terlambat,
nanti, dan terbaru.
ALPHABET = [a-zA-Z] y:yaitu:<> :<>
$R$ = y<=>i ( :<> e)
$R2$ = e<=><> ( :<> e)
$R$ = $R$ & $R2$
$batang$ = "adj-batang"
$S$ = $Batang$ ( :<>| :{er}| :{Est})
$S$ || $R$
EXIT STATUS
kompiler fst mengembalikan 0 kecuali beberapa kesalahan terjadi.
Gunakan fst-compiler online menggunakan layanan onworks.net