2014-11-02 5 views
0

Я изучаю структуру компилятора и хочу реализовать грамматику JavaScript с использованием JavaCC.Как модулировать файл грамматики JavaCC (.jj)?

(я уже писал мой собственный JavaScript CodeModel, что позволяет программной конструкции кода JavaScript, теперь я хочу, чтобы написать JavaCC на основе синтаксического анализа аналога для этого.)

Мой вопрос, есть способ модулировать грамматику JavaCC (.jj-файл) в несколько файлов?

У меня очень хороший опыт работы с JavaParser, поэтому я изучаю их грамматику java_1_5.jj. Тем не менее, это 3000 + LoC-файл, который немного сложно понять.

Я хотел бы разделить файл грамматики на несколько частей, чтобы было легче передать и понять. Мой Google искал на «javacc modular», «javacc include», «javacc import» принес мне некоторые загадочные результаты, которые не очень помогли.

В частности, как бы переместить определение IDENTIFIER (lines 380-1081) в другой файл?

+0

На самом деле нет способа модулизовать файлы .jj. Лучше всего использовать JJT, так как это позволяет вам перемещать все действия из файла грамматики. Если вы просто хотите включить объект, есть много препроцессоров, которые можно использовать. –

+0

@ TheodoreNorvell Не могли бы вы разместить свой ответ? Спасибо. – lexicore

+0

Если вы не хотите использовать JJT, лучше всего использовать шаблон строителя. –

ответ

1

В JavaCC нет возможности для модуляции .jj-файлов. Лучше всего использовать JJT, так как это позволяет вам перемещать все действия из файла грамматики. Если вы не хотите использовать JJT, лучше всего использовать шаблон построителя.

Если вы просто хотите включить объект, есть много препроцессоров, которые можно использовать.

+0

Ты читаешь мой разум. Я использую batilder builder. https://github.com/highsource/javascript-codemodel/blob/master/parser/src/main/java/org/hisrc/jscm/parser/JSCodeModelBuilder.java – lexicore

+0

Извините, что попросил еще раз - не могли бы вы указать мне на препроцессор, который будет поддерживать включение? Как-то мне не удается найти один ... – lexicore

+0

cpp или m4 оба делают включение файла. Вы могли бы просто объединить несколько файлов вместе, используя кокетную задачу cat или ANT. –

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