Как я могу проанализировать код REXX на Java?

StackOverflow https://stackoverflow.com/questions/693676

  •  22-08-2019
  •  | 
  •  

Вопрос

Я хотел бы проанализировать исходный код 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 и может отлаживать ваши парсеры/обходчики по дереву, пока они работают в вашем приложении.Действительно стоит изучить любую работу по синтаксическому анализу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top