-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathaVene.g4
125 lines (101 loc) · 3.83 KB
/
aVene.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
grammar aVene;
programm
: lauseteJada
;
lauseteJada
: lause (';' lause)*
;
lause
: ifLause
| whileLause
| forLause
| omistamine
| muutujaDeklaratsioon
| avaldis
| array
| list
| mixTypeArray
;
ifLause
: ('ежели'|'ЕЖЕЛИ'|'Ежели') '('avaldis')' ('тогда'|'ТОГДА'|'Тогда') '{'lauseteJada'}' ('иначе'|'ИНАЧЕ'|'Иначе') '{'lauseteJada'}'
;
whileLause
: ('доколе'|'ДОКОЛЕ'|'Доколе') '('avaldis')' '{'lauseteJada'}'
;
forLause
: ('покаместъ'|'ПОКАМЕСТЪ'|'Покаместъ') '(' muutujaDeklaratsioon ';' avaldis ';' avaldis')' '{'lauseteJada'}'
;
array
: ('сборище'|'СБОРИЩЕ'|'Сборище') MuutujaNimi ('=' '[' ((Soneliteraal (',' Soneliteraal)*)| (Arvuliteraal (',' Arvuliteraal)*)| (MuutujaNimi (',' MuutujaNimi)*))? ']')?
;
list
: ('перечень'|'ПЕРЕЧЕНЬ'|'Перечень') MuutujaNimi ('=' '[|' ((Soneliteraal (',' Soneliteraal)*)| (Arvuliteraal (',' Arvuliteraal)*)| (MuutujaNimi (',' MuutujaNimi)*))? '|]')?
;
mixTypeArray
: ('скопище'|'СКОПИЩЕ'|'Скопище') MuutujaNimi ('=' '[' (Soneliteraal|Arvuliteraal|MuutujaNimi)? (',' Soneliteraal|',' Arvuliteraal|',' MuutujaNimi)* ']')?
;
omistamine
: MuutujaNimi '=' avaldis
| MuutujaNimi '=' '[' ((Soneliteraal (',' Soneliteraal)*)| (Arvuliteraal (',' Arvuliteraal)*)| (MuutujaNimi (',' MuutujaNimi)*))? ']'
| MuutujaNimi '=' '[|' ((Soneliteraal (',' Soneliteraal)*)| (Arvuliteraal (',' Arvuliteraal)*)| (MuutujaNimi (',' MuutujaNimi)*))? '|]'
| MuutujaNimi '=' '[' (Soneliteraal|Arvuliteraal|MuutujaNimi)? (',' Soneliteraal|',' Arvuliteraal|',' MuutujaNimi)* ']'
;
muutujaDeklaratsioon
: ('аргумент'|'АРГУМЕНТ'|'Аргумент') MuutujaNimi ('=' avaldis)?
;
avaldis
: avaldis6
;
avaldis6
: avaldis5 ('>'|'<'|'>='|'<='|'=='|'!=') avaldis5 # Vordlemine
| avaldis5 # TriviaalneAvaldis6
;
avaldis5
: avaldis5 ('+='|'-=') avaldis4 # LiitLahOmistamisega
| avaldis4 # TriviaalneAvaldis5
;
avaldis4
: avaldis4 ('+'|'-') avaldis3 # LiitmineLahutamine
| avaldis3 # TriviaalneAvaldis4
;
avaldis3
: avaldis3 ('*'|'/') avaldis2 # KorrutamineJagamine
| avaldis3 '%' avaldis2 # JagamineJagatisega
| avaldis2 # TriviaalneAvaldis3
;
avaldis2
: '-' avaldis2 # UnaarneMiinus
| avaldis1 # TriviaalneAvaldis2
;
avaldis1
: MuutujaNimi '(' (avaldis (',' avaldis)*)? ')' # FunktsiooniValjakutse
| MuutujaNimi '[' Arvuliteraal ']' # MassiiviKasutamine
| avaldis0 # TriviaalneAvaldis1
;
avaldis0
: MuutujaNimi # MuutujaNimiR // Lisasin nende margendite nimede
| Arvuliteraal # ArvuliteraalR // loppu R, et need ei langeks kokku
| Soneliteraal # SoneliteraalR // lekseri reeglite nimedega.
| Boolean # BooleanR
| '(' avaldis ')' # Suluavaldis
;
MuutujaNimi
: [а-яА-Я][а-яА-Я0-9_]*
;
Boolean
: 'истина'
| 'ложь'
;
Arvuliteraal
: ('0'|[1-9][0-9]*)('.'[0-9]+)?
;
Soneliteraal
: '"' ~["\n\r]* '"' // Tildega saab valjendada eitust.
; // Siin ~["\n\r] tahistab suvalist tahte
// mis pole jutumark ega reavahetuse sumbol.
Kommentaar
: '/*' .*? '*/' -> skip
;
Whitespace
: [ \t\r\n]+ -> skip
;