воскресенье, 16 октября 2016 г.

XText основан на ANTLR

Еще немного про XText и его связи с проектом ANTLR (ANother Tool for Language Recognition).

Парсинг текста в XTEXT основан на проекте ANTLR, который используется во многих известных проектах
http://www.antlr.org/about.html
Например ANTLR используется в NetBeans IDE для парсинга C++.

Для ANTLR доступны определения грамматик для многих стандартных языков программирования
https://github.com/antlr/grammars-v3
https://github.com/antlr/grammars-v4

Вот, например, так выглядит грамматика C++ для ANTLR
https://github.com/antlr/grammars-v3/blob/master/cpp/CPP_grammar_.g

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

Наличие грамматики позволяет парсить файлы языка и получать в памяти модель кода (Abstract Syntax Tree ) для языка и далее работать с моделью кода через API.

XTEXT делает удобным использование ANTLR в JAVA мире (за счет представления результатов парсинга в формате модели EMF) и делает возможным генерацию инфраструктуры для работы с новыми языками в Eclipse.

В случае с XTEXT модель кода представляет из себя EMF Ecore модель.
На основе определения грамматики языка XTEXT автоматически генерирует API для работы с этой моделью из Java. Она генерируется на основе parse tree, получаемых ANTLR.

Для XText нет такого разнообразия доступных грамматик.
К сожалению, формат определения грамматики для XText отличачается от ANTLR.
И пишут, что портирование грамматики ANTLR в XTEXT не всегда тривиальная задача.

Для Xtext есть грамматика для языка XTend (улучшенная модификация Java)
Также есть базовая грамматика XBase, части которой можно наследовать и использовать
для более легкого определения своих грамматик.

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

Отправить комментарий