Skip to content

Commit 6fc0500

Browse files
committed
translate grammar/nonterminals
1 parent 1a0b569 commit 6fc0500

File tree

3 files changed

+238
-235
lines changed

3 files changed

+238
-235
lines changed

docs/grammar.cpp

Lines changed: 50 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,52 @@
1-
<программа> ::= {<программа>}<элемент_программы>
2-
<элемент_программы> ::= (<класс>|<реализация_метода_класса>|<декларация_переменных>|<функция>)
3-
<класс> ::= class <идентификатор>"{"{[<спецификатор_доступа>:]{(<декларация_свойств_класса>|<метод_класса>)}}"}";
4-
<спецификатор_доступа> ::= (public|private)
5-
<метод_класса> ::= [((<тип_переменной>|void) |~)]<идентификатор>"("[<список_аргументов>]")"<блок>
6-
<реализация_метода_класса> ::= ([(<тип_переменной>|void) ]<идентификатор>::|<идентификатор>::~)<идентификатор>"("[<список_аргументов>]")"<блок>
7-
<функция> ::= (<тип_переменной>|void) <идентификатор>"("[<список_аргументов>]")"<блок>
8-
<список_аргументов> ::= {<список_аргументов>,}<аргумент>
9-
<аргумент> ::= [const ]<тип_переменной>[&]<идентификатор>
10-
<блок> ::= "{"{<элемент_блока>}"}"
11-
<элемент_блока> ::= (<декларация_переменных>|[(<выражение>|<возврат>)];|<цикл>|<ветвление>)
12-
<возврат> ::= return[ <выражение>]
13-
<выражение> ::= [<выражение>,]<оператор_1>
14-
<оператор_1> ::= (<объект>(=|+=|-=|*=|/=|%=)<оператор_1>|<оператор_2>)
15-
<оператор_2> ::= [<оператор_2>"||"]<оператор_3>
16-
<оператор_3> ::= [<оператор_3>&&]<оператор_4>
17-
<оператор_4> ::= [<оператор_4>(==|!=)]<оператор_5>
18-
<оператор_5> ::= [<оператор_5>("<"|"<"=|">"|">"=)]<оператор_6>
19-
<оператор_6> ::= [<оператор_6>(+|-)]<оператор_7>
20-
<оператор_7> ::= [<оператор_7>(*|/|%)]<оператор_8>
21-
<оператор_8> ::= ([(+|-|!|*)]<оператор_9>|(++|--|&)<объект>)
22-
<оператор_9> ::= ("("<выражение>")"|<литерал>|<объект>[(++|--)]|<вызов_функции>)
23-
<вызов_функции> ::= <объект>"("[<выражение>]")"
24-
<объект> ::= [<идентификатор>(.|-">")]<идентификатор>
25-
<декларация_свойств_класса> ::= [const ]<тип_переменной> <список_свойств_класса>;
26-
<декларация_переменных> ::= [const ]<тип_переменной> <список_переменных>;
27-
<тип_переменной> ::= (int|double|char|bool|<идентификатор>)
28-
<список_свойств_класса> ::= {<список_свойств_класса>,}[*]<идентификатор>
29-
<список_переменных> ::= {<список_переменных>,}[*]<идентификатор>[=<оператор_1>]
30-
<цикл> ::= (<while-цикл>|<do-while-цикл>|<for-цикл>)
31-
<while-цикл> ::= while"("<выражение>")"<блок>
32-
<do-while-цикл> ::= do<блок>while"("<выражение>")";
33-
<for-цикл> ::= for"("<выражение>;<выражение>;<выражение>")"<блок>
34-
<ветвление> ::= if"("<выражение>")"<блок>[else<блок>]
35-
// lexical rules
36-
<идентификатор> ::= <буква>{(<буква>|<цифра>|_)}
37-
<литерал> ::= (<логический_литерал>|<целая_константа>|<константа_с_плавающей_точкой>|<символьная_константа>|<строковый_литерал>)
1+
<program> ::= {<program>}<program_element>
2+
<program_element> ::= (<class>|<class_method_impl>|<vars_declaration>|<function>)
3+
<class> ::= class <id>"{"{[<access_spec>:]{(<class_props_declaration>|<class_method>)}}"}";
4+
<access_spec> ::= (public|private)
5+
<class_method> ::= [((<var_type>|void) |~)]<id>"("[<arguments_list>]")"<block>
6+
<class_method_impl> ::= ([(<var_type>|void) ]<id>::|<id>::~)<id>"("[<arguments_list>]")"<block>
7+
<function> ::= (<var_type>|void) <id>"("[<arguments_list>]")"<block>
8+
<arguments_list> ::= {<arguments_list>,}<argument>
9+
<argument> ::= [const ]<var_type>[&]<id>
10+
<block> ::= "{"{<block_element>}"}"
11+
<block_element> ::= (<vars_declaration>|[(<expression>|<return>)];|<loop>|<branching>)
12+
<return> ::= return[ <expression>]
13+
<expression> ::= [<expression>,]<operator_1>
14+
<operator_1> ::= (<object>(=|+=|-=|*=|/=|%=)<operator_1>|<operator_2>)
15+
<operator_2> ::= [<operator_2>"||"]<operator_3>
16+
<operator_3> ::= [<operator_3>&&]<operator_4>
17+
<operator_4> ::= [<operator_4>(==|!=)]<operator_5>
18+
<operator_5> ::= [<operator_5>("<"|"<"=|">"|">"=)]<operator_6>
19+
<operator_6> ::= [<operator_6>(+|-)]<operator_7>
20+
<operator_7> ::= [<operator_7>(*|/|%)]<operator_8>
21+
<operator_8> ::= ([(+|-|!|*)]<operator_9>|(++|--|&)<object>)
22+
<operator_9> ::= ("("<expression>")"|<literal>|<object>[(++|--)]|<function_call>)
23+
<function_call> ::= <object>"("[<expression>]")"
24+
<object> ::= [<id>(.|-">")]<id>
25+
<class_props_declaration> ::= [const ]<var_type> <class_props_list>;
26+
<vars_declaration> ::= [const ]<var_type> <vars_list>;
27+
<var_type> ::= (int|double|char|bool|<id>)
28+
<class_props_list> ::= {<class_props_list>,}[*]<id>
29+
<vars_list> ::= {<vars_list>,}[*]<id>[=<operator_1>]
30+
<loop> ::= (<while-loop>|<do-while-loop>|<for-loop>)
31+
<while-loop> ::= while"("<expression>")"<block>
32+
<do-while-loop> ::= do<block>while"("<expression>")";
33+
<for-loop> ::= for"("<expression>;<expression>;<expression>")"<block>
34+
<branching> ::= if"("<expression>")"<block>[else<block>]
3835

39-
<логический_литерал> ::= (true|false)
40-
<константа_с_плавающей_точкой> ::= [(+|-)](<цифра>{<цифра>}.[<цифра>{<цифра>]|.<цифра>{<цифра>})[(e|E)<десятичная_целая_константа>]
41-
<целая_константа> ::= (<десятичная_целая_константа>|<восьмеричная_целая_константа>|<шестнадцатеричная_целая_константа>)
42-
<десятичная_целая_константа> ::= [(+|-)]<цифра>{<цифра>}
43-
<восьмеричная_целая_константа> ::= [(+|-)]0{(0|…|7)}
44-
<шестнадцатеричная_целая_константа> ::= [(+|-)]0x(0|…|9|a|…|f|A|…F){(0|…|9|a|…|f|A|…F)}
45-
<цифра> ::= (0|…|9)
46-
<буква> ::= (a|…|z|A|…|Z)
47-
<символьная_константа> ::= '(?|\('|"""|n|t))'
48-
<строковый_литерал> ::= """{(?|\('|"""|n|t))}"""
36+
// lexical stuff
37+
<id> ::= <letter>{(<letter>|<digit>|_)}
38+
<literal> ::= (<boolean_literal>|<integer_literal>|<floating_point_literal>|<char_literal>|<string_literal>)
4939

50-
// lvalue == объект
51-
// rvalue == выражение
40+
<boolean_literal> ::= (true|false)
41+
<floating_point_literal> ::= [(+|-)](<digit>{<digit>}.[<digit>{<digit>]|.<digit>{<digit>})[(e|E)<decimal_literal>]
42+
<integer_literal> ::= (<decimal_literal>|<octal_literal>|<hex_literal>)
43+
<decimal_literal> ::= [(+|-)]<digit>{<digit>}
44+
<octal_literal> ::= [(+|-)]0{(0|...|7)}
45+
<hex_literal> ::= [(+|-)]0x(0|...|9|a|...|f|A|...F){(0|...|9|a|...|f|A|...F)}
46+
<digit> ::= (0|...|9)
47+
<letter> ::= (a|...|z|A|...|Z)
48+
<char_literal> ::= '(...|\('|"""|n|t))'
49+
<string_literal> ::= """{(...|\('|"""|n|t))}"""
50+
51+
// lvalue == object
52+
// rvalue == expression

0 commit comments

Comments
 (0)