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