Подтвердить что ты не робот

Может ли Xtext использоваться для разбора языков программирования общего назначения?

В настоящее время я разрабатываю универсальный язык программирования на основе агентов (его syntaxt будет несколько вдохновлен Java, и мы также используем объект на этом языке).

С самого начала проекта мы сомневались в факте использования ANTLR или Xtext. В то время мы выяснили, что Xtext реализует подмножество функции ANTLR. Поэтому мы решили использовать ANLTR для нашего языка, потеряв возможность иметь полноценный редактор Eclipse бесплатно для нашего языка (такие приятные функции, предоставляемые Xtext).

Однако, насколько мне известно, этим летом проект Xtext сделал большой шаг вперед . Цитата из ссылки:

Каковы ограничения Xtext?

Sven: вы можете реализовать практически любой язык программирования или DSL с Xtext. Есть одно исключение, то есть если вам нужно использовать так называемый "Семантические предикаты", что довольно сложная вещь. не стоит здесь объяснять. Очень мало языков нужна эта концепция. Однако ярким примером является C/С++. Мы хотим просмотрите эту тему для следующего выпуска.

И это также усилено в Документация Xtext:

Что такое Xtext? Независимо от того, хотите ли вы создать небольшой текстовый доменный язык (DSL) или вы хотите реализовать полномасштабный язык программирования общего назначения. С помощью Xtext вы можете создать свой очень собственные языки. Также, если у вас уже есть но он не имеет достойной поддержки инструмента, вы можете использовать Xtext для создания сложная среда разработки на основе Eclipse, обеспечивающая опыт редактирования, известный из современных Java IDE, в удивительно короткие количество времени. Мы называем Xtext основой для развития языка.

Если Xtext избавился от своих прошлых ограничений, почему еще невозможно найти сложную грамматику Xtext для наиболее известных языков программирования (Java, С# и т.д.)?

На веб-сайте ANTLR вы можете найти множество таких примеров грамматики, поскольку для Xtext вместо этого единственным экземпляром, который я смог найти, является тот, который указан в документации. Так что, возможно, Xtext все еще не зрелый, чтобы его использовали для реализации языка программирования общего назначения? Я немного волнуюсь об этом... Я бы не стал переписывать грамматику в Xtext, чтобы потом признать, что это не подходит для этого.

4b9b3361

Ответ 1

Я думаю, что никто не реализовал Java или С++, потому что это большая работа (даже с Xtext), а существующие инструменты и компиляторы превосходны. Тем не менее, вы можете взглянуть на Xbase и Xtend, который является языком выражений, который мы отправляем с помощью Xtext. Он построен с использованием Xtext и является хорошим доказательством того, что вы можете построить с помощью Xtext. Мы сделали это примерно за 4 человеко-месяца.

Я сделал несколько скринкастов на Xtend:

http://blog.efftinge.de/2011/03/xtend-screencast-part-1-basics.html
http://blog.efftinge.de/2011/03/xtend-screencast-part-2-switch.html
http://blog.efftinge.de/2011/03/xtend-screencast-part-3-rich-strings-ie.html

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

Ответ 2

Я не могу говорить, для чего нужен xtext или хорошо.

Я могу говорить о проблеме разработки надежных инструментов для обработки реальных языков, основываясь на нашем опыте с DMS Software Reengineering Toolkit, который мы Представьте, что это структура управления языком.

Во-первых, синтаксический анализ реальных langauges обычно включает в себя что-то грязное в лексинге и/или синтаксическом анализе, из-за исторических путей, которые эти langauges эволюционировали. Java довольно чист. С# имеет контекстно-зависимые ключевые слова и рудиментарный препроцессор, похожий на C. C имеет полномасштабный препроцессор. С++ классно "трудно разобрать" из-за двусмысленностей в грамматике и синонимов с синтаксисом шаблонов. COBOL довольно уродлив, не имеет каких-либо справочных грамматик и поставляется на разных диалектах. PHP превратит вас в камень, если вы посмотрите на него, потому что он так плохо определен. (У DMS есть синтаксические анализаторы для всех этих, используемые в гневе на реальных приложениях).

Тем не менее, вы можете проанализировать все из них с помощью большинства доступных технологий синтаксического анализа, если вы достаточно усердны, обычно, злоупотребляя лексером или парсером для достижения своих целей (как ребята из GNU злоупотребляли Bison, чтобы разобрать С++, запутывая лексический анализ с помощью поиск таблицы символов - хороший уродливый случай). Но для получения подробных сведений о языке требуется много усилий, и справочные руководства являются лишь приблизительными приближениями истины относительно того, что действительно принимают компиляторы.

Если Xtext имеет достойный механизм синтаксического анализа, можно, вероятно, сделать это с помощью Xtext. Проглядывание сайта Xtext выглядит так, как лексеры и парсеры довольно приличные. Я ничего не видел о "семантическом предикате"; мы имеем их в DMS, и они являются lifesavers в некоторых действительно темных углах разбора. Даже используя действительно хорошую технологию синтаксического анализа (мы используем синтаксические анализаторы GLR), было бы очень сложно разобрать объявления данных COBOL (извлечение их структуры вложенности во время разбора) без них.

У вас есть интересная проблема в том, что ваш язык еще не определен. Это сделает ваши начальные парсеры несколько грязными, и вы их много пересмотрите. Здесь, где сильная технология синтаксического анализа помогает вам: если вы можете легко пересмотреть свою грамматику, вы можете сосредоточиться на том, что хотите, чтобы ваш язык выглядел, вместо того, чтобы сосредоточиться на борьбе с лексером и парсером. Тот факт, что вы можете изменить свое определение langauge, на самом деле означает, что если у Xtext есть некоторые ограничения, вы, вероятно, можете сгибать свой синтаксис языка, чтобы он соответствовал без огромного количества боли. ANTLR обладает проверенной способностью анализировать язык в значительной степени, как вы себе это представляете, по сравнению с обычным количеством взлома парсера.

То, что никогда не обсуждалось, - это то, что еще нужно для обработки реального языка. Первое, что вам нужно сделать, это построить АСТ, которые ANTLR и YACC помогут вам сделать; Я предполагаю, что Xtext тоже. Вам также нужны таблички символов, контроль и анализ потока данных (как локальные, так и глобальные), а также механизмы для преобразования вашего языка во что-то другое (предположительно, более исполняемое). Выполняя только таблицы символов, вы найдете удивительно трудным; С++ содержит несколько сотен страниц "как искать идентификатор"; Java-дженерики намного сложнее, чем можно ожидать. Вы также можете захотеть отпечатать AST до исходного кода, если вы хотите предложить рефакторинг. (EDIT: здесь ANTLR и XText предлагают то, что генерирует генерация кода, управляемого текстовым шаблоном).

Но это сложные механизмы, которые занимают столько времени, если не больше, чем создание парсера. Причина, по которой DMS существует, заключается не в том, что она может анализировать (мы рассматриваем ее так же, как и в игре в покер), а потому, что все эти другие вещи очень тяжелые, и мы хотели амортизировать затраты на все это (у DMS есть, мы считаем, превосходная поддержка для всех этих механизмов, но YMMV).

При чтении обзора Xtext, похоже, что у них есть некоторая поддержка таблиц символов, но неясно, какое предположение стоит за ним (например, для С++ вам необходимо поддерживать множественное наследование и пространства имен).

Если вы уже запустили дорогу ANTLR и у вас что-то запущено, у меня возникнет соблазн остаться в курсе; Я сомневаюсь, что Xtext предложит вам дополнительную помощь. Если вам действительно нужен редактор Xtext, то вы, вероятно, можете переключиться на цену реструктуризации какой грамматики у вас есть (это довольно типичная цена, которую нужно заплатить при изменении парадигмы синтаксического анализа). Ожидайте, что большая часть вашей работы появится после того, как вы правильно получите парсер, специальным способом. Я сомневаюсь, что здесь вы найдете Xtext или ANTLR.

Ответ 4

Я использую Xtext уже два года для реализации языка Umple (http://cruise.site.uottawa.ca/umple/). Umple - это язык моделирования общего назначения, который позволяет разработчикам внедрять другие языки программирования высокого уровня (например, Java и PhP). Итак, мне нужно, чтобы Xtext мог ссылаться на грамматику других языков (например, на Java). Я не смог найти грамматику java, написанную в Xtext. Кросс-справочная грамматика - хорошая функция, но я не желаю идти по пути перезаписи грамматики Java в xtext. Любые идеи или помощь приветствуются.

Ответ 5

Я думаю, самый простой ответ на ваш вопрос: многие языки общего назначения могут быть реализованы с использованием Xtext. Но поскольку нет общего ответа на то, какие возможности парсера необходимы для языков общего назначения, общий ответ на ваши вопросы отсутствует.

Однако у меня есть несколько указателей:

  • В Xtext 2.0 (выпущенном этим летом) Xtext поддерживает синтаксические предикаты. Это одна из наиболее востребованных функций для обработки двусмысленного синтаксиса без включения backtracking antlr.

  • Возможно, вам захочется взглянуть на совершенно новые языки Xbase и Xtend, которые (судя по их возможностям) универсальны и которые разрабатываются с использованием Xtext. В своем блоге у Свена есть интересные приставки: http://blog.efftinge.de/

Что касается вашего вопроса, почему мы не видим Xtext-grammars для Java, С++ и т.д.: В Xtext язык - это больше, чем просто грамматика, поэтому хорошая грамматика, описывающая синтаксис языка, является хорошей отправной точкой, но обычно это не артефакт, достаточно ценный для доставки. Причина в том, что с помощью Xtext-грамматики вы также определяете структуру AST (абстрактное дерево синтаксиса и фактически модель Ecore), включая истинные перекрестные ссылки. Поскольку эта модель является основным внутренним API вашего языка, люди обычно тратят много времени на его разработку. Кроме того, для разрешения перекрестных ссылок (aka linking) вам необходимо реализовать обзор (как он называется в Xtext). Без правильной реализации обзора вы можете либо не иметь настоящих перекрестных ссылок в своей модели, либо вы получите много ошибок в подкладке.

Предполагаю, что создание грамматики + проектирование модели АСТ + реализация области - это лишь немного больше усилий, взяв грамматику из какого-то языкового зоопарка и переведя ее в синтаксис Xtext.

НТН, Moritz