Neha Patil (Editor)

Ragel

Updated on
Edit
Like
Comment
Share on FacebookTweet on TwitterShare on LinkedInShare on Reddit
Developer(s)
  
Adrian Thurston

Type
  
State machine compiler

Operating system
  
Unix-like, Windows

License
  
MIT License

Stable release
  
6.9 / October 14, 2014; 2 years ago (2014-10-14)

Website
  
www.complang.org/ragel/

Ragel is a finite-state machine compiler and a parser generator. Initially Ragel supported output for C, C++ and Assembly source code, and was subsequently extended to support Objective C, D, Go, Ruby, and Java. It 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. Ragel specifically targets text parsing and input validation.

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.

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

References

Ragel Wikipedia