Я хочу написать компилятор как личный проект, и я нахожусь в процессе чтения и понимания парсеров (LL (k), LR (k), SLR и т. Д.)
Все эти парсеры основанына некоторой грамматике, которая поступает от пользователя, и эта грамматика обычно записывается в текстовом файле (например, в ANTLR, она входит в файл .g4, который является текстовым файлом IMO).Если я хочу, чтобы мой синтаксический анализатор создавал свои таблицы синтаксического анализа из такого файла грамматики, каков наилучший способ его анализа и представления произведений в коде?
РЕДАКТИРОВАТЬ:
Например, скажем,У меня есть эта грамматика:
S -> 'a'|'b'|'('S')'|T
T -> '*'S
Я думал о синтаксическом анализе данной грамматики и сохранении ее как ArrayList<ArrayList<String>>
.Таким образом, каждый элемент в ArrayList будет коллекцией произведений из одного и того же нетерминала:
// with this type of a representation, I can assign an id to each production
//For example, production S -> 'a' has id 01 or T -> '*'S has an id of 10 and so on
{
{"S", "'a'", "'b'", "'('S')'", "T"},
{"T", "'*'S"}
}
Я не уверен, что представляю грамматику как AST, потому что тогда я не знаю, какназначить идентификаторы для каждого производства.Но приведенное выше представление грамматики мне кажется довольно наивным, и я подозреваю, что должен быть какой-то стандартный способ сделать это, с которым будет легче работать.