-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathINSTRUCTION.txt
More file actions
152 lines (123 loc) · 9.29 KB
/
INSTRUCTION.txt
File metadata and controls
152 lines (123 loc) · 9.29 KB
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
----------------Грамматика, используемая в примерах
<грамматика> -> <продукция> <список продукций>
<продукция> -> лексема стрелка {A1} <правая часть> перевод_строки
<список продукций> -> <продукция> <список продукций>
<список продукций> -> ε
<правая часть> -> лексема {A2} <список лексем>
<правая часть> -> пустая_лексема {A3}
<список лексем> -> лексема {A4} <список лексем>
<список лексем> -> действие {A5} <список лексем>
<список лексем> -> ε
----------------Формат входного файла грамматики
Поддерживаются только 2 формата входных файлов:
1. XML-файлы следующей структуры:
<root>
Набор продукций.
</root>
Элементы, описывающие продукцию:
<production>СИМВОЛ_ЛЕВОЙ_ЧАСТИ_ПРОДУКЦИИ
Набор элементов, описывающих правую часть продукции.
</production>
Элементы, описывающие правую часть продукции:
<lexem>НЕТЕРМИНАЛ_ИЛИ_ТЕРМИНАЛ_ПРАВОЙ_ЧАСТИ</lexem >
<action>ИМЯ_ДЕЙСТВИЯ</action >
<epsilon />
2. Текстовые файлы (см. пример в файле meta.txt).
----------------Формат выходного файла таблицы разбора
<?xml version="1.0" standalone="yes"?>
<DocumentElement>
<table>
<i>НОМЕР_СТРОКИ</i>
<terminals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_1</string>
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_2</string>
…
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_N</string>
</terminals>
<jump>НОМЕР_СЛЕДУЮЩЕЙ_ОБРАБАТЫВАЕМОЙ_СТРОКИ</jump>
<accept>true/false</accept>
<stack> true/false</stack>
<return> true/false</return>
<error> true/false</error>
<action>ИМЯ_ДЕЙСТВИЯ</action>
</table>
…
<table>
<i>НОМЕР_СТРОКИ</i>
<terminals xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_1</string>
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_2</string>
…
<string>НАПРАВЛЯЮЩИЙ_СИМВОЛ_N</string>
</terminals>
<jump>НОМЕР_СЛЕДУЮЩЕЙ_ОБРАБАТЫВАЕМОЙ_СТРОКИ</jump>
<accept>true/false</accept>
<stack> true/false</stack>
<return> true/false</return>
<error> true/false</error>
<action>ИМЯ_ДЕЙСТВИЯ</action>
</table>
</DocumentElement>
Наиболее удобным способом чтения данного файла является использование класса DataTable .NET Framework. Пример:
cf_dataTable = new DataTable("table");
cf_dataTable.Columns.Add("i", typeof(int));
cf_dataTable.Columns.Add("terminals", typeof(string[]));
cf_dataTable.Columns.Add("jump", typeof(int));
cf_dataTable.Columns.Add("accept", typeof(bool));
cf_dataTable.Columns.Add("stack", typeof(bool));
cf_dataTable.Columns.Add("return", typeof(bool));
cf_dataTable.Columns.Add("error", typeof(bool));
cf_dataTable.Columns.Add("action", typeof(string));
cf_dataTable.ReadXml(a_filename);
----------------Использование программы
1. Ввести имя файла, содержащего грамматику, в текстовое поле области «Загрузка файла грамматики» или выбрать файл с помощью кнопки «Обзор».
2. Нажать кнопку «Загрузка».
3. Загруженная грамматика будет выведена в текстовое поле области «Просмотр грамматики». В случае ошибок будут выведены соответствующие сообщения, и, по возможности, подсвечены ошибочные места.
4. Для генерации таблицы разбора служит кнопка «Генерация».
5. Полученную таблицу разбора можно сохранить с помощью области «Сохранение таблицы разбора», введя имя файла в текстовое поле (или выбрав файл с помощью кнопки «Обзор»), а затем нажав «Сохранение».
----------------Пример описания грамматики
<root>
<production>
грамматика
<lexem>продукция</lexem>
<lexem>список продукций</lexem>
</production>
<production>список продукций
<lexem>продукция</lexem>
<lexem>список продукций</lexem>
</production>
<production>список продукций
<epsilon />
</production>
<production>продукция
<lexem>лексема</lexem>
<lexem>стрелка</lexem>
<action>A1</action>
<lexem>правая часть</lexem>
<lexem>перевод_строки</lexem>
</production>
<production>правая часть
<lexem>лексема</lexem>
<action>A2</action>
<lexem>список лексем</lexem>
</production>
<production>правая часть
<lexem>пустая_лексема</lexem>
<action>A3</action>
</production>
<production>список лексем
<lexem>лексема</lexem>
<action>A4</action>
<lexem>список лексем</lexem>
</production>
<production>список лексем
<lexem>действие</lexem>
<action>A5</action>
<lexem>список лексем</lexem>
</production>
<production>список лексем
<epsilon />
</production>
</root>
----------------Пример выходного файла таблицы разбора
См. файл metagram.xml, который используется для синтаксического анализа задаваемой пользователем грамматики.