Ragel

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

Ragel - это конечный автомат компилятор и генератор парсера. Первоначально Ragel поддерживал вывод для исходного кода C, C ++ и Assembly, был расширен для поддержки нескольких других языков, включая Objective C, D, Go, Ruby и Java. Дополнительная языковая поддержка также находится в разработке. Он поддерживает создание таблиц или управляемых потоков управления конечных автоматов из регулярных выражений и / или диаграмм состояний, а также может создавать лексические анализаторы с помощью метода самого длинного совпадения. Ragel специально нацелен на синтаксический анализ текста и проверку ввода.

Содержание
  • 1 Обзор
  • 2 Синтаксис
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Обзор

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

Visualisierung Ragel. png

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

2 45 055 46. 78.1 2e5 78.3e12 69.0e-3 3e + 3

, но не:

.3 -5 3.e2 2e5.1
Синтаксис

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

action dgt {printf ("DGT:% c \ n", fc); } действие dec {printf ("DEC:. \ n"); } действие exp {printf ("EXP:% c \ n", fc); } действие exp_sign {printf ("SGN:% c \ n", fc); } action number {/ * NUMBER * /} # Литерал числа с плавающей запятой. число = ([0-9] + $ dgt ('.' @dec [0-9] + $ dgt)? ([eE] ([+ \ -] $ exp_sign)? [0-9] + $ exp) ?) %количество; основной: = (число '\ n') *;
См. Также
  • Портал бесплатного и открытого программного обеспечения
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-03 06:30:45
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте