Ragel является конечный автомат компилятор и генератор синтаксических анализаторов . Первоначально Ragel поддерживал вывод для исходного кода C , C ++ и Assembly , [1] был расширен для поддержки нескольких других языков, включая Objective C , D , Go , Ruby и Java . [2] Дополнительная языковая поддержка также находится в разработке. [3] Он поддерживает создание конечных автоматов, управляемых таблицей или потоком управления, из регулярных выражений [4]и / или диаграммы состояний, а также могут создавать лексические анализаторы с помощью метода самого длительного совпадения. Ragel специально нацелен на синтаксический анализ текста и проверку ввода . [5]
Разработчики) | Адриан Терстон [6] |
---|---|
Стабильный выпуск | 6.10 / 24 марта 2017 г . |
Предварительный выпуск | 7.0.4 / 16 февраля 2021 г . |
Репозиторий | |
Написано в | C ++ |
Операционная система | Unix-подобный , Windows |
Тип | Компилятор конечного автомата |
Лицензия | «Ragel 6 остается под GPL v2 [сгенерированный код] под MIT (или GPL v2)». [7] Ragel 7: Лицензия MIT |
Веб-сайт | www |
Обзор
Ragel поддерживает создание конечных автоматов, управляемых таблицами или потоками управления, из регулярных выражений и / или диаграмм состояний, а также может создавать лексические анализаторы с помощью метода наиболее длинного совпадения. Уникальной особенностью Ragel является то, что действия пользователя могут быть связаны с произвольными переходами конечного автомата с помощью операторов, которые интегрированы в регулярные выражения. Ragel также поддерживает визуализацию созданной машины через graphviz .
График представляет собой конечный автомат, который принимает вводимые пользователем данные в виде серии байтов, представляющих символы ASCII и управляющие коды. 48..57 эквивалентно регулярному выражению [0-9] (т. Е. Любой цифре), поэтому можно распознать только последовательности, начинающиеся с цифры. Если встречается 10 (перевод строки), все готово. 46 - это десятичная точка ('.'), 43 и 45 - положительные и отрицательные знаки ('+', '-'), а 69/101 - это прописная / строчная буква 'e' (для обозначения числа в научном формате). Таким образом, он правильно распознает следующее:
24505578,12e578,3e1269,0e-33e + 3
но нет:
.346.-53.e22e5.1
Синтаксис
Ввод Рагеля является регулярным выражением только в том смысле, что он описывает регулярный язык ; обычно он не записывается в кратком регулярном выражении, а состоит из нескольких частей, как в расширенной форме Бэкуса – Наура . Например, вместо поддержки классов символов POSIX в синтаксисе регулярных выражений Ragel реализует их как встроенные производственные правила. Как и в случае с обычными генераторами парсеров, Ragel позволяет обрабатывать код для создания продукции с использованием синтаксиса. [8] Код для приведенного выше примера с официального сайта:
действие dgt { printf ("DGT:% c \ n", fc); } действие dec { printf ("DEC:. \ n"); } действие exp { printf ("EXP:% c \ n", fc); } действие exp_sign { printf ("SGN:% c \ n", fc); } номер действия { / * NUMBER * / } # Литерал числа с плавающей запятой.число = ( [0-9] + $ dgt ( '.' @ Dec [0-9] + $ dgt )? ( [eE] ( [+ \ -] $ exp_sign )? [0-9] + $ exp )? ) % число ; основной : = ( число '\ n' ) * ;
Смотрите также
- Сравнение генераторов парсеров
- Исполняемый UML
- Конечный автомат
- Регулярное выражение
- Конструкция Томпсона - алгоритм, использованный Рагелем
- Umple
- Хельсинкская технология конечных состояний (HFST)
Рекомендации
- ^ Адриан Д. Терстон. « Анализ компьютерных языков с помощью автомата, скомпилированного из одного регулярного выражения. Архивировано 07 сентября 2012 г. на Wayback Machine » В: 11-я Международная конференция по реализации и применению автоматов (CIAA 2006), конспект лекций по информатике, том 4094 , п. 285-286, Тайбэй, Тайвань, август 2006 г.
- ^ «Руководство пользователя Ragel» (PDF) . Март 2017 г.
- ^ «Дополнительные целевые языки возвращаются к Ragel 7» . 18 мая 2018.
- ^ Ликун Чен, Крис Дж. Митчелл, Эндрю Мартин (2009) Trusted Computing: Вторая международная конференция, Trust 2009 Oxford, UK, 6–8 апреля 2009 г., Proceedings . п. 111
- ^ Омар Бадреддин (2010) « Umple : модельно-ориентированный язык программирования». Программная инженерия, 2010 32-я международная конференция ACM / IEEE по. Vol. 2 . IEEE, 2010 г.
- ^ Д - р Адриан Д. Терстон на complang.org Последнее изменение: 14 июля 2013
- ^ "Компилятор конечной машины Рагеля" . www.colm.net . Проверено 19 ноября 2019 .
- ^ «Руководство пользователя Ragel» (PDF) . Март 2017 г.
Внешние ссылки
- СМИ, связанные с Рэйгел на Викискладе?
- Официальный веб-сайт