add thrax

This commit is contained in:
Jakub Pokrywka 2022-01-28 19:31:39 +01:00
parent 48fef622da
commit 19c2cf1865
37 changed files with 453 additions and 3 deletions

9
TaskH00/description.txt Normal file
View File

@ -0,0 +1,9 @@
Write a Thrax grammar which replaces all occurrences of Polish
inflected forms of the word "Legia" ("Legia", "Legią", "Legię",
"Legii") into the corresponding forms of the word "Lech" ("Lech",
"Lechem", "Lecha", "Lecha", respectively).
The task has a solution already, do not solve it!
POINTS: 1
DEADLINE: 2022-02-06 16:00

44
TaskH00/grammar.grm Normal file
View File

@ -0,0 +1,44 @@
# zamiana końcówek, "i"/"ę" zgrupowane, bo zamieniamy na wspólną końcówkę
suffixes = ("a" : "") | ("i" | "ę" : "a") | ("ą" : "em");
# zamiana rdzenia
legia_to_lech_core = "Legi" : "Lech";
legia_to_lech = legia_to_lech_core suffixes;
# Wszystkie możliwe znaki, niestety nie ma (?) prostszego sposobu.
# Zauważmy, że polskie znaki diakrytyczne będą reprezentowane
# tak naprawdę jako dwuznaki, nie stanowi to jednak problemu.
allChars = Optimize[
"[1]" | "[2]" | "[3]" | "[4]" | "[5]" | "[6]" | "[7]" | "[8]" | "[9]" | "[10]" |
"[11]" | "[12]" | "[13]" | "[14]" | "[15]" | "[16]" | "[17]" | "[18]" | "[19]" | "[20]" |
"[21]" | "[22]" | "[23]" | "[24]" | "[25]" | "[26]" | "[27]" | "[28]" | "[29]" | "[30]" |
"[31]" | "[32]" | "[33]" | "[34]" | "[35]" | "[36]" | "[37]" | "[38]" | "[39]" | "[40]" |
"[41]" | "[42]" | "[43]" | "[44]" | "[45]" | "[46]" | "[47]" | "[48]" | "[49]" | "[50]" |
"[51]" | "[52]" | "[53]" | "[54]" | "[55]" | "[56]" | "[57]" | "[58]" | "[59]" | "[60]" |
"[61]" | "[62]" | "[63]" | "[64]" | "[65]" | "[66]" | "[67]" | "[68]" | "[69]" | "[70]" |
"[71]" | "[72]" | "[73]" | "[74]" | "[75]" | "[76]" | "[77]" | "[78]" | "[79]" | "[80]" |
"[81]" | "[82]" | "[83]" | "[84]" | "[85]" | "[86]" | "[87]" | "[88]" | "[89]" | "[90]" |
"[91]" | "[92]" | "[93]" | "[94]" | "[95]" | "[96]" | "[97]" | "[98]" | "[99]" | "[100]" |
"[101]" | "[102]" | "[103]" | "[104]" | "[105]" | "[106]" | "[107]" | "[108]" | "[109]" | "[110]" |
"[111]" | "[112]" | "[113]" | "[114]" | "[115]" | "[116]" | "[117]" | "[118]" | "[119]" | "[120]" |
"[121]" | "[122]" | "[123]" | "[124]" | "[125]" | "[126]" | "[127]" | "[128]" | "[129]" | "[130]" |
"[131]" | "[132]" | "[133]" | "[134]" | "[135]" | "[136]" | "[137]" | "[138]" | "[139]" | "[140]" |
"[141]" | "[142]" | "[143]" | "[144]" | "[145]" | "[146]" | "[147]" | "[148]" | "[149]" | "[150]" |
"[151]" | "[152]" | "[153]" | "[154]" | "[155]" | "[156]" | "[157]" | "[158]" | "[159]" | "[160]" |
"[161]" | "[162]" | "[163]" | "[164]" | "[165]" | "[166]" | "[167]" | "[168]" | "[169]" | "[170]" |
"[171]" | "[172]" | "[173]" | "[174]" | "[175]" | "[176]" | "[177]" | "[178]" | "[179]" | "[180]" |
"[181]" | "[182]" | "[183]" | "[184]" | "[185]" | "[186]" | "[187]" | "[188]" | "[189]" | "[190]" |
"[191]" | "[192]" | "[193]" | "[194]" | "[195]" | "[196]" | "[197]" | "[198]" | "[199]" | "[200]" |
"[201]" | "[202]" | "[203]" | "[204]" | "[205]" | "[206]" | "[207]" | "[208]" | "[209]" | "[210]" |
"[211]" | "[212]" | "[213]" | "[214]" | "[215]" | "[216]" | "[217]" | "[218]" | "[219]" | "[220]" |
"[221]" | "[222]" | "[223]" | "[224]" | "[225]" | "[226]" | "[227]" | "[228]" | "[229]" | "[230]" |
"[231]" | "[232]" | "[233]" | "[234]" | "[235]" | "[236]" | "[237]" | "[238]" | "[239]" | "[240]" |
"[241]" | "[242]" | "[243]" | "[244]" | "[245]" | "[246]" | "[247]" | "[248]" | "[249]" | "[250]" |
"[251]" | "[252]" | "[253]" | "[254]" | "[255]"
];
export FinalRule = Optimize[CDRewrite[legia_to_lech, "", "", allChars*]];

6
TaskH00/test.exp Normal file
View File

@ -0,0 +1,6 @@
Input string: Output string: Lech Warszawa
Input string: Output string: Górnik gra z Lechem
Input string: Output string: Lech Lecha Lecha Lechem
Input string: Output string: Lechxxxxx
Input string: Output string: tu nic nie ma do zamiany
Input string:

5
TaskH00/test.in Normal file
View File

@ -0,0 +1,5 @@
Legia Warszawa
Górnik gra z Legią
Legia Legii Legię Legią
Legiaxxxxx
tu nic nie ma do zamiany

6
TaskH00/test.out Normal file
View File

@ -0,0 +1,6 @@
Input string: Output string: Lech Warszawa
Input string: Output string: Górnik gra z Lechem
Input string: Output string: Lech Lecha Lecha Lechem
Input string: Output string: Lechxxxxx
Input string: Output string: tu nic nie ma do zamiany
Input string:

8
TaskH01/description.txt Normal file
View File

@ -0,0 +1,8 @@
Write a Thrax grammar which replaces all 0s to 1s and 1s to 0s (other
digits should not be changed).
You can assume that only string composed of digits are given on the
input.
POINTS: 4
DEADLINE: 2022-02-06 16:00

6
TaskH01/test.exp Normal file
View File

@ -0,0 +1,6 @@
Input string: Output string: 0023410
Input string: Output string: 0101010
Input string: Output string: 9999999
Input string: Output string: 888088888888888
Input string: Output string: 111
Input string:

5
TaskH01/test.in Normal file
View File

@ -0,0 +1,5 @@
1123401
1010101
9999999
888188888888888
000

0
TaskH01/test.out Normal file
View File

7
TaskH02/description.txt Normal file
View File

@ -0,0 +1,7 @@
Napisz gramatykę Thraxową, która usuwa wszystkie znaki z wyjątkiem
polskich liter (małych i wielkich) i spacji. Wielkie litery powinny
być zamieniane na małe.
POINTS: 4
DEADLINE: 2022-02-06 16:00

6
TaskH02/test.exp Normal file
View File

@ -0,0 +1,6 @@
Input string: Output string: ala ma kota
Input string: Output string: być albo nie być oto jest pytanie
Input string: Output string: przesada dwie laski dynamitu to by była przesada
Input string: Output string: róg rogi
Input string: Output string: rico żadnych testów jądrowych w bazie
Input string:

5
TaskH02/test.in Normal file
View File

@ -0,0 +1,5 @@
Ala ma kota.
Być albo nie być, oto jest pytanie.
Przesada? Dwie laski dynamitu to by była przesada.
róg rogi
Rico, żadnych testów jądrowych w bazie!

0
TaskH02/test.out Normal file
View File

14
TaskH03/description.txt Normal file
View File

@ -0,0 +1,14 @@
Zamiana cyfr z ułamkami na słowa
================================
Napisać gramatykę thraxową, która zamienia liczby z zakresu
od -999,999 od 999,999 na postać słowną.
Zakładamy, że liczby nie mają zer nieznaczących.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 0.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 0/7

13
TaskH03/test.exp Normal file
View File

@ -0,0 +1,13 @@
Input string: Output string: minus dziewięćset dziewięćdziesiąt dziewięć i dziewięćset dziewięćdziesiąt dziewięć tysięcznych
Input string: Output string: dziewięćset dziewięćdziesiąt dziewięć i dziewięćset dziewięćdziesiąt jeden tysięcznych
Input string: Output string: trzy i jedna dziesiąta
Input string: Output string: dwanaście i sześćdziesiąt siedem setnych
Input string: Output string: minus trzydzieści
Input string: Output string: minus trzydzieści pięć i sto dwadzieścia jeden tysięcznych
Input string: Output string: jedna dziesiąta
Input string: Output string: jedna setna
Input string: Output string: jedna tysięczna
Input string: Output string: zero
Input string: Output string: osiem i jedna setna
Input string: Output string: osiem i pięć setnych
Input string:

12
TaskH03/test.in Normal file
View File

@ -0,0 +1,12 @@
-999,999
999,991
3,1
12,67
-30
-35,121
0,1
0,01
0,001
0
8,01
8,05

0
TaskH03/test.out Normal file
View File

15
TaskH04/description.txt Normal file
View File

@ -0,0 +1,15 @@
Zamiana cyfr na słowa polskie
=============================
Napisać gramatykę thraxową, która zamienia liczby całkowite pisane
cyframi z zakresu od -999999999 do 999999999 na postać słowną (po
polsku).
Zakładamy, że liczby nie mają zer nieznaczących.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 1.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 1/7

11
TaskH04/test.exp Normal file
View File

@ -0,0 +1,11 @@
Input string: Output string: dwanaście tysięcy trzysta czterdzieści pięć
Input string: Output string: zero
Input string: Output string: minus dziewięćset dziewięćdziesiąt dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć
Input string: Output string: tysiąc osiemset dziewięć
Input string: Output string: minus dwanaście
Input string: Output string: trzy tysiące dziewięćdziesiąt osiem
Input string: Output string: trzy miliony
Input string: Output string: osiem
Input string: Output string: dwadzieścia dwa
Input string: Output string: milion jeden
Input string:

10
TaskH04/test.in Normal file
View File

@ -0,0 +1,10 @@
12345
0
-999999999
1809
-12
3098
3000000
8
22
1000001

29
TaskH05/description.txt Normal file
View File

@ -0,0 +1,29 @@
Podział na sylaby
=================
Napisać gramatykę thraxową, która dzieli wyraz na sylaby. Zakładamy,
że na wejściu podawane polskie wyrazy (tj. ciągi małych liter,
włącznie z polskimi znakami diakrytycznymi). Należy zaznaczyć podział
na sylaby (przez dodanie spacji).
Założenia:
- preferujemy taki podział, by sylaba kończyła się i zaczynała spółgłoską,
np. "parter" dzielimy na "par ter",
- w przypadku zbitek więcej niż dwóch spółgłosek, pierwsza spółgłoska
powinna zostać włączona do lewej sylaby, pozostałe — do prawej sylaby
np. "bartnik" dzielimy na "bar tnik",
- pojedynczą spółgłoską dołączamy do prawej sylaby,
- pamiętamy przy tym, że niektóre głoski oddajemy za pomocą dwuznaków,
np. "szczebrzeszyn" dzielimy na "szczeb rze szyn",
- pamiętamy, że zbitki typu "ia" to jedna samogłoska.
(Powyższe założenia to oczywiście tylko przybliżenie poprawnej definicji
sylaby).
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 2.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 2/7

8
TaskH05/test.exp Normal file
View File

@ -0,0 +1,8 @@
Input string: Output string: par ter
Input string: Output string: bar ter
Input string: Output string: bar tnik
Input string: Output string: szczeb rze szyn
Input string: Output string: most
Input string: Output string: ma nia kal nie
Input string: Output string: a pos tro ficz ny
Input string:

7
TaskH05/test.in Normal file
View File

@ -0,0 +1,7 @@
parter
barter
bartnik
szczebrzeszyn
most
maniakalnie
apostroficzny

25
TaskH06/description.txt Normal file
View File

@ -0,0 +1,25 @@
Korektor gramatyczny
====================
Napisać gramatykę thraxową, która dokona prostej korekty gramatycznej, tj.:
* wstawi brakujący przecinek przed formami zaimków "jaki" i "który",
* ... z uwzględnieniem przyimków (także przyimka złożonego "odnośnie do")
— wtedy przecinek powinien być przed przyimkiem,
* zamieni "odnośnie" (bez "do") na "odnośnie do",
* zamieni "w każdym bądź razie" na "w każdym razie",
* zamieni formy typu "12 marzec" (nazwa miesiąca w mianowniku) na "12
marca" (nazwa miesiąc w dopełniaczu).
Należy uwzględnić też przypadki, gdy powyższe konstrukcje pisane są
wielką literą (na początku zdania).
Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery
polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 3.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 3/7

13
TaskH06/test.exp Normal file
View File

@ -0,0 +1,13 @@
Input string: Output string: Jaki człowiek wie, w którym roku urodził się Mozart?
Input string: Output string: Jaki człowiek wie, w którym roku urodził się Mozart?
Input string: Output string: Powiedz, jaki człowiek wie, w którym roku urodził się Mozart?
Input string: Output string: sprawa, odnośnie do której się pytam
Input string: Output string: Odnośnie do tego
Input string: Output string: do tyłu, tak zrobili wtedy
Input string: Output string: w każdym razie, człowiek, który grał na pianinie
Input string: Output string: cofnęliby się 31 stycznia
Input string: Output string: to był 1 października 2012
Input string: Output string: to był 2 października 2012
Input string: Output string: W każdym razie, stało się to 28 lutego
Input string: Output string: odnośnie do wydarzeń, które przypadły na 29 września
Input string:

12
TaskH06/test.in Normal file
View File

@ -0,0 +1,12 @@
Jaki człowiek wie, w którym roku urodził się Mozart?
Jaki człowiek wie w którym roku urodził się Mozart?
Powiedz jaki człowiek wie w którym roku urodził się Mozart?
sprawa odnośnie której się pytam
Odnośnie tego
do tyłu, tak zrobili wtedy
w każdym bądź razie, człowiek który grał na pianinie
cofnęliby się 31 styczeń
to był 1 październik 2012
to był 2 październik 2012
W każdym bądź razie, stało się to 28 luty
odnośnie wydarzeń które przypadły na 29 wrzesień

32
TaskH07/description.txt Normal file
View File

@ -0,0 +1,32 @@
Wymowa
======
Napisać gramatykę thraxową, która przekształca tekst polski do jego
zapisu "fonetycznego", tj.:
* "rz" na "ż" (chyba że po "t" i "p" — wówczas na "sz"), "ch" na "h", "ó" na "u",
* wyjątkowo w formach wyrazu "marznąć" nie zamieniamy "rz" na "ż",
* "ę" na "en", chyba że na końcu wyrazu lub przed "ł" — wówczas jako "e"
" "ą" na "on", chyba że na końcu wyrazu — wówczas zostaje "ą",
* oddajemy rzeczywistą wymowę na końcu bezdźwięcznych spółgłosek,
np. "g" na końcu wyrazu zamienia na "k"
* w przypadku zbitek "i" z samogłoską zmiękczamy poprzedzającą
samogłoskę (np. "siano" na "śano"), w przeciwnym razie
zamieniamy "i" na "j" ("bieda" na "bjeda"),
* zbitki typu "ci" zamieniamy na "ć", np. "zima" na "źima", wyjątki:
"sinus" i formy przymiotnika "silikonowy",
* wszystkie wielkie litery należy zamienić na małe,
* znaki interpunkcyjne należy usunąć.
(Oczywiście to tylko przybliżenie rzeczywistej transkrypcji
fonetycznej).
Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery
polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 4.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 4/7

12
TaskH07/test.exp Normal file
View File

@ -0,0 +1,12 @@
Input string: Output string: ala ma kota
Input string: Output string: być albo ńe być oto jest pytańe
Input string: Output string: żeby hrońić informacje zainteresowane państwa podjeły ruwńeż dźałańa psyhologiczne
Input string: Output string: marzne bo ńe mjeli silikonu
Input string: Output string: pjorun kulisty wyglondem pszypomina śwjetlistą kule o średńicy od kilku do kilkudźeśenću centymetruf
Input string: Output string: renką
Input string: Output string: pewnego dńa zrozumjesz że w żyću jest tylko jeden uńiwersalny jenzyk śiła i matematyka
Input string: Output string: pszesada dwje laski dynamitu to by była pszesada
Input string: Output string: ruk rogi
Input string: Output string: rico żadnyh testuf jondrowyh w baźe
Input string: Output string: ńe dawać na sztywno
Input string:

11
TaskH07/test.in Normal file
View File

@ -0,0 +1,11 @@
Ala ma kota.
Być albo nie być, oto jest pytanie.
Żeby chronić informacje zainteresowane państwa podjęły również działania psychologiczne.
Marznę, bo nie mieli silikonu.
Piorun kulisty wyglądem przypomina świetlistą kulę o średnicy od kilku do kilkudziesięciu centymetrów.
ręką
Pewnego dnia zrozumiesz, że w życiu jest tylko jeden uniwersalny język siła. I matematyka.
Przesada? Dwie laski dynamitu to by była przesada.
róg rogi
Rico, żadnych testów jądrowych w bazie!
nie dawać na sztywno

29
TaskH08/description.txt Normal file
View File

@ -0,0 +1,29 @@
Rozwijanie skrótów
==================
Napisać gramatykę thraxową, która rozwija skróty poprzedzające
imiona/nazwiska, tj.: "prof.", "dr", "hab.", "ks.", "mgr",
"inż.", także formy typu "dra", "mgrowi". Skróty "dr" i "mgr"
mogą być opcjonalnie zakończone kropką.
Domyślnie należy zamieniać skróty na formę podstawową (mianownik),
chyba że:
* skróty typu "dra" i "mgrowi" należy rozwijać do odpowiednich form (np. "doktora", "magistrowi"),
także towarzyszące im inne skróty;
* możemy odgadnąć formę po imieniu następującym po skrócie lub ciągu skrótów,
należy uwzględnić przynajmniej 20 częstych imion męskich
* możemy odgadnąć formę po nazwisku występującym po skrócie lub ciągu skrótów lub jeden wyraz dalej
uwzględniamy nazwiska "Nowak", "Kaczmarek" oraz nazwiska zakończone na "-ski", "-cki", "-owicz";
* możemy odgadnąć forme po poprzedzającym przyimku.
Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery
polskiego alfabetu, spacje, przecinki, kropki i znaki zapytania.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 5.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 5/7

13
TaskH08/test.exp Normal file
View File

@ -0,0 +1,13 @@
Input string: Output string: Widzę księdza profesora Mateusza Kusia, jak rozmawia z doktorem inżynierem jak mu tam było.
Input string: Output string: profesor doktor habilitowany ksiądz magister inżynier
Input string: Output string: profesor habilitowany hahahaha
Input string: Output string: od profesora habilitowanego hahahaha
Input string: Output string: doktor Michał Rrrrrrrr
Input string: Output string: doktora Michała Rrrrrrrr
Input string: Output string: doktor Michał Rrrrrrrr
Input string: Output string: doktora Michała Rrrrrrrr
Input string: Output string: profesor Pasem Ratunkowym
Input string: Output string: profesorem Pasem Kaczmarkiem
Input string: Output string: doktor habilitowany Rups Koźlarski doktora habilitowanego Rups Koźlarskiego
Input string: Output string: dramat wyprof.
Input string:

12
TaskH08/test.in Normal file
View File

@ -0,0 +1,12 @@
Widzę ks. prof. Mateusza Kusia, jak rozmawia z drem inż. jak mu tam było.
prof. dr hab. ks. mgr inż.
prof. hab. hahahaha
od prof. hab. hahahaha
dr Michał Rrrrrrrr
dr Michała Rrrrrrrr
dr. Michał Rrrrrrrr
dr. Michała Rrrrrrrr
prof. Pasem Ratunkowym
prof. Pasem Kaczmarkiem
dr hab. Rups Koźlarski dr hab. Rups Koźlarskiego
dramat wyprof.

33
TaskH09/description.txt Normal file
View File

@ -0,0 +1,33 @@
Tłumacz polsko-poznański
========================
Napisać gramatykę thraxową, która przekształca tekst polski na wersję poznańską
Uwzględnić zamiany (wraz z formami fleksyjnymi):
* "tramwaj"/"bimba",
* "pieniądze"/"bejmy",
* "ludzie"/"wiaruchna",
* "zamknąć na klucz"/"zakluczyć",
* "nacisnąć"/"nadusić",
* "czerwona kapusta"/"modra kapusta",
W co trzeci wyraz (zaczynając od początku) należy wstawić wyraz "tej".
Przy zamianie rodzaju/liczby (np. "tramwaj" na "bimba") należy zmienić:
* formę przymiotnika poprzedzającą wyraz (uwzględniamy regularne
przymiotniki zakończone na "-y"),
* formę przymiotnika następującego po wyrazie (uwzględniamy regularne
przymiotniki zakończone na "-y"),
* formę czasownika następującego po mianowniku lub jeden wyraz dalej
(uwzględniamy regularne formy czasu przeszłego).
Zakładamy, że wejściowy tekst może zawierać duże i wielkie litery
polskiego alfabetu i spacje.
UWAGA! Zadanie przeznaczone dla studentów, których numer indeksu
dzieli się przez 7 z resztą 6.
POINTS: 15
DEADLINE: 2022-02-06 16:00
REMAINDER: 6/7

7
TaskH09/test.exp Normal file
View File

@ -0,0 +1,7 @@
Input string: Output string: tej Czerwona bimba tej przyjechała i tej zielony autobus tej odjechał
Input string: Output string: tej Wiaruchna zakluczyła tej modrą kapustę tej
Input string: Output string: tej Ci dziwna tej wiaruchna to tej chyba
Input string: Output string: tej Bimbą jechał tej i nadusił tej przycisk
Input string: Output string: tej Bejmy były tej zakluczone
Input string: Output string: tej Bimba dzisiaj tej odblablowała
Input string:

6
TaskH09/test.in Normal file
View File

@ -0,0 +1,6 @@
Czerwony tramwaj przyjechał i zielony autobus odjechał
Ludzie zamknęli na klucz czerwoną kapustę
Ci dziwni ludzie to chyba
Tramwajem jechał i nacisnął przycisk
Pieniądze były zamknięte na klucz
Tramwaj dzisiaj odblablował

View File

@ -10,6 +10,12 @@ def execute_task(dir):
try: try:
with open(Path(dir,f'{task_set}.in')) as f_in, open(Path(dir,f'{task_set}.out'), 'w') as f_out: with open(Path(dir,f'{task_set}.in')) as f_in, open(Path(dir,f'{task_set}.out'), 'w') as f_out:
arg = [x for x in dir.iterdir() if str(x).endswith(f'{task_set}.arg')] arg = [x for x in dir.iterdir() if str(x).endswith(f'{task_set}.arg')]
if str(dir).startswith('TaskH'):
compilation_command = ['thraxcompiler', f'--input_grammar={Path(dir,"grammar.grm")}', f'--output_far={Path(dir,"grammar.far")}']
process = subprocess.Popen(compilation_command, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
process.wait()
command = ['thraxrewrite-tester', f'--far={Path(dir,"grammar.far")}', f'--rules=FinalRule']
else:
command = ['python3' ,Path(dir,'run.py')] command = ['python3' ,Path(dir,'run.py')]
if len(arg) != 0: if len(arg) != 0:
command.append(arg[0]) command.append(arg[0])

13
thrax_example.grm Normal file
View File

@ -0,0 +1,13 @@
# thraxcompiler --input_grammar=thrax_example.grm --output_far=example.far
# thraxrewrite-tester --far=example.far --rules=First
#
# przykłady z https://www.cs.jhu.edu/~jason/465/hw-ofst/hw-ofst.pdf
Zero = "0";
One = "1";
Bit = Zero | One;
export First = Optimize[Zero Zero* Bit* One One One One?];
export Second = Optimize[ (Zero One (One One)* )* | (One (One One)* Zero )* | Zero* | (Zero One (One One)* Zero )* ];
export Third = Optimize["a" (("b":"x")+ | ("c"+ : "y") | ("":"fric")) "a"];