MayaChemTools

   1 package Parsers::SimpleCalcYYLexer;
   2 #
   3 # $RCSfile: SimpleCalcYYLexer.pm,v $
   4 # $Date: 2015/02/28 20:50:55 $
   5 # $Revision: 1.9 $
   6 #
   7 # Author: Manish Sud <msud@san.rr.com>
   8 #
   9 # Copyright (C) 2015 Manish Sud. All rights reserved.
  10 #
  11 # This file is part of MayaChemTools.
  12 #
  13 # MayaChemTools is free software; you can redistribute it and/or modify it under
  14 # the terms of the GNU Lesser General Public License as published by the Free
  15 # Software Foundation; either version 3 of the License, or (at your option) any
  16 # later version.
  17 #
  18 # MayaChemTools is distributed in the hope that it will be useful, but without
  19 # any warranty; without even the implied warranty of merchantability of fitness
  20 # for a particular purpose.  See the GNU Lesser General Public License for more
  21 # details.
  22 #
  23 # You should have received a copy of the GNU Lesser General Public License
  24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
  25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
  26 # Boston, MA, 02111-1307, USA.
  27 #
  28 
  29 use strict;
  30 use Carp;
  31 use Exporter;
  32 use Scalar::Util ();
  33 use Parsers::YYLexer;
  34 
  35 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
  36 
  37 @ISA = qw(Parsers::YYLexer Exporter);
  38 @EXPORT = qw();
  39 @EXPORT_OK = qw();
  40 
  41 %EXPORT_TAGS = (all  => [@EXPORT, @EXPORT_OK]);
  42 
  43 # Setup class variables...
  44 my($ClassName, $YYTabFile, @YYLexerTokensSpec);
  45 _InitializeClass();
  46 
  47 # Overload Perl functions...
  48 use overload '""' => 'StringifySimpleCalcYYLexer';
  49 
  50 # Class constructor...
  51 sub new {
  52   my($Class, $Input) = @_;
  53   my(@TokensSpec);
  54 
  55   # Initialize object...
  56   my $This = $Class->SUPER::new($Input,  @YYLexerTokensSpec);
  57   bless $This, ref($Class) || $Class;
  58   $This->_InitializeYYLexer();
  59 
  60   return $This;
  61 }
  62 
  63 # Initialize object data...
  64 #
  65 sub _InitializeYYLexer {
  66   my($This) = @_;
  67 
  68   # Setup default YYTabFile containing mapping of token names to numbers...
  69   $This->SetupYYTabFile($YYTabFile);
  70 
  71   return $This;
  72 }
  73 
  74 # Initialize class ...
  75 sub _InitializeClass {
  76   #Class name...
  77   $ClassName = __PACKAGE__;
  78 
  79   # Setup default token table file...
  80   $YYTabFile = "Parsers/SimpleCalcParser.tab.ph";
  81 
  82   # Setup default lexer tokens specs...
  83   @YYLexerTokensSpec = (
  84                         [ 'LETTER', qr/[a-zA-Z]/ ],
  85                         [ 'NUMBER', qr/\d+/ ],
  86                         [ 'SPACE', qr/[ ]*/, sub { my($This, $TokenLabel, $MatchedText) = @_; return ''; } ],
  87                         [ 'NEWLINE', qr/(?:\r\n|\r|\n)/, sub { my($This, $TokenLabel, $MatchedText) = @_;  return "\n"; } ],
  88                         [ 'CHAR', qr/./ ]
  89                        );
  90 }
  91 
  92 # Is it a lexer object?
  93 sub _IsSimpleCalcYYLexer {
  94   my($Object) = @_;
  95 
  96   return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
  97 }
  98 
  99 # Return a string containing information about lexer...
 100 sub StringifySimpleCalcYYLexer {
 101   my($This) = @_;
 102   my($SimleCalcYYLexerString);
 103 
 104   $SimleCalcYYLexerString = "SimpleCalcYYLexer: PackageName: $ClassName; " . $This->_GetYYLexerInfoString();
 105 
 106   return $SimleCalcYYLexerString;
 107 }
 108