Обычно эти сущности (правила грамматики, парсеры, AST) имеют концептуальные отношения, зафиксированные в таких книгах, как книга компиляторов Dragon (уже упоминавшаяся в комментарии).
Я не думаю, что эти отношения очень интересны, когда речь идет о разработке нового языка; все, что вас действительно волнует, это синтаксис языка (часто выражается как
«контекстно-свободная» грамматика с дополнительными ограничениями и семантикой языка (обычно выражается в виде очень больших справочных документов, иногда выражаемых в формальной нотации, такой как денотационная семантика , которая может интерпретировать абстрактное дерево разбора производится магией.
«Реальные» отношения возникают, когда у вас есть механизм, который связывает их вместе: если я передам грамматику A генератору синтаксического анализатора B и использую результат для обработки исходного кода S, я могу получить AST T.
На этом уровне вы не столько проектируете свой язык, сколько внедряете его. Здесь вам нужен интегрированный набор инструментов для обработки определения языка; в идеале , он будет принимать ваши грамматические и семантические обозначения напрямую. Нет каких-либо практических инструментов, которые бы использовали оба эти в идеале , о которых я знаю, поэтому вам придется выбирать среди тех, которые существуют.
Два инструмента, которые можно использовать для этой цели с различной степенью эффективности: ANTLR и мой набор инструментов для реинжиниринга программного обеспечения DMS .
DMS обеспечивает по крайней мере один способ определения семантики, предоставляя средства для записи «алгебраических» законов эквивалентности между языковыми формами. По сути, вы можете сказать эта языковая форма эквивалентна этой языковой форме , написав pattern1 = pattern2 так же, как вы делаете с алгеброй , Вы можете увидеть, как это делается на примере алгебры .