Repozytorium do projektu w ramach przedmiotu 'Teoria Kompilacji i Kompilatory' na AGH z 2022 roku
symbol | token |
---|---|
🍎 | int |
🍌 | long |
🍇 | float |
🍒 | double |
🍓 | char |
🍉 | string |
❔ | boolean |
🌟 | void |
⚡️ | null |
✅ | true |
🚫 | false |
⏮ | assign |
↪️ | for |
🔄 | while |
⏸ | if |
⏯ | else |
💡 | switch |
🛄 | case |
📬 | return |
💥 | then |
⛏ | do |
🍞 | default |
🍺 | break |
📞 | call |
and | |
or | |
❕ | not |
➕ | plus |
➖ | minus |
✖️ | times |
➗ | devide |
🌗 | equals |
🌝 | greater |
🌚 | lower |
🌒 | greter_or_equal |
🌔 | lower_or_equal |
🌜 | l_parenthesis |
🌛 | r_parenthesis |
🤜 | l_square_bracket |
🤛 | r_square_bracket |
🔚 | end |
🖨️ | |
⚙️ | function |
[_a-zA-Z][_a-zA-Z0-9]* | identifier |
\d+.{0,1}\d* | number_unsigned |
\".*\" | text |
- "Program" = "Blok"
- "Blok" = ["Blok_deklaracji"] 'end' ["Blok_instrukcji"] 'end'
- "Blok_deklaracji" = {"Dek_fun"}
- "Dek_fun" = 'function' ("Var_sym" | 'void') 'identifier' 'l_parenthesis' {"Var_sym" 'identifier'} 'r_parenthesis' {"Instrukcja"} 'return' "Wyrazenie" 'end'
- "Blok_instrukcji" = {"Instrukcja"}
- "Instrukcja" = ("Instr_inicjuj" | "Instr_podstaw" | "Instr_wywolaj" | "Instr_if" | "Instr_while" | "Instr_for" | "Wypisz" | "Instr_switch") 'end'
- "Instr_inicjuj" = ("Var_liczba_sym" 'identifier' 'assign' ("Liczba" | 'null')) | ('string' 'identifier' 'assign' ('text' | 'null'))
- "Instr_podstaw" = 'identifier' 'assign' ("Wyrazenie" | 'null')
- "Instr_wywolaj" = 'call' 'identifier' 'l_parenthesis' {"Wyrazenie"} 'r_parenthesis'
- "Instr_if" = 'if' "Warunek" 'then' "Instrukcja" {"Instrukcja"} ['end' 'else' "Instrukcja" {"Instrukcja"}]
- "Instr_while" = 'while' "Warunek" 'do' {"Instrukcja"}
- "Instr_for" = 'for' "For_warunek" 'do' {"Instrukcja"}
- "Wypisz" = 'print' ("Wyrazenie" | 'text')
- "Instr_switch" = 'switch' 'l_parenthesis' "Wyrazenie" 'r_parenthesis' "Case_blok" {"Case_blok"} "Case_default"
- "Case_blok" = 'case' 'l_parenthesis' "Wyrazenie" 'r_parenthesis' 'then' {"Instrukcja"} ['break'] 'end'
- "Case_default" = 'default' 'then' {"Instrukcja"} 'end'
- "Var_sym" = ("Var_liczba_sym" | 'string' | 'boolean' | 'char')
- "Var_liczba_sym" = ('int' | 'long' | 'float' | 'double')
- "Wyrazenie" = ("Skladnik" {"Oper_add" "Skladnik"} | 'true' | 'false')
- "Skladnik" = "Czynnik" {"Oper_mul" "Czynnik"}
- "Oper_add" = ('plus' | 'minus')
- "Oper_mul" = ('times' | 'divide')
- "Czynnik" = ('identifier' | "Liczba" | "Instr_wywolaj" | "Wyr_w_naw")
- "Liczba" = ['minus'] 'number_unsigned'
- "Wyr_w_naw" = 'l_parenthesis' "Wyrazenie" 'r_parenthesis'
- "Warunek" = ['not'] "Warunek_prosty" {"Oper_war" "Warunek_prosty"}
- "Oper_war" = ('and' | 'or')
- "Warunek_prosty" = "Wyrazenie" ("Oper_porownania") "Wyrazenie"
- "Oper_porownania" = ('equals' | "not_equals" | 'greater' | 'lower' | 'greter_or_equal' | 'lower_or_equal')
- "not_equals" = 'not' 'equals'
- "For_warunek" = "Instr_inicjuj" "Wyrazenie" "Instr_podstaw"
Przykład kodu
⚙️ 🍎 add🌜🍎 a 🍎 b🌛
📬 a ➕ b 🔚
🔚
🍎 x ⏮ 5 🔚
🍎 y ⏮ 6 🔚
🍎 wynik ⏮ ⚡️ 🔚
wynik ⏮ 📞 add🌜x y🌛 🔚
⏸ wynik 🌘 10 💥
🖨️ "Wiecej niz 10" 🔚 🔚
⏯
🖨️ "Mniej niz 10" 🔚 🔚
🔚