comparison mayachemtools/docs/modules/man3/YYLexer.3 @ 0:73ae111cf86f draft

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 11:55:01 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:73ae111cf86f
1 .\" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.22)
2 .\"
3 .\" Standard preamble:
4 .\" ========================================================================
5 .de Sp \" Vertical space (when we can't use .PP)
6 .if t .sp .5v
7 .if n .sp
8 ..
9 .de Vb \" Begin verbatim text
10 .ft CW
11 .nf
12 .ne \\$1
13 ..
14 .de Ve \" End verbatim text
15 .ft R
16 .fi
17 ..
18 .\" Set up some character translations and predefined strings. \*(-- will
19 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
20 .\" double quote, and \*(R" will give a right double quote. \*(C+ will
21 .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
22 .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
23 .\" nothing in troff, for use with C<>.
24 .tr \(*W-
25 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
26 .ie n \{\
27 . ds -- \(*W-
28 . ds PI pi
29 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
30 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
31 . ds L" ""
32 . ds R" ""
33 . ds C` ""
34 . ds C' ""
35 'br\}
36 .el\{\
37 . ds -- \|\(em\|
38 . ds PI \(*p
39 . ds L" ``
40 . ds R" ''
41 'br\}
42 .\"
43 .\" Escape single quotes in literal strings from groff's Unicode transform.
44 .ie \n(.g .ds Aq \(aq
45 .el .ds Aq '
46 .\"
47 .\" If the F register is turned on, we'll generate index entries on stderr for
48 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
49 .\" entries marked with X<> in POD. Of course, you'll have to process the
50 .\" output yourself in some meaningful fashion.
51 .ie \nF \{\
52 . de IX
53 . tm Index:\\$1\t\\n%\t"\\$2"
54 ..
55 . nr % 0
56 . rr F
57 .\}
58 .el \{\
59 . de IX
60 ..
61 .\}
62 .\"
63 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
64 .\" Fear. Run. Save yourself. No user-serviceable parts.
65 . \" fudge factors for nroff and troff
66 .if n \{\
67 . ds #H 0
68 . ds #V .8m
69 . ds #F .3m
70 . ds #[ \f1
71 . ds #] \fP
72 .\}
73 .if t \{\
74 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
75 . ds #V .6m
76 . ds #F 0
77 . ds #[ \&
78 . ds #] \&
79 .\}
80 . \" simple accents for nroff and troff
81 .if n \{\
82 . ds ' \&
83 . ds ` \&
84 . ds ^ \&
85 . ds , \&
86 . ds ~ ~
87 . ds /
88 .\}
89 .if t \{\
90 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
91 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
92 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
93 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
94 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
95 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
96 .\}
97 . \" troff and (daisy-wheel) nroff accents
98 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
99 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
100 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
101 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
102 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
103 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
104 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
105 .ds ae a\h'-(\w'a'u*4/10)'e
106 .ds Ae A\h'-(\w'A'u*4/10)'E
107 . \" corrections for vroff
108 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
109 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
110 . \" for low resolution devices (crt and lpr)
111 .if \n(.H>23 .if \n(.V>19 \
112 \{\
113 . ds : e
114 . ds 8 ss
115 . ds o a
116 . ds d- d\h'-1'\(ga
117 . ds D- D\h'-1'\(hy
118 . ds th \o'bp'
119 . ds Th \o'LP'
120 . ds ae ae
121 . ds Ae AE
122 .\}
123 .rm #[ #] #H #V #F C
124 .\" ========================================================================
125 .\"
126 .IX Title "YYLEXER 1"
127 .TH YYLEXER 1 "2015-03-29" "perl v5.14.2" "MayaChemTools"
128 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
129 .\" way too many mistakes in technical documents.
130 .if n .ad l
131 .nh
132 .SH "NAME"
133 Parsers::YYLexer
134 .SH "SYNOPSIS"
135 .IX Header "SYNOPSIS"
136 use Parseres::YYLexer;
137 .PP
138 use Parsers::YYLexer qw(:all);
139 .SH "DESCRIPTION"
140 .IX Header "DESCRIPTION"
141 \&\fBYYLexer\fR class provides the following methods:
142 .PP
143 new, GetYYLex, Next, Peek, SetupYYTabFile, StringifyYYLexer, YYLex
144 .PP
145 \&\fBParsers::YYLexer\fR class is derived from \fBParsers::Lexer\fR base class, which provides all
146 the underlying lexer functionality. \fBYYLexer\fR class is designed to be used with
147 \&\fByyparse\fR code generated by running \fBbyacc\fR on a parsers defined using
148 parser definition \fBParserName.yy\fR file.
149 .PP
150 \&\fIYYTabFile\fR containing mapping of token labels to integers must be explicitly
151 specified by the caller. This file is processed during new method invocation and
152 mapping of token labels to integers is loaded in a hash to be used later by \fBYYLex\fR
153 method to return token number and text pairs to the parser.
154 .SS "\s-1METHODS\s0"
155 .IX Subsection "METHODS"
156 .IP "\fBnew\fR" 4
157 .IX Item "new"
158 .Vb 1
159 \& $YYLexer = new Parsers::YYLexer($Input, @YYLexerTokensSpec);
160 .Ve
161 .Sp
162 Using specified \fIInput\fR and \fIYYLexerTokensSpec\fR, \fBnew\fR method generates a new
163 \&\fBYYLexer\fR and returns a reference to newly created \fBYYLexer\fR object.
164 .Sp
165 Examples:
166 .Sp
167 .Vb 10
168 \& # Tokens specifications supplied by the caller. It\*(Aqs an array containing references
169 \& # to arrays with each containing TokenLabel and TokenMatchRegex pair along with
170 \& # an option reference to code to be executed after a matched.
171 \& #
172 \& @LexerTokensSpec = (
173 \& [ \*(AqLETTER\*(Aq, qr/[a\-zA\-Z]/ ],
174 \& [ \*(AqNUMBER\*(Aq, qr/\ed+/ ],
175 \& [ \*(AqSPACE\*(Aq, qr/[ ]*/,
176 \& sub { my($This, $TokenLabel, $MatchedText) = @_; return \*(Aq\*(Aq; }
177 \& ],
178 \& [ \*(AqNEWLINE\*(Aq, qr/(?:\er\en|\er|\en)/,
179 \& sub { my($This, $TokenLabel, $MatchedText) = @_; return "\en"; }
180 \& ],
181 \& [ \*(AqCHAR\*(Aq, qr/./ ]
182 \& );
183 \&
184 \& # Input string...
185 \& $InputText = \*(Aqy = 3 + 4\*(Aq;
186 \&
187 \& $YLexer = new Parsers::YYLexer($InputText, @LexerTokensSpec);
188 \&
189 \& # Setup default token table file...
190 \& $YYTabFile = "Parsers/SimpleCalcParser.tab.ph";
191 \& $This\->SetupYYTabFile($YYTabFile);
192 \&
193 \& # Process input stream...
194 \& ($TokenNumber, $TokenText) = $YYLexer\->Lex();
195 \& print "TokenNumber: $TokenNumber; TokenText: $TokenText\en";
196 \&
197 \& # Input file...
198 \& $InputFile = "Input.txt";
199 \& open INPUTFILE, "$InputFile" or die "Couldn\*(Aqt open $InputFile: $!\en";
200 \& $Lexer = new Parsers::YYLexer(\e*INPUTFILE, @LexerTokensSpec);
201 \&
202 \& # Input file iterator...
203 \& $InputFile = "TestSimpleCalcParser.txt";
204 \& open INPUTFILE, "$InputFile" or die "Couldn\*(Aqt open $InputFile: $!\en";
205 \& $InputIterator = sub { return <INPUTFILE>; };
206 \& $Lexer = new Parsers::YYLexer($InputIterator, @LexerTokensSpec);
207 \&
208 \& # Usage with code generated by byacc from a parser definition
209 \& # file SimpleCalcParser.yy...
210 \&
211 \& $InputText = "3 + 4 +6\enx=3\eny=5\enx+y\enx+z\en";
212 \&
213 \& $YYLexer = new Parsers::YYLexer($InputText,@LexerTokensSpec);
214 \&
215 \& $YYLex = $YYLexer\->GetYYLex();
216 \&
217 \& $YYTabFile = "Parsers/SimpleCalcParser.tab.ph";
218 \& $YYLexer\->SetupYYTabFile($YYTabFile);
219 \&
220 \& $Debug = 0;
221 \& $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex,
222 \& \e&Parsers::SimpleCalcParser::yyerror, $Debug);
223 \&
224 \& $Value = $SimpleCalcParser\->yyparse();
225 \& print "Value = " . (defined($Value) ? "$Value" : "Undefined") . "\en";
226 .Ve
227 .IP "\fBGetYYLex\fR" 4
228 .IX Item "GetYYLex"
229 .Vb 1
230 \& $YYLex = $YYLexer\->GetYYLex();
231 .Ve
232 .Sp
233 Returns a curried verson of YYLexer as \fBYYLex\fR: yyparse in parser generated by
234 byacc expects it to call without passing any argument for the \fIYYLexer\fR object.
235 .IP "\fBNext\fR" 4
236 .IX Item "Next"
237 .Vb 1
238 \& ($TokenNumber, $TokenText) = $YYLexer\->Next();
239 .Ve
240 .Sp
241 Returns next available \fBTokenNumber\fR and any matched \fBTokenText\fR from
242 input stream by removing it from the input stream. Token number and text of
243 zero corresponds to end of input (\s-1EOI\s0).
244 .IP "\fBPeek\fR" 4
245 .IX Item "Peek"
246 .Vb 1
247 \& ($TokenNumber, $TokenText) = $YYLexer\->Peek();
248 .Ve
249 .Sp
250 Returns next available \fBTokenNumber\fR and any matched \fBTokenText\fR from
251 input stream by simply looking ahead and without removing it from the input stream.
252 Token number and text of zero corresponds to end of input (\s-1EOI\s0).
253 .IP "\fBSetupYYTabFile\fR" 4
254 .IX Item "SetupYYTabFile"
255 .Vb 1
256 \& $YYLexer = $YYLexer\->SetupYYTabFile($YYTabFile);
257 .Ve
258 .Sp
259 Processes token labels to integers data map in specified \fIYYTabFile\fR and returns
260 \&\fIYYLexer\fR.
261 .Sp
262 Notes:
263 .Sp
264 .Vb 10
265 \& . YYTabFile must be a complete path or available through @INC path in the
266 \& same directory where this package is located.
267 \& . Name of YYTabFile might start with any valid sub directory name in @INC
268 \& For example, "Parsers/<YYTablFile>" implies the tab file in parsers sub
269 \& directory under MayaChemTools lib directory as it would be already in @INC
270 \& path.
271 \& . YYTabFile must be explicitly set by the caller. The default YYTabFile name,
272 \& y.tab.ph, generated by byacc is not used implicitly to avoid confusion
273 \& among multiple distinct instances of YYLexer.
274 \& . YYTabFile is generated by byacc during its usage with \-d options and
275 \& contains mapping of token codes to token names/labels. YYLexer used this
276 \& file to map token labels to token codes before returning token code and
277 \& value pair back to yyparse function used by byacc.
278 \& . User defined token numbers start from 257
279 \& . Token number for any user defined token EOI is mapped to its value before
280 \& default token number of 0 for EOI.
281 \&
282 \& The format of YYTabFile generated by byacc during generation of parser code in
283 \& Perl code is:
284 \&
285 \& ... ...
286 \& $NUMBER=257;
287 \& $ADDOP=258;
288 \& $SUBOP=259;
289 \& ... ..
290 .Ve
291 .IP "\fBYYLex\fR" 4
292 .IX Item "YYLex"
293 .Vb 2
294 \& ($TokenNumber, $TokenText) = $YYLexer\->YYLex();
295 \& ($TokenNumber, $TokenText) = $YYLexer\->YYLex($Mode);
296 .Ve
297 .Sp
298 Returns available \fBTokenNumber\fR and any matched \fBTokenText\fR from
299 input stream by either removing it from the input stream or by simply looking
300 ahead and without removing it from the input stream. Token number and text of
301 zero corresponds to end of input (\s-1EOI\s0).
302 .Sp
303 Possible \fIMode\fR values: \fIPeek, Next\fR. Default: \fINext\fR.
304 .Sp
305 \&\fIYYLex\fR is designed to be used with \fByyparse\fR code generated by running
306 \&\fBbyacc\fR on a parsers defined using parser definition \fBParserName.yy\fR file.
307 .Sp
308 Notes:
309 .Sp
310 .Vb 5
311 \& . Token label and value pairs returned by Lexer from by base class, which
312 \& can\*(Aqt be mapped to token labels specified in YYTabFile are ignored.
313 \& . Token text of length 1 returned by Lexer from base class without a
314 \& corresponding explicit token label, which can\*(Aqt be mapped to a token
315 \& number using Perl ord function, is ignored.
316 .Ve
317 .IP "\fBStringifyYYLexer\fR" 4
318 .IX Item "StringifyYYLexer"
319 .Vb 1
320 \& $YYLexerString = $YYLexer\->StringifyYYLexer();
321 .Ve
322 .Sp
323 Returns a string containing information about \fIYYLexer\fR object.
324 .SH "AUTHOR"
325 .IX Header "AUTHOR"
326 Manish Sud <msud@san.rr.com>
327 .SH "SEE ALSO"
328 .IX Header "SEE ALSO"
329 Lexer.pm, SimpleCalcYYLexer.pm, SimpleCalcParser.yy
330 .SH "COPYRIGHT"
331 .IX Header "COPYRIGHT"
332 Copyright (C) 2015 Manish Sud. All rights reserved.
333 .PP
334 This file is part of MayaChemTools.
335 .PP
336 MayaChemTools is free software; you can redistribute it and/or modify it under
337 the terms of the \s-1GNU\s0 Lesser General Public License as published by the Free
338 Software Foundation; either version 3 of the License, or (at your option)
339 any later version.