diff --git a/TaskX07/Makefile b/TaskX07/Makefile new file mode 100644 index 0000000..12e25d4 --- /dev/null +++ b/TaskX07/Makefile @@ -0,0 +1,9 @@ + +# .far to specjalny format do przechowywania spakowanych transduktorów + +BINARIES += TaskX07/addfour.far + +TaskX07/run: TaskX07/addfour.far + +TaskX07/addfour.far: TaskX07/addfour.grm + LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/fst" thraxcompiler --input_grammar=$< --output_far=$@ diff --git a/TaskX07/addfour.grm b/TaskX07/addfour.grm new file mode 100644 index 0000000..220a612 --- /dev/null +++ b/TaskX07/addfour.grm @@ -0,0 +1,17 @@ +add_four_to_digit = ("0" : "4") | ("1": "5") | ("2": "6") | ("3": "7") | ("4" : "8") | ("5" : "9") | ("6" : "0S") | ("7" : "1S") | ("8" : "2S") | ("9" : "3S"); + +digit_unchanged = "0" | "1" | "2" | "3" | "4" | ("5" : "5") | ("6" : "6") | ("7" : "7" ) | ("8" : "8") | ("9" : "9"); + +decimal = ("S0" : "1") | ("S1" : "2") | ("S2" : "3") | ("S3" : "4") | ("S4" : "5") | ("S5" : "6") | ("S6" : "7") | ("S7" : "8") | ("S8" : "9") | ("S9" : "0S"); + +number_unchanged = digit_unchanged+ ; + +add_four_simple = add_four_to_digit number_unchanged? ; + +s_is_one = "S" : "1"; + +handle_carry = CDRewrite[number_unchanged? decimal number_unchanged?, "", "", ("S" | number_unchanged)*]; + +check_s = CDRewrite[number_unchanged? s_is_one, "", "", ("S" | number_unchanged)*]; + +export PROCESS = Optimize[Reverse[add_four_simple @ handle_carry @ handle_carry @ handle_carry @ handle_carry @ check_s]]; diff --git a/TaskX07/run b/TaskX07/run new file mode 100644 index 0000000..3b5e2bb --- /dev/null +++ b/TaskX07/run @@ -0,0 +1,3 @@ +#!/bin/bash + +LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/fst" thraxrewrite-tester --far=TaskX07/addfour.far --rules=PROCESS