annotate mayachemtools/docs/modules/txt/YYLexer.txt @ 9:ab29fa5c8c1f draft default tip

Uploaded
author deepakjadmin
date Thu, 15 Dec 2016 14:18:03 -0500
parents 73ae111cf86f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
1 NAME
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
2 Parsers::YYLexer
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
3
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
4 SYNOPSIS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
5 use Parseres::YYLexer;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
6
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
7 use Parsers::YYLexer qw(:all);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
8
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
9 DESCRIPTION
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
10 YYLexer class provides the following methods:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
11
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
12 new, GetYYLex, Next, Peek, SetupYYTabFile, StringifyYYLexer, YYLex
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
13
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
14 Parsers::YYLexer class is derived from Parsers::Lexer base class, which
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
15 provides all the underlying lexer functionality. YYLexer class is
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
16 designed to be used with yyparse code generated by running byacc on a
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
17 parsers defined using parser definition ParserName.yy file.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
18
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
19 *YYTabFile* containing mapping of token labels to integers must be
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
20 explicitly specified by the caller. This file is processed during new
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
21 method invocation and mapping of token labels to integers is loaded in a
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
22 hash to be used later by YYLex method to return token number and text
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
23 pairs to the parser.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
24
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
25 METHODS
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
26 new
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
27 $YYLexer = new Parsers::YYLexer($Input, @YYLexerTokensSpec);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
28
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
29 Using specified *Input* and *YYLexerTokensSpec*, new method
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
30 generates a new YYLexer and returns a reference to newly created
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
31 YYLexer object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
32
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
33 Examples:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
34
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
35 # Tokens specifications supplied by the caller. It's an array containing references
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
36 # to arrays with each containing TokenLabel and TokenMatchRegex pair along with
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
37 # an option reference to code to be executed after a matched.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
38 #
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
39 @LexerTokensSpec = (
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
40 [ 'LETTER', qr/[a-zA-Z]/ ],
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
41 [ 'NUMBER', qr/\d+/ ],
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
42 [ 'SPACE', qr/[ ]*/,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
43 sub { my($This, $TokenLabel, $MatchedText) = @_; return ''; }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
44 ],
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
45 [ 'NEWLINE', qr/(?:\r\n|\r|\n)/,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
46 sub { my($This, $TokenLabel, $MatchedText) = @_; return "\n"; }
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
47 ],
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
48 [ 'CHAR', qr/./ ]
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
49 );
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
50
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
51 # Input string...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
52 $InputText = 'y = 3 + 4';
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
53
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
54 $YLexer = new Parsers::YYLexer($InputText, @LexerTokensSpec);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
55
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
56 # Setup default token table file...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
57 $YYTabFile = "Parsers/SimpleCalcParser.tab.ph";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
58 $This->SetupYYTabFile($YYTabFile);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
59
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
60 # Process input stream...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
61 ($TokenNumber, $TokenText) = $YYLexer->Lex();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
62 print "TokenNumber: $TokenNumber; TokenText: $TokenText\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
63
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
64 # Input file...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
65 $InputFile = "Input.txt";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
66 open INPUTFILE, "$InputFile" or die "Couldn't open $InputFile: $!\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
67 $Lexer = new Parsers::YYLexer(\*INPUTFILE, @LexerTokensSpec);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
68
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
69 # Input file iterator...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
70 $InputFile = "TestSimpleCalcParser.txt";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
71 open INPUTFILE, "$InputFile" or die "Couldn't open $InputFile: $!\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
72 $InputIterator = sub { return <INPUTFILE>; };
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
73 $Lexer = new Parsers::YYLexer($InputIterator, @LexerTokensSpec);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
74
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
75 # Usage with code generated by byacc from a parser definition
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
76 # file SimpleCalcParser.yy...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
77
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
78 $InputText = "3 + 4 +6\nx=3\ny=5\nx+y\nx+z\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
79
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
80 $YYLexer = new Parsers::YYLexer($InputText,@LexerTokensSpec);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
81
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
82 $YYLex = $YYLexer->GetYYLex();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
83
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
84 $YYTabFile = "Parsers/SimpleCalcParser.tab.ph";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
85 $YYLexer->SetupYYTabFile($YYTabFile);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
86
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
87 $Debug = 0;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
88 $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
89 \&Parsers::SimpleCalcParser::yyerror, $Debug);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
90
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
91 $Value = $SimpleCalcParser->yyparse();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
92 print "Value = " . (defined($Value) ? "$Value" : "Undefined") . "\n";
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
93
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
94 GetYYLex
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
95 $YYLex = $YYLexer->GetYYLex();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
96
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
97 Returns a curried verson of YYLexer as YYLex: yyparse in parser
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
98 generated by byacc expects it to call without passing any argument
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
99 for the *YYLexer* object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
100
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
101 Next
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
102 ($TokenNumber, $TokenText) = $YYLexer->Next();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
103
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
104 Returns next available TokenNumber and any matched TokenText from
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
105 input stream by removing it from the input stream. Token number and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
106 text of zero corresponds to end of input (EOI).
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
107
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
108 Peek
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
109 ($TokenNumber, $TokenText) = $YYLexer->Peek();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
110
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
111 Returns next available TokenNumber and any matched TokenText from
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
112 input stream by simply looking ahead and without removing it from
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
113 the input stream. Token number and text of zero corresponds to end
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
114 of input (EOI).
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
115
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
116 SetupYYTabFile
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
117 $YYLexer = $YYLexer->SetupYYTabFile($YYTabFile);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
118
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
119 Processes token labels to integers data map in specified *YYTabFile*
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
120 and returns *YYLexer*.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
121
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
122 Notes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
123
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
124 . YYTabFile must be a complete path or available through @INC path in the
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
125 same directory where this package is located.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
126 . Name of YYTabFile might start with any valid sub directory name in @INC
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
127 For example, "Parsers/<YYTablFile>" implies the tab file in parsers sub
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
128 directory under MayaChemTools lib directory as it would be already in @INC
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
129 path.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
130 . YYTabFile must be explicitly set by the caller. The default YYTabFile name,
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
131 y.tab.ph, generated by byacc is not used implicitly to avoid confusion
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
132 among multiple distinct instances of YYLexer.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
133 . YYTabFile is generated by byacc during its usage with -d options and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
134 contains mapping of token codes to token names/labels. YYLexer used this
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
135 file to map token labels to token codes before returning token code and
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
136 value pair back to yyparse function used by byacc.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
137 . User defined token numbers start from 257
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
138 . Token number for any user defined token EOI is mapped to its value before
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
139 default token number of 0 for EOI.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
140
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
141 The format of YYTabFile generated by byacc during generation of parser code in
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
142 Perl code is:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
143
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
144 ... ...
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
145 $NUMBER=257;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
146 $ADDOP=258;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
147 $SUBOP=259;
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
148 ... ..
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
149
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
150 YYLex
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
151 ($TokenNumber, $TokenText) = $YYLexer->YYLex();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
152 ($TokenNumber, $TokenText) = $YYLexer->YYLex($Mode);
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
153
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
154 Returns available TokenNumber and any matched TokenText from input
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
155 stream by either removing it from the input stream or by simply
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
156 looking ahead and without removing it from the input stream. Token
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
157 number and text of zero corresponds to end of input (EOI).
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
158
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
159 Possible *Mode* values: *Peek, Next*. Default: *Next*.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
160
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
161 *YYLex* is designed to be used with yyparse code generated by
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
162 running byacc on a parsers defined using parser definition
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
163 ParserName.yy file.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
164
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
165 Notes:
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
166
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
167 . Token label and value pairs returned by Lexer from by base class, which
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
168 can't be mapped to token labels specified in YYTabFile are ignored.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
169 . Token text of length 1 returned by Lexer from base class without a
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
170 corresponding explicit token label, which can't be mapped to a token
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
171 number using Perl ord function, is ignored.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
172
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
173 StringifyYYLexer
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
174 $YYLexerString = $YYLexer->StringifyYYLexer();
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
175
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
176 Returns a string containing information about *YYLexer* object.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
177
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
178 AUTHOR
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
179 Manish Sud <msud@san.rr.com>
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
180
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
181 SEE ALSO
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
182 Lexer.pm, SimpleCalcYYLexer.pm, SimpleCalcParser.yy
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
183
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
184 COPYRIGHT
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
185 Copyright (C) 2015 Manish Sud. All rights reserved.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
186
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
187 This file is part of MayaChemTools.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
188
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
189 MayaChemTools is free software; you can redistribute it and/or modify it
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
190 under the terms of the GNU Lesser General Public License as published by
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
191 the Free Software Foundation; either version 3 of the License, or (at
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
192 your option) any later version.
73ae111cf86f Uploaded
deepakjadmin
parents:
diff changeset
193