Это мой компилятор для языка meow+-
Грамматика и РВ для выделения лексем, находятся в файле MEOW.g4 - вот пример части грамматики:
print
: PRINT OPEN_PAREN expressionList CLOSE_PAREN
;
ifStatment
: IF OPEN_PAREN conclusionList CLOSE_PAREN block (ELSE block)?
;
conclusionList
: conclusion (pob=(AND | OR) conclusion)*
;
Дерево разбора строится с помощью определенных правил, которые расписаны в папке ast Пример правила разбора логических переменных, которые могут встретиться в нашей программке
public Node visitBoolLiteral(MLLParser.BoolLiteralContext ctx) {
switch (ctx.getText()) {
case "true":
return Constant.True;
case "false":
return Constant.False;
}
return null;
}
Семантический и синтаксический анализ лежит на плечах antlr-a, также
Пример синтаксического анализа:
На вход поступает такая вот программа, написанная на моем языке
Дерево разбора:
Ошибки:
Синтаксические ошибки:
Семантические ошибки: