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