Как я могу проанализировать код REXX на Java?
Вопрос
Я хотел бы проанализировать исходный код REXX, чтобы можно было проанализировать структуру программы на Java.
Мне нужно сделать такие вещи, как нормализовать эквивалентные логические структуры в исходном коде, которые синтаксически отличаются, найти повторяющиеся объявления переменных и т. д.и у меня уже есть опыт работы с Java.
Есть ли более простые способы сделать это, чем написание большого количества кода?
Решение
Если у вас есть БНФ грамматика Рекса, тогда javacc может помочь вам построить АСТ (Абстрактное синтаксическое дерево) представление этого кода Rexx.
Точнее, javacc построит Java-классы который будет :
- разобрать код Rexx и
- фактически строит AST.
«Нагрузка кода» все равно будет существовать, но вы не будете писать классы для этого парсера кода Rexx.Только свое поколение.
Другие советы
REXX — не простой язык для анализа с помощью обычных инструментов, особенно тех, которые ожидают грамматики BNF.В отличие от большинства языков, разработанных людьми, работающими с C, в REXX нет зарезервированных слов, что несколько усложняет задачу.Каждый термин, который выглядит как зарезервированное слово, на самом деле разрешается только в его конкретном контексте (например, «PULL» зарезервировано только как первое слово PULL
инструкцию или второе слово PARSE PULL
инструкции - вы также можете иметь переменную с именем PULL ("PULL = 1 + 2
")).Кроме того, комментарии имеют весьма неожиданные последствия.Но Стандарт ANSI REXX имеет полный синтаксис и все правила.
Посмотри на АНТЛР, он действительно отлично справляется с созданием AST, его преобразованием и т. д.Он имеет хороший редактор (ANTLRWorks), построен на Java и может отлаживать ваши парсеры/обходчики по дереву, пока они работают в вашем приложении.Действительно стоит изучить любую работу по синтаксическому анализу.