Рагель - Ragel
Разработчики) | Адриан Терстон[1] |
---|---|
Стабильный выпуск | 6.10 / 24 марта 2017 г. |
Предварительный выпуск | 7.0.0.12 / 14 мая 2019 г. |
Репозиторий | |
Написано в | C ++ |
Операционная система | Unix-подобный, Windows |
Тип | Государственный аппарат компилятор |
Лицензия | "Ragel 6 остается под GPL v2 [сгенерированный код] подпадает под действие MIT (или GPL v2) ».[2] Рагель 7: Лицензия MIT |
Интернет сайт | www |
Рагель это конечный автомат компилятор и генератор парсеров. Изначально Ragel поддерживал вывод для C, C ++ и сборка исходный код,[3] был расширен для поддержки нескольких других языков, включая Цель C, D, Идти, Рубин, и Ява.[4] Дополнительная языковая поддержка также находится в разработке.[5]Он поддерживает поколение стол или же поток управления управляемые конечные автоматы из обычные выражения[6] и / или диаграммы состояний, а также может строить лексические анализаторы с помощью метода самого длинного совпадения. Рагель специально нацеливается анализ текста и проверка ввода.[7]
Обзор
Рагель поддерживает поколение стол или же поток управления ведомый государственные машины из обычные выражения и / или диаграммы состояния а также может построить лексические анализаторы с помощью метода самого длинного совпадения. Уникальной особенностью Ragel является то, что действия пользователя могут быть связаны с произвольными переходами конечного автомата с помощью операторов, которые интегрированы в регулярные выражения. Ragel также поддерживает визуализацию созданной машины через графвиз.
График представляет собой конечный автомат, который принимает вводимые пользователем данные в виде серии байтов, представляющих 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)?)%номер;главный:=(номер'')*;
Смотрите также
- Сравнение генераторов парсеров
- Исполняемый UML
- Конечный автомат
- Регулярное выражение
- Конструкция Томпсона - алгоритм, используемый Рагелем
- Umple
- Хельсинкская технология конечных состояний (HFST)
Рекомендации
- ^ Д-р Адриан Д. Терстон в Complang.org Последнее изменение: 14 июля 2013 г.
- ^ "Компилятор конечной машины Рагеля". www.colm.net. Получено 2019-11-19.
- ^ Адриан Д. Терстон. "Анализ компьютерных языков с помощью автомата, скомпилированного из одного регулярного выражения. В архиве 2012-09-07 в Wayback Machine " В: 11-я Международная конференция по внедрению и применению автоматов (CIAA 2006), Конспект лекций по информатике, том 4094, п. 285-286, Тайбэй, Тайвань, август 2006 г.
- ^ а б «Руководство пользователя Ragel» (PDF). Март 2017 г.
- ^ "Дополнительные целевые языки возвращаются в Ragel 7". 18 мая 2018.
- ^ Ликун Чен, Крис Дж. Митчелл, Эндрю Мартин (2009) Trusted Computing: Вторая международная конференция, Trust 2009 г. Оксфорд, Великобритания, 6–8 апреля 2009 г., Материалы. п. 111
- ^ Омар Бадреддин (2010) "Umple: модельно-ориентированный язык программирования ". Программная инженерия, 2010 32-я международная конференция ACM / IEEE по. Vol. 2. IEEE, 2010 г.
внешняя ссылка
- СМИ, связанные с Рагель в Wikimedia Commons
- Официальный веб-сайт