CONTENTS iii
3.1.4 Leaving Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 State Action Embedding Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 To-State and From-State Actions . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.2 EOF Actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.3 Handling Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3 Action Ordering and Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4 Values and Statements Available in Code Blocks . . . . . . . . . . . . . . . . . . . . 25
4 Controlling Nondeterminism 28
4.1 Priorities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 Guarded Operators that Encapsulate Priorities . . . . . . . . . . . . . . . . . . . . . 31
4.2.1 Entry-Guarded Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2.2 Finish-Guarded Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2.3 Left-Guarded Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.4 Longest-Match Kleene Star . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5 Interface to Host Program 35
5.1 Variables Used by Ragel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Alphtype Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Getkey Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.4 Access Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.5 Variable Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.6 Pre-Push Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.7 Post-Pop Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8 Write Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8.1 Write Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8.2 Write Start, First Final and Error . . . . . . . . . . . . . . . . . . . . . . . . 39
5.8.3 Write Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.8.4 Write Exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.8.5 Write Exports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.9 Maintaining Pointers to Input Data . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.10 Specifying the Host Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.11 Choosing a Generated Code Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6 Beyond the Basic Model 44
6.1 Parser Modularization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.2 Referencing Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.3 Scanners . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.4 State Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.4.1 Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4.2 Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4.3 Epsilon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4.4 Simplifying State Charts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4.5 Dropping Down One Level of Abstraction . . . . . . . . . . . . . . . . . . . . 50
6.5 Semantic Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.6 Implementing Lookahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.7 Parsing Recursive Language Structures . . . . . . . . . . . . . . . . . . . . . . . . . . 52
评论0
最新资源