Описание синтаксиса входного языка
<класс> ::= class <имя класса> { <набор объявлений> }
<имя класса> ::= <идентификатор>
<набор объявлений> ::= <объявление> | <набор объявлений> <объявление>
<объявление> ::= <объявление атрибута> | <объявление метода>
<объявление атрибута> ::= <уровень доступа> <тип> <имя атрибута>;
<объявление метода> ::= <уровень доступа> <тип> <имя метода> (<формальные параметры>){<блок>}
<имя атрибута> ::= <идентификатор>
<имя метода> ::= <идентификатор>
<уровень доступа> ::= public | private
<тип> ::= <встроенный тип> | <имя класса>
<встроенный тип> ::= int | float | compl | matr | char
<формальные параметры>::= ε |<объявление переменной>|<формальные параметры>,<объявление переменной>
<блок> ::= <элемент блока> | <блок> <элемент блока>
<элемент блока> ::= <объявление переменной> | <цикл с постусловием> | <условный оператор> | <оператор присваивания> | <выражение>;
<объявление переменной>::=<тип> <имя переменной>;
<имя переменной> ::= <идентификатор>
<оператор присваивания> ::= <левое выражение> <знак присваивания> <выражение>
<знак присваивания> ::= += | *= | -= | /= | =
<левое выражение>::= <левое выражение> <вызов атрибута класса> | <имя переменной> | <элемент матрицы>
<вызов атрибута класса> ::= . <имя аттрибута>
<выражение> ::= <выражение> <знак аддитивной операции> <слагаемое> | <слагаемое>
<знак аддитивной операции> ::= + | -
<слагаемое> ::= <слагаемое> <знак мультипликативной операции> <множитель> | <множитель>
<знак мультипликативной операции> ::= / | *
<множитель> ::= <унарная операция> | <унарный операнд>
<унарная операция> ::= <унарный операнд>++ | <унарный операнд>--
<унарный операнд> ::= <конечный унарный операнд> <знак специальной унарной операции> |
<конечный унарный операнд>
<знак специальной унарной операции> ::= .len | .hei | .trans | .re | .im | .mod
<конечный унарный операнд> ::= <конечный унарный операнд><вызов метода класса> | <литерал> | (<выражение>) | <оператор new> | <левое выражение>
<элемент матрицы>::= <имя переменной>[<выражение>, <выражение>]
<вызов метода класса> ::= . <имя метода> ( <фактические параметры> )
<фактические параметры> ::= ε | <выражение> | <фактические параметры>, <выражение>
<оператор new> ::= new <имя класса> ( <фактические параметры> )
<условный оператор>::= if (<логическое выражение>) { <блок> } |
if (<логическое выражение>) { <блок> } else { <блок> }
<цикл с постусловием> ::= do { <блок> } while ( <логическое выражение> )
<логическое выражение> ::= <логическое выражение> || <конъюнкция> | <конъюнкция>
<конъюнкция>::= <конъюнкция> && <логический операнд> | <логический операнд>
<логический операнд>::=!<отношение>|<отношение>
<отношение>::= <выражение> <знак сравнения> <выражение>
<знак сравнения> ::= != | = =| > | >= | < | <=
<ненулевая цифра> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<цифра> ::= 0 | <ненулевая цифра>
<целое ненулевое число без знака> ::= <ненулевая цифра>| <целое ненулевое число без знака><цифра>
<целое ненулевое число>::= - <целое ненулевое число без знака>| + <целое ненулевое число без знака>
| <целое ненулевое число без знака>
<целое число> ::= 0 | <целое ненулевое число>
<нули> ::= 0 | <нули> 0
<вещественное число> ::= <целое число>. <целое число> | <целое число>. <целое ненулевое число без знака>
| <целое число>. <нули> <целое ненулевое число без знака>
<комплексное число> ::= ( <вещественное число> ; < вещественное число > )
| ( < вещественное число > ; ) | ( ; < вещественное число > )
<набор комплексных чисел> ::= <комплексное число> | <набор комплексных чисел> , <комплексное число>
<строка матрицы> ::= { <набор комплексных чисел> }
<набор строк> ::= < строка матрицы > | < набор строк> ; < строка матрицы >
<матрица> ::= { <набор строк> }
<символ> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|
A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
<идентификатор> ::= <символ> | <переменная> <символ> | <переменная> <цифра>
<литерал> ::= <целое число> | <вещественное число> | <комплексное число> | <матрица>