Mercurial > repos > deepakjadmin > mayatool3_test2
view docs/modules/txt/SimpleCalcParser.txt @ 0:4816e4a8ae95 draft default tip
Uploaded
author | deepakjadmin |
---|---|
date | Wed, 20 Jan 2016 09:23:18 -0500 |
parents | |
children |
line wrap: on
line source
NAME Parsers::SimpleCalcParser SYNOPSIS use Parsers::SimpleCalcParser ; use Parsers::SimpleCalcParser qw(:all); DESCRIPTION Parsers::SimpleCalcParser class provides the following methods: new, yyclearin, yyerrok, yyerror, yyparse Parsers::SimpleCalcParse.yy parser grammer definition file implements a simple calculator and is provided to highlight usage of lexer capability available through Parsers::SimpleCalcYYLexer, which in turn uses Parsers::YYLexer and Parsers::Lexer classes to procide underlying lexer functionality. The parser package and token table files, Parsers::SimpleCalcParser.pm and SimpleCalcParser.tab.ph, are automatically generated from parser grammar definition file, Parsers::SimpleCalcParser.yy, using byacc available through perl-byacc1.8 modified with perl5-byacc-patches-0.5 for generation of object oriented parser: byacc -l -P -d -b SimpleCalcParser SimpleCalcParser.yy mv SimpleCalcParser.tab.pl SimpleCalcParser.pm METHODS new $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex, \&Parsers::SimpleCalcParser::yyerror); $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex, \&Parsers::SimpleCalcParser::yyerror, $Debug); Using specified *YYLex* *YYError* functions, new method generates a new SimpleCalcParser and returns a reference to newly created SimpleCalcYYParser object. Examples: # Input string... $InputText = "3 + 4 +6\nx=3\ny=5\nx+y\nx+z\n"; $YYLexer = new Parsers::SimpleCalcYYLexer($InputText); $YYLex = $YYLexer->GetYYLex(); $Debug = 0; $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex, \&Parsers::SimpleCalcParser::yyerror, $Debug); $Value = $SimpleCalcParser->yyparse(); print "Value = " . (defined($Value) ? "$Value" : "Undefined") . "\n"; # Input file... $InputFile = "TestSimpleCalcParser.txt"; open INPUTFILE, "$InputFile" or die "Couldn't open $InputFile: $!\n"; $YYLexer = new Parsers::SimpleCalcYYLexer(\*INPUTFILE); $YYLex = $YYLexer->GetYYLex(); $Debug = 0; $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex, \&Parsers::SimpleCalcParser::yyerror, $Debug); $Value = $SimpleCalcParser->yyparse(); print "Value = " . (defined($Value) ? "$Value" : "Undefined") . "\n"; close INPUTFILE; # Input iterator... $InputFile = "TestSimpleCalcParser.txt"; open INPUTFILE, "$InputFile" or die "Couldn't open $InputFile: $!\n"; $InputIterator = sub { return <INPUTFILE>; }; $YYLexer = new Parsers::SimpleCalcYYLexer($InputIterator); $YYLex = $YYLexer->GetYYLex(); $Debug = 0; $SimpleCalcParser = new Parsers::SimpleCalcParser($YYLex, \&Parsers::SimpleCalcParser::yyerror, $Debug); $Value = $SimpleCalcParser->yyparse(); print "Value = " . (defined($Value) ? "$Value" : "Undefined") . "\n"; close INPUTFILE; yyclearin $SimpleCalcParser->yyclearin(); yyclearin method clears any previous look-ahead token after encountering a syntax error during parsing. It can be used after yyerrok in a grammer rule with the reserved word error. yyerrok $SimpleCalcParser->yyerrok(); yyerrok method is used with the reserved word error in grammer rule to indcate error recovery is complete after encountering a syntax error during parsing. yyerror $SimpleCalcParser->yyerror(); yyerror function is provided for the caller to use during initialization of a parser. It is used by yyparse to print any error messages encountered during parsing of the input. yyparse $Value = $SimpleCalcParser->yyparse(); Returns *Value* after parsing all the input from a input stream using specified grammer rules. AUTHOR Manish Sud <msud@san.rr.com> SEE ALSO Lexer.pm, YYLexer.pm, SimpleCalcYYLexer.pm COPYRIGHT Copyright (C) 2015 Manish Sud. All rights reserved. This file is part of MayaChemTools. MayaChemTools is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.