Jump to content

Ragel

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Allforrous (talk | contribs) at 01:29, 31 August 2018 (External links: Commonscat-inline template.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Ragel
Developer(s)Adrian Thurston[1]
Stable release
6.10 / March 24, 2017; 7 years ago (2017-03-24)
Repository
Operating systemUnix-like, Windows
TypeState machine compiler
LicenseMIT License
Websitecomplang.org/ragel/

Ragel is a finite-state machine compiler and a parser generator. Initially Ragel supported output for C, C++ and Assembly source code,[2]. Although subsequently extended to support several other languages (said to be Objective C, D, Go, Ruby, and Java) this support of other languages was withdrawn [3]. It supports the generation of table or control flow driven state machines from regular expressions[4] and/or state charts and can also build lexical analysers via the longest-match method. Ragel specifically targets text parsing and input validation.[5]

Overview

Ragel supports the generation of table or control flow driven state machines from regular expressions and/or state charts and can also build lexical analysers via the longest-match method. A unique feature of Ragel is that user actions can be associated with arbitrary state machine transitions using operators that are integrated into the regular expressions. Ragel also supports visualization of the generated machine via graphviz.

File:Ragel visualisation.png

The graph represents a state-machine that takes user input as a series of bytes representing ASCII characters and control codes. 48..57 is equivalent to the regular expression [0-9] (i.e. any digit), so only sequences beginning with a digit can be recognised. If 10 (line feed) is encountered, we're done. 46 is the decimal point ('.'), 43 and 45 are positive and negative signs ('+', '-') and 69/101 is uppercase/lowercase 'e' (to indicate a number in scientific format). As such it will recognize the following properly:

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

but not:

.3
-5
3.e2
2e5.1

See also

References

  1. ^ Dr. Adrian D. Thurston at complang.org Last changed: Jul 14, 2013
  2. ^ Adrian D. Thurston. "Parsing Computer Languages with an Automaton Compiled from a Single Regular Expression. Archived 2012-09-07 at the Wayback Machine" In: 11th International Conference on Implementation and Application of Automata (CIAA 2006), Lecture Notes in Computer Science, volume 4094, p. 285-286, Taipei, Taiwan, August 2006.
  3. ^ "Ragel will Target C, C++ and ASM Only". 31 July 2016.
  4. ^ Liqun Chen, Chris J. Mitchell, Andrew Martin (2009) Trusted Computing: Second International Conference, Trust 2009 Oxford, UK, April 6–8, 2009, Proceedings. p. 111
  5. ^ Omar Badreddin (2010) "Umple: a model-oriented programming language." Software Engineering, 2010 ACM/IEEE 32nd International Conference on. Vol. 2. IEEE, 2010.