RPA Toolkit
documentation structure improvements.
[rpatk.git] / rpa / doc / introduction.txt
1
2 /** \page intro Introduction
3 Regular Pattern Analyzer (RPA) is a bottom-up, recursive parser. 
4 The input grammar notation is Backus–Naur Form (BNF) and the produced output is a browsable Abstract Syntax Tree (AST).
5 The grammar allows Regular Expressions, so the parser can also be used as RegEx or search engine. The execution
6 engine supports muti-threading and it can parse multiple input streams simultaneously.
7
8 \section features Features
9  - Backus–Naur Form (BNF)
10
11  - Produces a browsable Abstract Syntax Tree
12  
13  - Regular Expressions
14  
15  - Input Encodings: UTF8, UTF16
16  
17  - Case sensitive/insensitive searching or parsing
18  
19  - Left-Recursive expressions (direct and indirect)
20
21  - Right-Recursive expressions (direct and indirect)
22
23  - Multi-Threading.
24
25 Support for recursive expressions is important for parsing computer languages, especially the Left-Recursion.
26 The RPA parser is capable to handle both direct and indirect left and right recursive expressions.
27 It uses iterative algorithm to handle Left-Recursion, because it is impossible to handle Left-Recursive expressions using recursion.  
28 Left-Recursive expressions produce left associativity and that is what you would want to use for parsing mathematical expressions. Math operations normally 
29 have left associativity. For example, consider the expression 7 − 4 + 2. The result could be either (7 − 4) + 2 = 5 or 7 − (4 + 2) = 1. 
30 The former result corresponds to the case when + and − are left-associative, the latter to when + and - are right-associative.
31
32 \section design Design
33 RPA analyzes the BNF schema and builds a parsing tree. Then the parsing tree is compiled to byte code. The byte code is run in a
34 virtual machine to parse the input stream and produce an Abstract Syntax Tree (AST). Once the schema is compiled to byte code, the
35 code can be run in multiple VMs (threads), the parser naturally supports multi-threading. 
36
37
38 */