Interpret jednoduchého jazyka s C-like syntaxí. Podporuje globální a lokální proměnné, funkce, procedury, pole, výrazy, podmínky a cykly. Projekt je napsán v Java 17 a sestaven pomocí Maven.
- Datové typy:
int,real,string(+ literálytrue/falsev podmínkách) - Proměnné: globální (
global) i lokální deklarace - Pole: jedno- i vícerozměrná (deklarace i indexace)
- Funkce & procedury: parametry, návratové hodnoty (
function), podprogramy bez návratu (procedure) - Řídicí struktury:
if/else,while,for - Výstup:
print(...) - Výrazy:
+ - * /, porovnání== != < <= >= >, logika&& || - Syntaxe: definována EBNF (viz níže)
├─ pom.xml
├─ README.md
└─ src/
├─ main/java/
│ └─ cz/upce/fei/
│ ├─ astnode/ # Definice uzlů abstraktního syntaktického stromu (AST)
│ ├─ condition/ # Uzly a logika pro vyhodnocování podmínek (if, while, logické výrazy)
│ ├─ declaration/ # Deklarace proměnných (globální i lokální), typů a polí
│ ├─ exception/ # Vlastní výjimky interpretru (syntaktické, sémantické chyby apod.)
│ ├─ expression/ # Výrazy (aritmetické, logické, přístup k proměnným a polím)
│ ├─ function/ # Uzly a logika pro funkce (definice, parametry, návratové hodnoty)
│ ├─ interpreter/ # Vlastní interpret AST (provádění příkazů, správa běhového prostředí)
│ ├─ lexer/ # Tokenizace vstupu (klíčová slova, literály, operátory…)
│ ├─ main/ # Spouštěcí třídy a entry point aplikace (např. Main.java)
│ ├─ parameters/ # Parametry funkcí a procedur, práce s předáváním hodnot
│ ├─ parser/ # Syntaktická analýza → převod tokenů do AST
│ ├─ procedure/ # Uzly a logika pro procedury (volání, těla bloků)
│ ├─ semanticanalyzer/ # Sémantická analýza (kontrola typů, deklarace proměnných, kontext)
│ └─ statement/ # Uzly a logika pro příkazy (if, while, for, přiřazení, print…)
└─ test/java/ # Jednotkové testy (ověření lexeru, parseru, interpretru apod.)
- Java 17+
- Apache Maven 3.8+
global string jmeno = "Petr";
procedure main() {
int i = 0;
while(i < 3) {
print("Ahoj", jmeno);
i = i + 1;
}
}function int soucet(int a, int b) {
return a + b;
}
procedure main() {
int x = 5;
int y = 7;
int s = soucet(x, y);
print("Součet: ",s);
}global int konst = 10;
global int A[3] = {1, 2, 3};
global int M[2][2] = {
{1, 2},
{3, 4}
};
procedure main() {
int i = 0;
while (i < 3) {
int hodnota = A[i];
print(hodnota);
i = i + 1;
}
int hodnota = M[1][0];
print("M[1][0] =", hodnota);
}global int a = 1;
global int c[4] = {1, 2, 3, 4};
global int result;
global string greeting = "Vítejte!";
procedure main() {
int b = 5;
int sum = 0;
string message = "Výpočet matice:";
int matrix[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
print(greeting);
print(message);
sum = calculate_sum(matrix);
print("Součet všech prvků matice: ", sum);
result = factorial(5);
print("Faktoriál čísla 5 je: ", result);
}
function int calculate_sum(int m[3][3]) {
int i, j;
int total = 0;
for (i = 0; i < 3; i = i + 1) {
for (j = 0; j < 3; j = j + 1) {
total = total + m[i][j];
}
}
return total;
}
function int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}-
Program:
program = { global_declaration | function_declaration | procedure_declaration } ; -
Typy a literály:
type = "int" | "real" | "string" ;
integer = /\d+/ ; real = /\d+\.\d+/ ; string = /"[^"]*"/ ;
value = real | integer | string ; -
Globální proměnné:
global_declaration = "global" type global_variable_list ";" ;
global_variable_declaration = ident [ "[" integer "]" { "[" integer "]" } ] [ "=" ( value | global_array_initializer ) ] ; -
Lokální proměnné:
local_declaration = type variable_list ";" ;
variable_declaration = ident [ "[" expression "]" { "[" expression "]" } ] [ "=" initializer ] ; -
Inicializátory polí:
array_initializer = "{" value_or_nested_initializer { "," value_or_nested_initializer } "}" ; -
Výrazy:
expression = function_call | term { ("+" | "-" | "*" | "/") term } ;
logical_operator = "&&" | "||" ;
comparison_operator = "==" | "!=" | "<" | "=<" | ">=" | ">" ;
condition = logical_term { logical_operator logical_term } | "true" | "false" ; -
Příkazy:
statement = local_declaration | if_statement | while_statement | assignment_statement | for_statement | return_statement | print_statement | function_call ; -
Řídicí struktury:
if_statement = "if" "(" condition ")" block [ "else" block ] ;
while_statement = "while" "(" condition ")" block ;
for_statement = "for" "(" [assignment_statement condition ";" for_assignment_statement] | [condition] ")" block ; -
Funkce & procedury:
function_declaration = "function" type ident "(" [ parameter_list ] ")" block ;
procedure_declaration = "procedure" ident "(" [ parameter_list ] ")" block ;
Apache-2.0 – Copyright (c) 2025 Petr Šafrata