В настоящее время я работаю над языком программирования, и около 9 месяцев я использовал рукописный лексер и парсер. То, что я сейчас пытаюсь сделать, - это преобразовать это в ANTLR-парсер. Структура парсерной системы компилятора выглядит примерно так:
currentParser
и может делать такие вещи, как reparse()
или skip(n tokens)
Parser
(с помощью метода parse(ParserManager pm, Token token)
)push
new Parser
к стекю Parser или выскочить из стека парсера, что означает, что следующий синтаксический анализатор в стеке проанализирует следующий токен.ITypeList
, которые также передаются в виде одиночных аргументов анализаторам. Один пример подкласса Parser
- TypeParser
public TypeParser(ITyped typed) { ... }
Или TypeListParser
:
public TypeListParser(ITypeList typeList) { ... }
Эта простая структура применяется для каждой реализации Parser
. Есть ли способ использовать эти интерфейсы в ANTLR?
Ваши описания выглядят как вариант шаблона комбинатора Parser.
Чтобы преобразовать такую конструкцию в ANTLR:
ANTLR4 не создает AST, поэтому ваши узлы AST могут быть полностью переработаны, вам нужно только решить, как создать AST из грамматики: