Анализатор Java для HTML / конечный автомат

#java #parsing #state-machine

#java #синтаксический анализ #конечный автомат

Вопрос:

Я хочу создать приложение, которое переводит входной Java-код в Java-код в формате HTML,

Например:

 public class ReadWithScanner
  

Стал бы

 <span class="public">public</span> <span class="class">class</span> ReadWithScanner
  

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

Как бы мне начать это? и есть ли какие-либо учебные пособия или онлайн-контент, которые не только помогли бы мне написать это, но и понять это.

Спасибо

Комментарии:

1. Почему бы не использовать существующую библиотеку?

Ответ №1:

Чтобы разобраться со сложностью синтаксического анализа, вам нужно полагаться на спецификацию языка Java.

Насколько я, кажется, помню, Java — это язык LL (k) (см., например, здесь). Однако язык Java, несмотря на все попытки сохранить его «компактным», все еще довольно большой и сложный. Грамматика распределена по всему документу. Это проект не для слабонервных. Вы могли бы рассмотреть возможность использования инструмента синтаксического анализа Java (например, Java-front).

Ответ №2:

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

Ответ №3:

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

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

Ответ №4:

Я думаю, вам нужен лексический анализатор. Ранее я использовал лексический анализатор Flex. Это не слишком сложно в использовании. Если вам нужно разобрать анализируемый текст, вы можете использовать bison c bisoncpp.sourceforge.net / (Требуется C konwledge и среда Linux)

Комментарии:

1. Если OP хочет выбрать только структуры кода, такие как «методы» или «классы», лексический анализатор может быть изменен для выполнения задания путем поиска определенных ключевых слов и правильного подсчета вложенных скобок {} ( ) [ ] » «. Если он хочет выбрать все возможные структуры кода (выражения, инструкции, объявления), ему понадобится полноценный анализатор, а их сложно создать из-за сложности текущего языка Java. Если ему нужны гиперссылки от идентификаторов к определениям, ему понадобится разрешение имен Java, которое действительно сложно создать, потому что для этого требуется полная спецификация языка.