loom
1// Грамматика языка описания грамматики Fuze
2
3include "lex/lex-fuze.fuze";
4
5main грамматика;
6
7грамматика
8= оператор_грамматики
9= грамматика оператор_грамматики
10;
11оператор_грамматики
12= именованный_обработчик
13= оператор_вставки
14= основная_продукция_грамматики
15= правило_грамматики
16;
17именованный_обработчик
18= ID блок_операторов
19;
20оператор_вставки
21= "include" файл_include ";"
22;
23файл_include
24= ID | ANNOTATION
25;
26основная_продукция_грамматики
27= "main" ID ";"
28;
29правило_грамматики
30= продукция "=" список_шаблонов ";"
31;
32продукция
33= ID
34;
35список_шаблонов
36= шаблон
37= список_шаблонов разделитель_шаблонов шаблон
38;
39разделитель_шаблонов
40= "|" | "="
41;
42шаблон
43= список_символов
44= список_символов ассоциативность
45= список_символов блок_операторов
46= список_символов ассоциативность блок_операторов
47;
48ассоциативность
49= "<"
50= ">"
51;
52список_символов
53= символ
54= список_символов символ
55;
56символ
57= ANNOTATION // - разные разделители в виде строковой константы (терминалы)
58= "ID" | "ANNOTATION" | "NUMBER" // - метасимволы в описаниях грамматики (терминалы)
59= ID // - символы-переменные (нетерминалы = compound)
60;
61
62блок_операторов
63= "{" перечень_вызовов "}"
64;
65
66перечень_вызовов
67= вызов
68= перечень_вызовов вызов
69;
70
71вызов = адресное_выражение ";"
72;
73
74адресное_выражение
75= атом
76= атом "." адресное_выражение
77;
78
79атом = ID
80= ID "[" NUMBER "]"
81= ID "(" ")"
82= ID "(" список_параметров ")"
83;
84
85список_параметров
86= параметр
87= список_параметров "," параметр
88;
89
90параметр
91= ANNOTATION
92= NUMBER
93= адресное_выражение
94= "true"
95= "false"
96;
97