Отказ от ответственности: я никогда не использовал Java до прошлого месяца, и я никогда раньше не слышал об ANTLR или StringTemplate. На стажировку этим летом мне дали проект с использованием инструментов, которые никто в компании никогда не использовал. Все «верят в меня», что я «разберусь». Отсюда огромные пробелы в моем понимании. Мне нравится этот проект, и я многому научился, так что не воспринимайте это как жалобы. Я просто хочу, чтобы это работало.
Прямо сейчас я работаю над хорошим подтверждением концепции для старого предметно-ориентированного языка. Моя грамматика ANTLR создает красивые деревья синтаксического анализа, и я могу выводить простые примеры StringTemplate, подобные тем, которые были во введении.
Скажем, в моем .stg
файле есть простой шаблон:
module(type, name, content) ::= "<type> MODULE <name>; <content>; END MODULE."
В Java я могу использовать add()
для установки значений для каждого из аргументов шаблона:
STGroup g = new STGroupFile("example.stg");
ST st = g.getInstanceOf("module");
st.add("type", "MAIN");
st.add("name", "test");
st.add("content", "abc");
System.out.println(st.render());
// prints "MAIN MODULE test; abc; END MODULE."
Как мне заставить ANTLR и ST читать текстовый файл и производить красиво распечатанный вывод?
MAIN MODULE test;
abc;
END MODULE.
Должен стать
MAIN MODULE test; abc; END MODULE.
Например. (Я не планирую форматировать весь вывод, не волнуйтесь. Он будет печатать намного красивее, чем это.)
В этом ответе я узнал, что ANTLR 4 автоматически генерирует ходунки. Если моя грамматика ANTLR правильная / хорошо написана, как мне сопоставить правила / токены ANTLR с аргументами моего шаблона для генерации вывода из входного текстового файла?
Если я пропустил это где-нибудь в документации, дайте мне знать. Примеров ANTLR 4 и ST 4 гораздо меньше, чем в предыдущих версиях.