loom

Форк
0
/
teragraph.fuze 
99 строк · 3.1 Кб
1
/*
2
    Набросок на базе SQL.
3
    Декларативный язык.
4
*/
5

6
main программа;
7

8
include "include/expression";
9
include "include/json5-array";
10
include "include/json5-object";
11

12
программа = список_операторов;
13

14
список_операторов
15
    = оператор
16
    = список_операторов оператор
17
    ;
18

19
оператор 
20
    = select_оператор
21
    = ";"                       { ast.addNode(ast.teragraph.host, ast.teragraph.op.Print, 0); }
22
    ;
23
    
24
select_оператор
25
    = начало_оператора_select блок_select блок_from 
26
                                { ast.goParent(); }
27
    = начало_оператора_select блок_select блок_from блок_where
28
                                { ast.goParent(); }
29
    ;
30
    
31
начало_оператора_select
32
    = "select"                  { 
33
                                    ast.addNode_StepInto(ast.teragraph.host, ast.teragraph.op.Select, 0);
34
                                    ast.addNode_StepInto(ast.teragraph.host, ast.teragraph_.op.Select_Select, 0);
35
                                }
36
    ;
37
    
38
блок_select
39
    = "*"                       { 
40
                                    ast.addNode(ast.teragraph.host, ast.teragraph_.op.Select_Select_Asterisk, 0); 
41
                                    ast.goParent();
42
                                }
43
    = список_выражений_select
44
                                { ast.goParent(); }
45
    ;
46
    
47
список_выражений_select
48
    = элемент_выражения_select
49
    = список_выражений_select "," элемент_выражения_select
50
    ;
51

52
элемент_выражения_select
53
    = выражение
54
    = выражение "as" наименование
55
    ;
56
    
57
наименование 
58
    = ID
59
    ;
60

61
выражение
62
    = "(" select_оператор ")"
63
    ;
64

65
блок_from
66
    = начало_блока_from список_источников_данных
67
                                { ast.goParent(); }
68
    ;
69
    
70
начало_блока_from
71
    = "from"                    { ast.addNode_StepInto(ast.teragraph.host, ast.teragraph_.op.Select_From, 0); } 
72
    ;
73

74
список_источников_данных
75
    = элемент_списка_источников_данных
76
    = список_источников_данных "," элемент_списка_источников_данных
77
    ;
78

79
элемент_списка_источников_данных
80
    = источник_данных
81
    = источник_данных "as" наименование
82
    ;
83
    
84
источник_данных
85
    = структура_массива
86
    ;
87

88
блок_where
89
    = начало_блока_where выражение         
90
                                    { ast.goParent(); }
91
    ;
92

93
начало_блока_where
94
    = "where"                       { ast.addNode_StepInto(ast.teragraph.host, ast.teragraph_.op.Select_Where, 0); }
95
    ;
96
    
97
элемент_массива
98
    = структура_объекта
99
    ;
100
    
101
    

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

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

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

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