2013-05-22 3 views
0

Итак, я пишу компилятор в Java, который переводит мой язык на язык CUDA. Для этой задачи я написал грамматику в ANTLR4, получив лексер и парсер.Упрощение структуры класса компилятора

Теперь ANTLR дает мне прослушиватель с реализуемыми методами, которые в основном являются узлами абстрактного дерева синтаксического разбора. Затем я украшаю это дерево кодом, который хочу сгенерировать, на основе токенов на этом узле.

Моя проблема заключается в том, что у меня есть 45 методов в этом классе CUDAEmitter и 830 строк кода. Я изо всех сил пытаюсь понять, как структурировать и разделить эти методы. Я использую эти 3 украсить свои узлы:

private final ParseTreeProperty<String> cuda = new ParseTreeProperty<String>(); 
String getCode(ParseTree ctx) { return cuda.get(ctx); } 
void setCode(ParseTree ctx, String s) { cuda.put(ctx, s); } 

пример генерации кода:

public void exitIdvalString(ParmaParser.IdvalStringContext ctx) { 
String str = ctx.STRING().getText(); 
setCode(ctx, str);  
} 

Как я идти о раскалывается этот класс? Спасибо за ваше время!

ответ

0

Сомнительно, что это лучшее решение, но GenPackage представляет собой один из подходов. Это автоматическое создание узлов и поддерживающих классов. Генератор может быть повторно запущен в любое время, чтобы заполнить отсутствующие классы. Я не видел другого общепринятого решения.

Полное раскрытие информации: Я являюсь автором GenPackage. Если основной подход представляет интерес, у меня есть выдающаяся фиксация, которая добавляет поддержку таблиц символов и несколько дополнительных функций.

+0

Как создать в linux? Кажется, нет файла run.bat – Saph

Смежные вопросы