Рагель - Ragel

Рагель
Разработчики)Адриан Терстон[1]
Стабильный выпуск
6.10 / 24 марта 2017 г.; 3 года назад (2017-03-24)
Предварительный выпуск
7.0.0.12 / 14 мая 2019 г.; 18 месяцев назад (2019-05-14)
Репозиторий Отредактируйте это в Викиданных
Написано вC ++
Операционная системаUnix-подобный, Windows
ТипГосударственный аппарат компилятор
Лицензия"Ragel 6 остается под GPL v2 [сгенерированный код] подпадает под действие MIT (или GPL v2) ».[2]
Рагель 7: Лицензия MIT
Интернет сайтwww.colm.сеть/Открытый исходный код/ ragel/

Рагель это конечный автомат компилятор и генератор парсеров. Изначально Ragel поддерживал вывод для C, C ++ и сборка исходный код,[3] был расширен для поддержки нескольких других языков, включая Цель C, D, Идти, Рубин, и Ява.[4] Дополнительная языковая поддержка также находится в разработке.[5]Он поддерживает поколение стол или же поток управления управляемые конечные автоматы из обычные выражения[6] и / или диаграммы состояний, а также может строить лексические анализаторы с помощью метода самого длинного совпадения. Рагель специально нацеливается анализ текста и проверка ввода.[7]

Обзор

Рагель поддерживает поколение стол или же поток управления ведомый государственные машины из обычные выражения и / или диаграммы состояния а также может построить лексические анализаторы с помощью метода самого длинного совпадения. Уникальной особенностью Ragel является то, что действия пользователя могут быть связаны с произвольными переходами конечного автомата с помощью операторов, которые интегрированы в регулярные выражения. Ragel также поддерживает визуализацию созданной машины через графвиз.

Visualisierung Ragel.png

График представляет собой конечный автомат, который принимает вводимые пользователем данные в виде серии байтов, представляющих ASCII символы и управляющие коды. 48..57 эквивалентно регулярному выражению [0-9] (т. Е. Любой цифре), поэтому можно распознать только последовательности, начинающиеся с цифры. Если встречается 10 (перевод строки), все готово. 46 - это десятичная точка ('.'), 43 и 45 - положительные и отрицательные знаки ('+', '-'), а 69/101 - это прописная / строчная буква 'e' (для обозначения числа в научном формате). Таким образом, он правильно распознает следующее:

24505546.78.12e578.3e1269.0e-33e + 3

но нет:

.3-53.e22e5.1

Синтаксис

Ввод Рагеля является регулярным выражением только в том смысле, что он описывает обычный язык; обычно он не записывается в кратком регулярном выражении, а разбивается на несколько частей, как в Расширенная форма Бэкуса – Наура. Например, вместо поддержки классов символов POSIX в синтаксисе регулярных выражений Ragel реализует их как встроенные производственные правила. Как и в случае с обычными генераторами парсеров, Ragel позволяет обрабатывать код для создания продукции с использованием синтаксиса.[4] Код, приводящий к приведенному выше примеру с официального сайта:

действиеdgt{ printf ("DGT:% c", fc); }действиедекабрь{ printf ("Дек:."); }действиеexp{ printf ("Опыт:% c", fc); }действиеexp_sign{ printf ("SGN:% c", fc); }действиеномер{ /*НОМЕР*/ }# Литерал числа с плавающей запятой.номер=([0-9]+$dgt('.'@декабрь[0-9]+$dgt)?([eE]([+-]$exp_sign)?[0-9]+$exp)?)%номер;главный:=(номер'')*;

Смотрите также

Рекомендации

  1. ^ Д-р Адриан Д. Терстон в Complang.org Последнее изменение: 14 июля 2013 г.
  2. ^ "Компилятор конечной машины Рагеля". www.colm.net. Получено 2019-11-19.
  3. ^ Адриан Д. Терстон. "Анализ компьютерных языков с помощью автомата, скомпилированного из одного регулярного выражения. В архиве 2012-09-07 в Wayback Machine " В: 11-я Международная конференция по внедрению и применению автоматов (CIAA 2006), Конспект лекций по информатике, том 4094, п. 285-286, Тайбэй, Тайвань, август 2006 г.
  4. ^ а б «Руководство пользователя Ragel» (PDF). Март 2017 г.
  5. ^ "Дополнительные целевые языки возвращаются в Ragel 7". 18 мая 2018.
  6. ^ Ликун Чен, Крис Дж. Митчелл, Эндрю Мартин (2009) Trusted Computing: Вторая международная конференция, Trust 2009 г. Оксфорд, Великобритания, 6–8 апреля 2009 г., Материалы. п. 111
  7. ^ Омар Бадреддин (2010) "Umple: модельно-ориентированный язык программирования ". Программная инженерия, 2010 32-я международная конференция ACM / IEEE по. Vol. 2. IEEE, 2010 г.

внешняя ссылка