loom

Форк
0
/
sbl-.fuze 
210 строк · 8.9 Кб
1
/*  Описание грамматики базового языка SIMODO
2

3
    SIMODO Base Language for scripts.
4
*/
5

6
include "sbl-script";
7

8
main список_операторов;
9

10

11
/*  Определение перечисления
12
******************************************************************************/
13
оператор_описания
14
    = определение_перечисления
15
    ;
16

17
определение_перечисления
18
    = начало_определения_перечисления наименование_перечисления тело_перечисления ";"
19
    ;
20
    начало_определения_перечисления
21
        = "enum"
22
        ;
23
    наименование_перечисления
24
        = ID
25
        ;
26

27
тело_перечисления
28
    = начало_тела_перечисления список_элементов_перечисления "}"
29
    = начало_тела_перечисления список_элементов_перечисления "," "}"
30
    ;
31
    начало_тела_перечисления
32
        = "{"
33
        ;
34
    список_элементов_перечисления
35
        = элемент_перечисления
36
        = список_элементов_перечисления "," элемент_перечисления
37
        ;
38

39
элемент_перечисления
40
    = наименование_элемента_перечисления "=" значение_элемента_перечисления
41
    = наименование_элемента_перечисления
42
    ;
43
    наименование_элемента_перечисления
44
        = ID
45
        ;
46
    значение_элемента_перечисления
47
        = NUMBER
48
        = ANNOTATION
49
        ;
50

51
/*  Определение кортежа
52
******************************************************************************/
53
//оператор_описания
54
//    = определение_кортежа
55
//    ;
56

57
//определение_кортежа
58
//    = начало_определения_кортежа перечень_внешних_интерфейсов название_кортежа тело_кортежа ";"
59
//    = начало_определения_кортежа название_кортежа тело_кортежа ";"
60
//    = начало_определения_кортежа название_кортежа ";"
61
//    ;
62

63
//// TODO: Нужно предусмотреть модификаторы неизменяемых и некопируемых кортежей
64
//начало_определения_кортежа
65
//    = "struct"
66
//    = "class"
67
//    ;
68

69
//название_кортежа
70
//    = ID
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
//    = "override"
111
//    = "method"
112
//    = "pure"
113
//    ;
114

115
//определение_атрибута
116
//    = наименование_типа список_объявлений_переменных_атрибутов
117
//    ;
118
//    список_объявлений_переменных_атрибутов
119
//        = определение_переменной_атрибута
120
//        = список_объявлений_переменных_атрибутов "," определение_переменной_атрибута
121
//        ;
122

123
//определение_переменной_атрибута
124
//    = наименование_переменной_атрибута размерность_массива инициализация_переменной геттеры_сеттеры
125
//    = наименование_переменной_атрибута инициализация_переменной геттеры_сеттеры
126
//    = наименование_переменной_атрибута размерность_массива геттеры_сеттеры
127
//    = наименование_переменной_атрибута геттеры_сеттеры
128
//    = наименование_переменной_атрибута размерность_массива инициализация_переменной ";"
129
//    = наименование_переменной_атрибута инициализация_переменной ";"
130
//    = наименование_переменной_атрибута размерность_массива ";"
131
//    = наименование_переменной_атрибута ";"
132
//    ;
133

134
//наименование_переменной_атрибута
135
//    = ID
136
//    ;
137

138
//геттеры_сеттеры
139
//    = геттеры_сеттеры_с_телом_в_конце
140
//    = геттеры_сеттеры_без_тела_в_конце ";"
141
//    ;
142

143
//геттеры_сеттеры_с_телом_в_конце
144
//    = начало_геттера_сеттера тело_функции начало_геттера_сеттера тело_функции
145
//    = начало_геттера_сеттера начало_геттера_сеттера тело_функции
146
//    = начало_геттера_сеттера тело_функции
147
//    ;
148

149
//геттеры_сеттеры_без_тела_в_конце
150
//    = начало_геттера_сеттера тело_функции начало_геттера_сеттера
151
//    = начало_геттера_сеттера начало_геттера_сеттера
152
//    = начало_геттера_сеттера
153
//    ;
154

155
//начало_геттера_сеттера
156
//    = "get"
157
//    = "set"
158
//    ;
159

160
/*  Оператор генерации исключения
161
******************************************************************************/
162
оператор_выполнения
163
    = оператор_генерации_исключения
164
    ;
165

166
оператор_генерации_исключения
167
    = "throw" выражение ";"
168
    ;
169

170
/*  Оператор перехвата исключений
171
******************************************************************************/
172
оператор_описания
173
    = оператор_перехвата_исключений
174
    ;
175

176
оператор_перехвата_исключений
177
    = начало_оператора_перехвата_исключений блок_операторов перечень_перехватов_исключений
178
    ;
179
    начало_оператора_перехвата_исключений
180
        = "try"
181
        ;
182

183
перечень_перехватов_исключений
184
    = блок_перехвата_исключения
185
    = перечень_перехватов_исключений блок_перехвата_исключения
186
    ;
187

188
блок_перехвата_исключения
189
    = начало_блока_перехвата_исключения "(" тип_исключения ID ")" блок_операторов
190
    ;
191
    начало_блока_перехвата_исключения
192
        = "catch"
193
        ;
194
    тип_исключения
195
        = ID
196
        ;
197

198
/*  Оператор отложенного выполнения
199
******************************************************************************/
200
оператор_описания
201
    = оператор_finally
202
    ;
203

204
оператор_finally
205
    = начало_оператора_отложенного_выполнения оператор_выполнения
206
    ;
207

208
начало_оператора_отложенного_выполнения
209
    = "finally"
210
    ;
211

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.