ນີ້ແມ່ນຄໍາສັ່ງ fst-compiler-utf8 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
fst-compiler, fst-compiler-utf8 - ສອງ compilers ສໍາລັບໂຄງການ SFST
ສະຫຼຸບສັງລວມ
fst-compiler ໄຟລ໌ໄວຍາກອນ [ output-file ]
fst-compiler-utf8 ໄຟລ໌ໄວຍາກອນ [ output-file ]
OPTIONS
-c ເກັບຮັກສາ transducer ໃນຮູບແບບທີ່ຫນາແຫນ້ນທີ່ຖືກນໍາໃຊ້ໂດຍ fst-infl2.
-l ເກັບຮັກສາ transducer ໃນຮູບແບບ lowmem.
-s ປ່ຽນພື້ນຜິວແລະຊັ້ນການວິເຄາະຂອງ transducer. ທ່ານຕ້ອງໄດ້ນໍາໃຊ້ສະຫຼັບນີ້ໃນ
ສັ່ງນໍາໃຊ້ fst-infl (fst-infl2, fst-infl3) ສໍາລັບການຜະລິດແທນທີ່ຈະເປັນການວິເຄາະ.
ລາຍລະອຽດ
fst-compiler ເປັນ compiler ສໍາລັບໂຄງການ transducer ຈໍາກັດລັດ. ມັນສ້າງການຫຼຸດຫນ້ອຍລົງ
finite state transducer ທີ່ສາມາດໃຊ້ກັບ fst-mor, fst-infl, fst-ພິມ, fst ປຽບທຽບ,
fst-parse, ແລະ fst-lattic. ຕົວແທນ transducer ຫນາແຫນ້ນທີ່ຖືກສ້າງຂຶ້ນດ້ວຍ
ທຸງ -c, ສະຫນັບສະຫນູນໂດຍ fst-infl2, ລົດໄຟ fst, ແລະ fst-match. ຄວາມຊົງຈໍາທີ່ມີປະສິດທິພາບ
ການເປັນຕົວແທນຂອງ transducer ທີ່ຖືກສ້າງຂຶ້ນດ້ວຍທຸງ -l, ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ໂດຍ fst-
infl3.
ການໂຕ້ຖຽງຂອງໂປຣແກຣມທໍາອິດແມ່ນຊື່ຂອງໄຟລ໌ທີ່ມີໂປແກມ transducer.
ພາສາການຂຽນໂປລແກລມຖືກອະທິບາຍຂ້າງລຸ່ມນີ້. ການໂຕ້ຖຽງທີສອງແມ່ນຊື່ຂອງໄຟລ໌
ເຊິ່ງ transducer ຜົນໄດ້ຮັບຈະຖືກຂຽນໃນຮູບແບບຖານສອງ. ຖ້າການໂຕ້ຖຽງທີສອງແມ່ນ
ຫາຍໄປ, ຜົນໄດ້ຮັບຈະຖືກຂຽນໃສ່ stdout.
fst-compiler-utf8 ແຕກຕ່າງຈາກ fst-compiler ພຽງແຕ່ໃນການເຂົ້າລະຫັດຕົວອັກສອນ. fst-compiler-
utf8 ສະຫນັບສະຫນູນການເຂົ້າລະຫັດ UTF8 ຂອງໄຟລ໌ແຫຼ່ງໃນຂະນະທີ່ fst-compiler ແມ່ນຈະຖືກນໍາໃຊ້ສໍາລັບການ
ລະຫັດຕົວອັກສອນ 8-Bit ຄື latin1 ເຊິ່ງເປັນສ່ວນຂະຫຍາຍຂອງລະຫັດ ASCII. ຂໍ້ມູນ
ກ່ຽວກັບການເຂົ້າລະຫັດຈະຖືກເກັບໄວ້ໃນໄຟລ໌ transducer ແລະຖືກນໍາໃຊ້ໂດຍໂຄງການ SFST ອື່ນໆ.
ເອກະສານ ຮູບແບບ
ໂຄງການ transducer ປະກອບດ້ວຍລໍາດັບ (ທາງເລືອກ) ຂອງ ຫນັງສື ແລະ ຕົວແປ
ຄໍານິຍາມຕາມດ້ວຍອັນດຽວ transducer ການສະແດງອອກ ເຊິ່ງກໍານົດຜົນໄດ້ຮັບ
ຕົວແປງສັນຍານ.
ຕົວອັກສອນ
ຄໍານິຍາມຂອງຕົວອັກສອນປະກອບດ້ວຍຄໍາສໍາຄັນ ALPHABET ຕິດຕາມດ້ວຍ = ແລະຕົວປ່ຽນບາງອັນ
ການສະແດງອອກ eg
ALPHABET = [az]:[AZ]
ຄໍາສັ່ງນີ້ redefines ຫນັງສືເປັນຊຸດຂອງຄູ່ສັນຍາລັກທີ່ເກີດຂຶ້ນໃນການ
ການຫັນປ່ຽນຂອງ transducer ໄດ້. ການປະກົດຕົວຂອງຜູ້ປະຕິບັດການສອງລະດັບ, ຜູ້ປະຕິບັດການປະຕິເສດແລະ
ໄລຍະເວລາທີ່ບໍ່ໄດ້ອ້າງອີງຕ້ອງຖືກນຳໜ້າໂດຍຄຳນິຍາມຂອງຕົວໜັງສືສະເໝີ.
Variables
ມີສອງປະເພດທີ່ແຕກຕ່າງກັນຂອງຕົວແປ. ສັນຍາລັກ ທີ່ກໍານົດໄວ້ ຕົວແປ ຖືກປິດລ້ອມດ້ວຍ hash
ສັນຍາລັກ (#) ແລະເອົາລໍາດັບສັນຍາລັກ (ເບິ່ງຂ້າງລຸ່ມນີ້) ເປັນຄ່າ:
#UC# = AZ
#LC# = az
Transducer ຕົວແປ ຖືກປິດລ້ອມດ້ວຍເຄື່ອງໝາຍເງິນໂດລາ ແລະໃຊ້ຕົວສະແດງຕົວປ່ຽນເປັນ
ຄຸນຄ່າ:
$MAP$ = [az]:[AZ]+
$MAP$ = [#LC#]:[#UC#]+
ຕົວແປທີ່ຊື່ເລີ່ມຕົ້ນດ້ວຍສັນຍາລັກ `=' ແມ່ນພິເສດ ຂໍ້ຕົກລົງ ຕົວແປ. ຖ້າເປັນ
ຕົວແປຂໍ້ຕົກລົງເກີດຂຶ້ນຫຼາຍກວ່າຫນຶ່ງຄັ້ງໃນການສະແດງອອກ transducer, ມັນຈະມີສະເຫມີ
ມູນຄ່າດຽວກັນ. ພິຈາລະນາໂຄງການ transducer ຕໍ່ໄປນີ້:
$=1$ = [abc]
$=1$ X $=1$
ຕົວປ່ຽນຜົນໄດ້ຮັບຮັບຮູ້ສາຍ aXa, bXb, ແລະ cXc. ພຽງແຕ່ transducers acyclic
(ເຊັ່ນ: transducers ທີ່ມີກໍານົດຂອບເຂດກໍານົດຂອງ string mappings) ສາມາດຖືກມອບຫມາຍໃຫ້ຕົກລົງ
ຕົວແປ
ສັນຍາລັກ
ສັນຍາລັກແມ່ນຄືກັນ
- ລັກສະນະດຽວຄື A s 5,
- ຕົວອັກສອນທີ່ອ້າງອີງເຊັ່ນ \* ຫຼື \_,
- ສັນຍາລັກຫຼາຍຕົວອັກສອນເຊັ່ນ ຫຼື (ຊຶ່ງເປັນສະເຫມີໄປ
enclosed ໃນວົງເລັບມຸມ) ຫຼື
- backslash ຕາມດ້ວຍຕົວເລກທີ່ເປັນລະຫັດຕົວເລກຂອງ
ລັກສະນະທີ່ກໍານົດໄວ້
- ສັນຍາລັກ null <>.
ລໍາດັບສັນຍາລັກ
ລໍາດັບສັນຍາລັກແມ່ນລໍາດັບຂອງລັກສະນະ, ສັນຍາລັກຫຼາຍຕົວອັກສອນແລະລັກສະນະ
ranges, eg az \. .
ຊ່ວງສັນຍາລັກ
ຊ່ວງສັນຍາລັກແມ່ນຄືກັນ
- ສັນຍາລັກດຽວ
- ລຳດັບສັນຍາລັກທີ່ຕິດຢູ່ໃນວົງເລັບສີ່ຫຼ່ຽມຄື [A-Za-z] ຫຼື
- ລຳດັບສັນຍາລັກເລີ່ມຕົ້ນດ້ວຍ ^ ແລະປິດລ້ອມໃນວົງເລັບສີ່ຫຼ່ຽມມົນຄື [^A-Za-z]
(ການກໍານົດການເສີມຂອງ [a-zA-Z]) ຫຼື
- ໄລຍະເວລາ (ຊຶ່ງເປັນຕົວແທນສັນຍາລັກໃດຫນຶ່ງຈາກຕົວອັກສອນ)
ການສະແດງອອກຂອງ transducer
ການສະແດງອອກຂອງ transducer (TE) ຖືກກໍານົດ recursively ດັ່ງຕໍ່ໄປນີ້:
- ຄູ່ຂອງສອງຊ່ວງສັນຍາລັກທີ່ແຍກດ້ວຍຈໍ້າສອງເມັດແມ່ນ TE.
[az]:[aZ]
- ຊ່ວງສັນຍາລັກດຽວຄື [az] ແມ່ນ TE.
ມັນເປັນຮູບແບບສັ້ນສໍາລັບ [az]:[az].
- ສອງລຳດັບສັນຍາລັກທີ່ປິດລ້ອມໃນວົງເລັບແລະແຍກອອກໂດຍຈໍ້າສອງເມັດແມ່ນ
TE. {a[bc]}:{def} ເທົ່າກັບ a:db:e <>:f | a:dc:e <>:f.
- XY ແມ່ນ TE ຖ້າ X ແລະ Y ແມ່ນ TEs.
(ຊ່ອງຫວ່າງຖືກລະເລີຍເວັ້ນເສຍແຕ່ວ່າພວກມັນຖືກອ້າງອີງ.)
- (X) ແມ່ນ TE ຖ້າ X ແມ່ນ TE.
- X op ແມ່ນ TE ແມ່ນ X ແມ່ນ TE ແລະ op ແມ່ນ * (ຕົວປະຕິບັດການດາວຂອງ Kleene), +
(ຕົວປະຕິບັດການບວກຂອງ Kleene), ຫຼື ? (ຕົວປະຕິບັດການທາງເລືອກ)
- op X ແມ່ນ TE ແມ່ນ X ແມ່ນ TE ແລະ op ແມ່ນ ! (ຜູ້ປະຕິບັດການປະຕິເສດ), ^
(ຕົວປະຕິບັດການສະກັດພາສາເປົ້າຫມາຍ), _ (ຕົວປະຕິບັດການສະກັດພາສາແຫຼ່ງ), ຫຼື ^_
(ຜູ້ປະຕິບັດການປ່ຽນແຫຼ່ງແລະເປົ້າຫມາຍ).
- X op Y ແມ່ນ TE ແມ່ນ X ແລະ Y ແມ່ນ TEs ແລະ op ແມ່ນທັງສອງ & (ການສົມທົບ
operator), | (disjunction operator), || (ຕົວປະຕິບັດການອົງປະກອບ), ຫຼື - (ການລົບ
ຜູ້ປະກອບການ)
- L x op y R ແມ່ນ TE ຖ້າ L ແລະ R ແມ່ນ TEs, x ແລະ y ແມ່ນຊ່ວງສັນຍາລັກແລະ
op ແມ່ນ => (ການຈໍາກັດສອງລະດັບ), <= (ການບີບບັງຄັບສອງລະດັບ), ຫຼື <=> (ສອງລະດັບ.
ຂໍ້ຈໍາກັດແລະການບັງຄັບ).
- X op L__R ແມ່ນ TE ຖ້າ X, L ແລະ R ແມ່ນ TEs ແລະ op ແມ່ນ ^-> (ຂຶ້ນເທິງ.
ການປ່ຽນແທນ), _-> (ປ່ຽນແທນທາງລຸ່ມ), //> (ປ່ຽນຊ້າຍ) ຫຼື \-> (ຂວາ.
ທົດແທນ). ນອກຈາກນັ້ນ, L ແລະ R ຈະຕ້ອງກໍານົດ automata (ເຊັ່ນ: ແຜນທີ່ສາຍຂອງພວກມັນ
ໃສ່ຕົນເອງ). ຜູ້ປະກອບການເຫຼົ່ານີ້ສອດຄ່ອງກັບ Karttunen's replace operator. ຖ້າ
ລູກສອນແມ່ນຕິດຕາມດ້ວຍເຄື່ອງຫມາຍຄໍາຖາມ (?), ການທົດແທນຈະກາຍເປັນທາງເລືອກ.
- X << l ແມ່ນ TE ຖ້າ X ແມ່ນ TE, ແລະ l ແມ່ນຮູບແບບໃດນຶ່ງ
a ຫຼືຮູບແບບ a:b ທີ່ a ແລະ b ເປັນຕົວອັກສອນດຽວ ຫຼືສັນຍາລັກ. ຜົນໄດ້ຮັບແມ່ນ ກ
transducer ບ່ອນທີ່ l ໄດ້ freely inserted ເຂົ້າໄປໃນ X. transducer ab << c ສໍາລັບການຍົກຕົວຢ່າງແມ່ນ
ເທົ່າກັບ c*ac*bc*.
- X op Y L1__R2, ... , LN__RN ເປັນ TE ຖ້າ X, Y, L1 ຜ່ານ LN ແລະ R1
ຜ່ານ RN ແມ່ນ TEs, ແລະ op ແມ່ນ => (ຂໍ້ຈໍາກັດທົ່ວໄປ), <= (ການບີບບັງຄັບທົ່ວໄປ), ^=>
(ການຈຳກັດພື້ນຜິວທົ່ວໄປ), ^<= (ການບີບບັງຄັບພື້ນຜິວທົ່ວໄປ), ^<=> (ພື້ນຜິວທົ່ວໄປ
ຂໍ້ຈໍາກັດແລະການບີບບັງຄັບ), _=> (ຂໍ້ຈໍາກັດເລິກໂດຍທົ່ວໄປ), _<= (ການບີບບັງຄັບເລິກໂດຍທົ່ວໄປ),
_<=> (ຂໍ້ຈໍາກັດເລິກໂດຍທົ່ວໄປແລະການບີບບັງຄັບ). (ຜູ້ປະຕິບັດການເຫຼົ່ານີ້ໄດ້ຖືກປະຕິບັດດັ່ງຕໍ່ໄປນີ້
ຄໍາແນະນໍາໂດຍ Anssi Yli-Jyra.)
- "fname" ແມ່ນ TE. compiler ອ່ານໄຟລ໌ທີ່ມີຊື່ fname ແລະ turns
ມັນເຂົ້າໄປໃນຕົວປ່ຽນຂອງຮູບແບບ line1|line2|line3|... ເຊິ່ງ linex ແມ່ນເສັ້ນ x-th ຂອງ
ໄຟລ໌. ຕົວອັກສອນທັງໝົດນອກເໜືອໄປຈາກ : ແລະ \ ຖືກຕີຄວາມໝາຍຕາມຕົວໜັງສື (ເຊັ່ນວ່າ ບໍ່ແມ່ນ
ຜູ້ປະກອບການ). TE ນີ້ຖືກນໍາໃຊ້ໂດຍທົ່ວໄປເຊັ່ນ: ເພື່ອອ່ານລາຍການ morpheme ຈາກໄຟລ໌.
- " " ເປັນ TE. compiler ອ່ານ transducer ກ່ອນລວບລວມຈາກ
ໄຟລ໌ທີ່ມີຊື່ fname. ນີ້
ຄຸນນະສົມບັດເພີ່ມເຕີມ
ຄຳເຫັນເລີ່ມຕົ້ນດ້ວຍສັນຍາລັກ % ແລະຂະຫຍາຍໄປຮອດທ້າຍແຖວ. ຫວ່າງເປົ່າຖືກລະເລີຍ
ເວັ້ນເສຍແຕ່ວ່າພວກເຂົາຖືກອ້າງອີງ. ການສະແດງອອກຢຸດຢູ່ທ້າຍແຖວ ເວັ້ນເສຍແຕ່ວ່າທ້າຍແຖວ
ແມ່ນນຳໜ້າດ້ວຍ backslash. ຄໍາສັ່ງ
#ລວມທັງ "fname"
ສາມາດໃຊ້ເພື່ອໃສ່ລະຫັດແຫຼ່ງຈາກໄຟລ໌ທີ່ມີຊື່ fname. ຄໍາສັ່ງ
RE >> "fname"
ເກັບຮັກສາການສະແດງອອກປົກກະຕິ RE ໃນ fname ໄຟລ໌. ຄໍາສັ່ງ
#ໃຊ້ hopcroft
ບອກຜູ້ລວບລວມຂໍ້ມູນໃຫ້ໃຊ້ Hopcroft minimization algorithm ຈາກນີ້ໄປ, ແລະ
# ໃຊ້ຄ່າເລີ່ມຕົ້ນ
ສະຫຼັບກັບໄປໃຊ້ວິທີຫຼຸດຂັ້ນຕົ້ນ (Brzozowski). ຄໍາສັ່ງ
EXAMPLE
ນີ້ແມ່ນຕົວຢ່າງຂອງໂຄງການ transducer ງ່າຍດາຍ. ສົມມຸດວ່າໄຟລ໌ "adj-stems"
ມີສອງແຖວ
ງ່າຍ
late
ຂະຫນາດໃຫຍ່
transducer ນີ້ຈະວິເຄາະຮູບແບບຄໍານາມຢ່າງຖືກຕ້ອງງ່າຍ, ງ່າຍ, ງ່າຍທີ່ສຸດແລະຊ້າ,
ຕໍ່ມາ, ແລະຫລ້າສຸດ.
ALPHABET = [a-zA-Z] y:ie:<> :<>
$R$ = y<=>i ( :<> e)
$R2$ = e<=><> ( :<> e)
$R$ = $R$ & $R2$
$Stems$ = "adj-stems"
$S$ = $Stems$ ( :<>| :{er}| :{est})
$S$ || $R$
ອອກ STATUS
fst-compiler ຕອບຄືນ 0 ເວັ້ນເສຍແຕ່ມີຂໍ້ຜິດພາດເກີດຂຶ້ນ.
ໃຊ້ fst-compiler-utf8 ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net