Как я могу разобрать код REXX в Java? - PullRequest
5 голосов
/ 29 марта 2009

Я бы хотел проанализировать исходный код REXX, чтобы можно было проанализировать структуру программы из Java.

Мне нужно сделать такие вещи, как нормализация эквивалентных логических структур в источнике, которые синтаксически различны, найти дубликаты объявлений переменных и т. Д., И у меня уже есть фон Java.

Есть ли более простые способы сделать это, чем написать код?

Ответы [ 3 ]

8 голосов
/ 01 января 2010

REXX - нелегкий язык для анализа с помощью обычных инструментов, особенно тех, которые ожидают грамматику BNF. В отличие от большинства языков, разработанных людьми, знакомыми с C, в REXX нет зарезервированных слов, что усложняет задачу. Каждый термин, который выглядит как зарезервированное слово, фактически разрешается только в своем конкретном контексте ( например , "PULL" зарезервирован только как первое слово инструкции PULL или второе слово PARSE PULL инструкция - вы также можете иметь переменную с именем PULL ("PULL = 1 + 2")). Плюс есть некоторые очень удивительные эффекты комментариев. Но стандарт ANSI REXX имеет полный синтаксис и все правила.

5 голосов
/ 29 марта 2009

Если у вас есть BNF Rexx грамматика, то javacc может помочь вам создать AST (Абстрактное синтаксическое дерево) представление этого Код Rexx.

Точнее, javacc создаст Java-классы , которые будут:

  • разбирать код Rexx и
  • фактически строит AST.

Все равно будет «загрузка кода», но вы не будете тем, кто пишет классы для этого анализатора кода Rexx. Только его поколение.

1 голос
/ 29 марта 2009

Посмотрите на ANTLR , это действительно хорошая работа по созданию AST, преобразованию его и т. Д ... Он имеет хороший редактор (ANTLRWorks), построен на Java и может отлаживать обходчики вашего синтаксического анализатора / дерева, пока они работают в вашем приложении. Действительно стоит провести расследование для любого вида анализа.

...