File Coverage

blib/lib/Lang/HL.pm
Criterion Covered Total %
statement 12 628 1.9
branch 0 46 0.0
condition 0 63 0.0
subroutine 4 132 3.0
pod 0 2 0.0
total 16 871 1.8


line stmt bran cond sub pod time code
1              
2             use strict;
3 1     1   56761 use warnings;
  1         2  
  1         25  
4 1     1   4 use utf8;
  1         2  
  1         19  
5 1     1   495 use Regexp::Grammars;
  1         12  
  1         5  
6 1     1   1101  
  1         27384  
  1         7  
7             our $VERSION = '5.016';
8              
9             my ($class) = @_;
10             return bless {}, $class;
11 0     0 0   }
12 0            
13             my ($class) = @_;
14              
15             my $code = 'use strict;
16 0     0     use warnings;
17             use utf8;';
18 0            
19             for my $element ( @{ $class->{Class}} ) {
20             $code .= $element->X();
21             }
22 0            
  0            
23 0           $code .= 'my $object = Main->new(); $object->main();';
24             return $code;
25             }
26 0            
27 0           my ($class) = @_;
28              
29             my $className = $class->{ClassName}->X();
30             my $classBlock = $class->{ClassBlock}->X($className);
31 0     0      
32             my $classCode = '
33 0           package ' . $className . ';
34 0           use strict;
35             use warnings;
36 0           use utf8;
37             use Lang::HL::Export;
38             use feature qw(signatures);
39             no warnings "experimental::signatures";
40             use Data::Printer;
41             ';
42              
43             $classCode .= $classBlock . "\n1;";
44             return $classCode;
45             }
46              
47 0           my ($class) = @_;
48 0           my $className = $class->{''};
49             return $className;
50             }
51              
52 0     0     my ($class, $className) = @_;
53 0            
54 0           my $classBlock = '
55             sub new($class) {
56             my $hashRef = { "' . $className . '" => {} };
57             return bless $hashRef, $class;
58 0     0     }
59             ';
60 0           my $classGroups = $class->{ClassGroups}->X($className);
61              
62             $classBlock .= $classGroups;
63             return $classBlock;
64             }
65              
66 0           my ($class, $className) = @_;
67              
68 0           my @classGroups;
69 0           for my $element ( @{$class->{Group}} ) {
70             push @classGroups, $element->X($className);
71             }
72              
73 0     0     my $classGroups = join("", @classGroups);
74             return $classGroups;
75 0           }
76 0            
  0            
77 0           my ($class, $className) = @_;
78              
79             return ( $class->{Comment}
80 0           || $class->{Parent}
81 0           || $class->{Packages}
82             || $class->{EmbedBlock}
83             || $class->{Function}
84             || $class->{NonSyntaxClass} )->X($className);
85 0     0     }
86              
87             my ($class, $className) = @_;
88             my $nonSyntax = $class->{''};
89              
90             my @nonSyntax = split(" ", $nonSyntax);
91             $nonSyntax = $nonSyntax[0];
92 0   0        
93             print "SyntaxError", "\n";
94             print "===========", "\n";
95             print "ClassName: ", $className, "\n";
96 0     0     die "Error: $nonSyntax \n";
97 0           }
98              
99 0           my ($class, $className) = @_;
100 0            
101             my @packageList = ($class->{PackageList})->X($className);
102 0           my $packages = join("\n", @packageList);
103 0           return $packages;
104 0           }
105 0            
106             my ($class, $className) = @_;
107              
108             my @packageList;
109 0     0     for my $element ( @{$class->{Package}} ) {
110             push @packageList, $element->X($className);
111 0           }
112 0            
113 0           return @packageList;
114             }
115              
116             my ($class, $className) = @_;
117 0     0      
118             return ( $class->{PackageWithConstructor}
119 0           || $class->{PackageWithoutConstructor} )->X($className);
120 0           }
  0            
121 0            
122             my ($class, $className) = @_;
123              
124 0           my $object = $class->{Object}->X();
125             my $packageName = $class->{PackageName}->X();
126             my $constructor = $class->{Constructor}->X();
127              
128 0     0     if(exists $class->{ObjectParameters}) {
129             my $objectParameters = $class->{ObjectParameters}->X($className);
130             my $parameters;
131 0   0        
132             if(ref($objectParameters)) {
133             $parameters = join(",", @{$objectParameters});
134             } else {
135 0     0     $parameters = $objectParameters;
136             }
137 0            
138 0           my $packageWithConstructor = "use " . $packageName . ";\n"
139 0           . "my \$" . $object . " = " . $packageName . "->"
140             . $constructor . "(" . $parameters . ");\n";
141 0 0         return $packageWithConstructor;
142 0           }
143 0            
144             my $packageWithConstructor = "use " . $packageName . ";\n"
145 0 0         . "my \$" . $object . " = " . $packageName
146 0           . "->" . $constructor . "();\n";
  0            
147             return $packageWithConstructor;
148 0           }
149              
150             my ($class, $className) = @_;
151 0            
152             return ( $class->{PackageParams}
153             || $class->{Parameters} )->X();
154 0           }
155              
156             my ($class, $className) = @_;
157 0           my @keyValuePairs;
158              
159             my $keyValuePairs = "";
160 0           for my $element ( @{ $class->{KeyValue}} ) {
161             @keyValuePairs = ();
162             push @keyValuePairs, $element->X($className);
163             $keyValuePairs .= $keyValuePairs[0] . " => " . $keyValuePairs[1] . ", ";
164 0     0     }
165              
166             return $keyValuePairs;
167 0   0       }
168              
169             my ($class, $className) = @_;
170              
171 0     0     my @packageDir;
172 0           for my $element ( @{ $class->{PackageDir}} ) {
173             push @packageDir, $element->X($className);
174 0           }
175 0            
  0            
176 0           my $packageName = join("::", @packageDir);
177 0           return $packageName;
178 0           }
179              
180             my ($class, $className) = @_;
181 0           my $packageName = $class->{PackageName}->X($className);
182              
183             if(exists $class->{QW}) {
184             my $qw = $class->{QW}->X($className);
185 0     0      
186             my $packageWithoutConstructor = "use " . $packageName . $qw . ";\n";
187 0           return $packageWithoutConstructor;
188 0           }
  0            
189 0            
190             my $packageWithoutConstructor = "use " . $packageName . ";\n";
191             return $packageWithoutConstructor;
192 0           }
193 0            
194             my ($class, $className) = @_;
195              
196             my @functionList = $class->{FunctionList}->X($className);
197 0     0     my $qw = " qw(";
198 0           my $funcitonList = join(" ", @functionList);
199             $qw .= $funcitonList . ")";
200 0 0         }
201 0            
202             my ($class, $className) = @_;
203 0            
204 0           my @functionList;
205             for my $element ( @{ $class->{FunctionName}} ) {
206             push @functionList, $element->X($className);
207 0           }
208 0            
209             return @functionList;
210             }
211              
212 0     0     my ($class, $className) = @_;
213              
214 0           my $constructor = $class->{''};
215 0           return $constructor;
216 0           }
217 0            
218             my ($class, $className) = @_;
219              
220             my $object = $class->{''};
221 0     0     return $object;
222             }
223 0            
224 0           my ($class, $className) = @_;
  0            
225 0            
226             my $packageDir = $class->{''};
227             return $packageDir;
228 0           }
229              
230             my ($class, $className) = @_;
231             my $parent = 'our @ISA = qw(';
232 0     0      
233             my $classNames = $class->{ClassNames}->X($className);
234 0           $parent .= $classNames . ");\n";
235 0           }
236              
237             my ($class, $className) = @_;
238              
239 0     0     my @classNames;
240             for my $element ( @{$class->{ClassName}} ) {
241 0           push @classNames, $element->X($className);
242 0           }
243              
244             my $classNames = join(" ", @classNames);
245             return $classNames;
246 0     0     }
247              
248 0           my ($class, $className) = @_;
249 0           my $comment = $class->{LineComment}->X($className);
250             $comment = "\n" . "# " . $comment . "\n";
251             return $comment;
252             }
253 0     0      
254 0           my ($class, $className) = @_;
255             return $class->{''};
256 0           }
257 0            
258             my ($class, $className) = @_;
259              
260             my $functionName = $class->{FunctionName}->X($className);
261 0     0     my $functionParamList = $class->{FunctionParamList}->X($className);
262             my $codeBlock = $class->{CodeBlock}->X($className, $functionName);
263 0            
264 0           my $function = "\n sub " . $functionName . $functionParamList . $codeBlock;
  0            
265 0           return $function;
266             }
267              
268 0           my ($class, $className) = @_;
269 0            
270             my $functionName = $class->{''};
271             return $functionName;
272             }
273 0     0      
274 0           my ($class, $className) = @_;
275 0            
276 0           my @params = ( $class->{EmptyParamList}
277             || $class->{FunctionParams} )->X($className);
278              
279             my $functionParamList;
280 0     0     $functionParamList = '( $class, ';
281 0            
282             if($#params >= 0) {
283             foreach my $param (@params) {
284             if( $param eq "" ) {} else {
285 0     0     $functionParamList .= "\$" . $param . ",";
286             }
287 0           }
288 0           if( substr($functionParamList, -1) eq "," ) {
289 0           chop($functionParamList);
290             }
291 0           }
292 0           else {
293             chop($functionParamList);
294             }
295             $functionParamList .= ")";
296 0     0      
297             return $functionParamList;
298 0           }
299 0            
300             my ($class, $className, $functionName) = @_;
301             my $blocks = $class->{Blocks}->X($className, $functionName);
302             my $codeBlock = "{\n" . $blocks . "\n}";
303 0     0     return $codeBlock;
304             }
305              
306 0   0       my ($class, $className) = @_;
307             return $class->{''};
308 0           }
309 0            
310             my ($class, $className) = @_;
311 0 0         my @functionParams;
312 0            
313 0 0         for my $element ( @{ $class->{Arg}} ) {
314 0           push @functionParams, $element->X($className);
315             }
316              
317 0 0         return @functionParams;
318 0           }
319              
320             my ($class, $className) = @_;
321             return $class->{''};
322 0           }
323              
324 0           my ($class, $className, $functionName) = @_;
325             my @blocks;
326 0            
327             for my $element ( @{$class->{Block}} ) {
328             push @blocks, $element->X($className, $functionName);
329             }
330 0     0      
331 0           my $blocks = join("\n", @blocks);
332 0           return $blocks;
333 0           }
334              
335             my ($class, $className, $functionName) = @_;
336             my $block = ( $class->{IfElse}
337 0     0     || $class->{While}
338 0           || $class->{ForEach}
339             || $class->{For}
340             || $class->{EmbedBlock}
341             || $class->{Comment}
342 0     0     || $class->{Statement}
343 0           || $class->{NonSyntaxFunction} )->X($className, $functionName);
344             return $block;
345 0           }
  0            
346 0            
347             my ($class, $className, $functionName) = @_;
348             my $nonSyntax = $class->{''};
349 0            
350             my @nonSyntax = split(" ", $nonSyntax);
351             $nonSyntax = $nonSyntax[0];
352              
353 0     0     print "SyntaxError", "\n";
354 0           print "===========", "\n";
355             print "ClassName: ", $className, "\n";
356              
357             if(defined $functionName) {
358 0     0     print "FunctionName: ", $functionName, "\n";
359 0           }
360              
361 0           die "Error: $nonSyntax \n";
  0            
362 0           }
363              
364             my ($class, $className) = @_;
365 0            
366 0           my $embedBlock = $class->{EmbedCodeBlock}->X($className);
367             return $embedBlock;
368             }
369              
370 0     0     my ($class, $className) = @_;
371              
372             my $embedCode = $class->{EmbeddedCode}->X($className);
373             return $embedCode;
374             }
375              
376             my ($class, $className) = @_;
377              
378 0   0       my $embedCode = $class->{''};
379 0           return $embedCode;
380             }
381              
382             my ($class, $className) = @_;
383 0     0      
384 0           my $boolExpression = $class->{BoolExpression}->X($className);
385             my $codeBlock = $class->{CodeBlock}->X($className);
386 0            
387 0           my $while = "\n while ( " . $boolExpression . " ) " . $codeBlock;
388             return $while;
389 0           }
390 0            
391 0           my ($class, $className) = @_;
392              
393 0 0         my $forEachVariableName = $class->{ForEachVariableName}->X($className);
394 0           my $variableName = $class->{VariableName}->X($className);
395             my $codeBlock = $class->{CodeBlock}->X($className);
396              
397 0           my $forEach = "\n foreach my " . $forEachVariableName
398             . " ( \@{" . $variableName . "} ) " . $codeBlock;
399              
400             return $forEach;
401 0     0     }
402              
403 0           my ($class, $className) = @_;
404 0            
405             my $variableName = $class->{VariableName}->X($className);
406             return $variableName;
407             }
408 0     0      
409             my ($class, $className) = @_;
410 0            
411 0           my $variableName = $class->{VariableName}->X($className);
412             my @forRange = $class->{ForRange}->X($className);
413             my $codeBlock = $class->{CodeBlock}->X($className);
414              
415 0     0     my $for = "\n for my " . $variableName . " ( " . $forRange[0]
416             . " ... " . $forRange[1] . " ) " . $codeBlock;
417 0            
418 0           return $for;
419             }
420              
421             my ($class, $className) = @_;
422 0     0      
423             my $lowerRange = $class->{LowerRange}->X($className);
424 0           my $upperRange = $class->{UpperRange}->X($className);
425 0            
426             my @forRange = ($lowerRange, $upperRange);
427 0           return @forRange;
428 0           }
429              
430             my ($class, $className) = @_;
431              
432 0     0     my $number = ( $class->{Number}
433             || $class->{VariableName}
434 0           || $class->{ArrayElement}
435 0           || $class->{HashElement}
436 0           || $class->{ClassAccessor}
437             || $class->{ClassFunctionReturn}
438 0           || $class->{FunctionReturn} )->X($className);
439              
440             return $number;
441 0           }
442              
443             my ($class, $className) = @_;
444              
445 0     0     my $number = ( $class->{Number}
446             || $class->{VariableName}
447 0           || $class->{ArrayElement}
448 0           || $class->{HashElement}
449             || $class->{ClassAccessor}
450             || $class->{ClassFunctionReturn}
451             || $class->{FunctionReturn} )->X($className);
452 0     0      
453             return $number;
454 0           }
455 0            
456 0           my ($class, $className) = @_;
457             my $if = $class->{If}->X($className);
458 0            
459             my $elsif;
460             my $else;
461 0            
462             if( exists $class->{ElsIf} ) {
463             $elsif = $class->{ElsIf}->X($className);
464             }
465 0     0     if( exists $class->{Else} ) {
466             $else = $class->{Else}->X($className);
467 0           }
468 0            
469             my $ifElseIf;
470 0           if (defined $elsif) {
471 0           $ifElseIf = $if . $elsif . $else;
472             return $ifElseIf;
473             }
474             if (defined $else) {
475 0     0     $ifElseIf = $if . $else;
476             return $ifElseIf;
477             }
478              
479             $ifElseIf = $if;
480             return $ifElseIf;
481             }
482              
483 0   0       my ($class, $className) = @_;
484             my $if = $class->{If}->X($className);
485 0            
486             my $elsif;
487             my $else;
488              
489 0     0     if( exists $class->{ElsIf} ) {
490             $elsif = $class->{ElsIf}->X($className);
491             }
492             if( exists $class->{Else} ) {
493             $else = $class->{Else}->X($className);
494             }
495              
496             my $ifElseIf;
497 0   0       if (defined $elsif) {
498             $ifElseIf = $if . $elsif . $else;
499 0           return $ifElseIf;
500             }
501             if (defined $else) {
502             $ifElseIf = $if . $else;
503 0     0     return $ifElseIf;
504 0           }
505              
506 0           $ifElseIf = $if;
507             return $ifElseIf;
508             }
509 0 0          
510 0           my ($class, $className) = @_;
511              
512 0 0         my $boolExpression = $class->{BoolExpression}->X($className);
513 0           my $codeBlock = $class->{CodeBlock}->X($className);
514              
515             my $if = "\n if ( " . $boolExpression . " ) " . $codeBlock;
516 0           return $if;
517 0 0         }
518 0            
519 0           my ($class, $className) = @_;
520             my @booleanExpressions;
521 0 0          
522 0           for my $element ( @{ $class->{BooleanExpression}} ) {
523 0           push @booleanExpressions, $element->X($className);
524             }
525              
526 0           my @boolOperators;
527 0            
528             for my $element (@{ $class->{BoolOperator} }) {
529             push @boolOperators, $element->X($className);
530             }
531 0     0      
532 0           my $boolExpression = $booleanExpressions[0];
533             for my $counter (1 .. $#booleanExpressions) {
534 0           $boolExpression .= $boolOperators[$counter - 1] . " " . $booleanExpressions[$counter];
535             }
536              
537 0 0         return $boolExpression;
538 0           }
539              
540 0 0         my ($class, $className) = @_;
541 0           my $boolExpression;
542              
543             my $boolOperand = $class->{BoolOperands}->X($className);
544 0           if( exists $class->{BoolOperatorExpression} ) {
545 0 0         my @boolOperatorExpression = $class->{BoolOperatorExpression}->X($className);
546 0           $boolExpression = $boolOperand . " "
547 0           . $boolOperatorExpression[0] . " " . $boolOperatorExpression[1];
548             return $boolExpression;
549 0 0         }
550 0            
551 0           $boolExpression = $boolOperand;
552             return $boolExpression;
553             }
554 0            
555 0           my ($class, $className) = @_;
556              
557             my $boolOperator = $class->{BoolOperator}->X($className);
558             my $boolOperand = $class->{BoolOperands}->X($className);
559 0     0      
560             my @boolOperatorExpression = ($boolOperator, $boolOperand);
561 0           return @boolOperatorExpression;
562 0           }
563              
564 0           my ($class, $className) = @_;
565 0           return ( $class->{GreaterThan}
566             || $class->{LessThan}
567             || $class->{Equals}
568             || $class->{GreaterThanEquals}
569 0     0     || $class->{LessThanEquals}
570 0           || $class->{StringEquals}
571             || $class->{StringNotEquals}
572 0           || $class->{NotEqulas}
  0            
573 0           || $class->{LogicalAnd}
574             || $class->{LogicalOr}
575             || $class->{EmbedBlock} )->X($className);
576 0           }
577              
578 0           my ($class, $className) = @_;
  0            
579 0           return ( $class->{RealNumber}
580             || $class->{String}
581             || $class->{ScalarVariable}
582 0           || $class->{ArrayElement}
583 0           || $class->{HashElement}
584 0           || $class->{ClassAccessor}
585             || $class->{ClassFunctionReturn}
586             || $class->{FunctionReturn}
587 0           || $class->{EmbedBlock} )->X($className);
588             }
589              
590             my ($class, $className) = @_;
591 0     0     my @elsIfChain;
592 0            
593             for my $element ( @{$class->{ElsIfChain}} ) {
594 0           push @elsIfChain, $element->X($className);
595 0 0         }
596 0            
597 0           my $elsIfChain;
598             foreach my $elsIf (@elsIfChain) {
599 0           $elsIfChain .= $elsIf;
600             }
601              
602 0           return $elsIfChain;
603 0           }
604              
605             my ($class, $className) = @_;
606             my $boolExpression = $class->{BoolExpression}->X($className);
607 0     0     my $codeBlock = $class->{CodeBlock}->X($className);
608              
609 0           my $elsIf = "\n elsif ( " . $boolExpression . " ) " . $codeBlock;
610 0           return $elsIf;
611             }
612 0            
613 0           my ($class, $className) = @_;
614             my $codeBlock = $class->{CodeBlock}->X($className);
615              
616             my $else = "\n else " . $codeBlock;
617 0     0     return $else;
618             }
619              
620             my ($class, $className) = @_;
621             return ( $class->{VariableDeclaration}
622             || $class->{FunctionCall}
623             || $class->{Assignment}
624             || $class->{ClassFunctionCall}
625             || $class->{Return}
626             || $class->{Last}
627             || $class->{Next}
628 0   0       || $class->{ObjectCall} )->X($className);
629             }
630              
631             my ($class, $className) = @_;
632 0     0     my $objectCall = "";
633              
634             $objectCall .= $class->{ObjectFunctionCall}->X($className);
635             $objectCall .= ";\n";
636              
637             return $objectCall;
638             }
639              
640             my ($class, $className) = @_;
641 0   0       return ( $class->{ScalarDeclaration}
642             || $class->{ArrayDeclaration}
643             || $class->{HashDeclaration} )->X($className);
644             }
645 0     0      
646 0           my ($class, $className) = @_;
647             my $variableName = $class->{VariableName}->X($className);
648 0           my $value = $class->{Value}->X($className);
  0            
649 0            
650             my $scalarDeclaration = "\n my " . $variableName
651             . " = " . $value . ";\n";
652 0           return $scalarDeclaration;
653 0           }
654 0            
655             my ($class, $className) = @_;
656             my $variableName = $class->{''};
657 0           return "\$" . $variableName;
658             }
659              
660             my ($class, $className) = @_;
661 0     0     my $rhs = $class->{RHS}->X($className);
662 0           return $rhs;
663 0           }
664              
665 0           my ($class, $className) = @_;
666 0           my $number = $class->{''};
667             return $number;
668             }
669              
670 0     0     my ($class, $className) = @_;
671 0           my $realNumber = $class->{''};
672             return $realNumber;
673 0           }
674 0            
675             my ($class, $className) = @_;
676             my $stringValue = $class->{StringValue}->X($className);
677              
678 0     0     my $string = "\"" . $stringValue . "\"";
679             }
680              
681             my ($class, $className) = @_;
682             my $stringValue = $class->{''};
683             return $stringValue;
684             }
685              
686 0   0       my ($class, $className) = @_;
687             my $variableName = $class->{VariableName}->X($className);
688             my $arrayList = $class->{ArrayList}->X($className);
689              
690 0     0     my $arrayDeclaration = "\n my " . $variableName
691 0           . " = " . $arrayList . ";\n";
692              
693 0           return $arrayDeclaration;
694 0           }
695              
696 0           my ($class, $className) = @_;
697             my $arrayList = "[";
698             my @listElements = $class->{ListElements}->X($className);
699              
700 0     0     $arrayList .= join(",", @listElements);
701              
702             $arrayList .= "]";
703 0   0       return $arrayList;
704             }
705              
706             my ($class, $className) = @_;
707 0     0     my @listElements;
708 0            
709 0           for my $element ( @{ $class->{ListElement}} ) {
710             push @listElements, $element->X($className);
711 0           }
712              
713 0           return @listElements;
714             }
715              
716             my ($class, $className) = @_;
717 0     0     return ( $class->{RealNumber}
718 0           || $class->{String}
719 0           || $class->{ArrayList}
720             || $class->{HashRef}
721             || $class->{ClassFunctionReturn}
722             || $class->{FunctionReturn}
723 0     0     || $class->{ArrayElement}
724 0           || $class->{HashElement}
725 0           || $class->{VariableName}
726             || $class->{EmbedBlock} )->X($className);
727             }
728              
729 0     0     my ($class, $className) = @_;
730 0           my $variableName = $class->{VariableName}->X($className);
731 0           my $hashRef = $class->{HashRef}->X($className);
732              
733             my $hashDeclaration = "\n my " . $variableName
734             . " = " . $hashRef . ";\n";
735 0     0     }
736 0            
737 0           my ($class, $className) = @_;
738             my $hashRef = "{";
739             my $keyValuePairs = $class->{KeyValuePairs}->X($className);
740             $hashRef .= $keyValuePairs . "}";
741 0     0     return $hashRef;
742 0           }
743              
744 0           my ($class, $className) = @_;
745             my @keyValuePairs;
746              
747             my $keyValuePairs = "";
748 0     0     for my $element ( @{ $class->{KeyValue}} ) {
749 0           @keyValuePairs = ();
750 0           push @keyValuePairs, $element->X($className);
751             $keyValuePairs .= $keyValuePairs[0] . " => " . $keyValuePairs[1] . ", ";
752             }
753              
754 0     0     return $keyValuePairs;
755 0           }
756 0            
757             my ($class, $className) = @_;
758 0           my $pairKey = $class->{PairKey}->X($className);
759             my $pairValue = $class->{PairValue}->X($className);
760              
761 0           my @keyValue = ($pairKey, $pairValue);
762             return @keyValue;
763             }
764              
765 0     0     my ($class, $className) = @_;
766 0           return ( $class->{Number}
767 0           || $class->{String}
768             || $class->{ClassFunctionReturn}
769 0           || $class->{FunctionReturn}
770             || $class->{VariableName}
771 0           || $class->{EmbedBlock} )->X($className);
772 0           }
773              
774             my ($class, $className) = @_;
775             return ( $class->{RealNumber}
776 0     0     || $class->{String}
777 0           || $class->{ArrayList}
778             || $class->{HashRef}
779 0           || $class->{VariableName}
  0            
780 0           || $class->{ArrayElement}
781             || $class->{HashElement}
782             || $class->{ClassFunctionReturn}
783 0           || $class->{FunctionReturn}
784             || $class->{EmbedBlock} )->X($className);
785             }
786              
787 0     0     my ($class, $className) = @_;
788             my $functionName = $class->{FunctionName}->X($className);
789              
790             my $functionCall = $functionName . "(" ;
791              
792             if(exists $class->{Parameters}) {
793             my @parameters = @{$class->{Parameters}->X($className)};
794             $functionCall .= join(",", @parameters);
795             }
796              
797 0   0       $functionCall .= ");";
798             return $functionCall;
799             }
800              
801 0     0     my ($class, $className) = @_;
802 0           my @parameters;
803 0            
804             for my $element (@{ $class->{Param} }) {
805 0           push @parameters, $element->X($className);
806             }
807              
808             return \@parameters;
809             }
810 0     0      
811 0           my ($class, $className) = @_;
812 0           return ( $class->{RealNumber}
813 0           || $class->{String}
814 0           || $class->{VariableName}
815             || $class->{ArrayElement}
816             || $class->{HashElement}
817             || $class->{HashRef}
818 0     0     || $class->{FunctionReturn}
819 0           || $class->{ClassFunctionReturn}
820             || $class->{EmbedBlock} )->X($className);
821 0           }
822 0            
  0            
823 0           my ($class, $className) = @_;
824 0           return ( $class->{ScalarAssignment}
825 0           || $class->{ArrayAssignment}
826             || $class->{HashAssignment}
827             || $class->{AccessorAssignment} )->X($className);
828 0           }
829              
830             my ($class, $className) = @_;
831              
832 0     0     my $variableName = $class->{HashKeyStringValue}->X($className);
833 0           my $rhs = $class->{RHS}->X($className);
834 0            
835             my $accessorAssignment = '$class->{"' . $className . '"}->{"'. $variableName .'"} = ' . $rhs .';';
836 0           return $accessorAssignment;
837 0           }
838              
839             my ($class, $className) = @_;
840             my $lhs = $class->{ScalarVariable}->X($className);
841 0     0     my $rhs = $class->{RHS}->X($className);
842              
843             my $scalarAssignment = $lhs . " = " . $rhs . ";\n";
844             return $scalarAssignment;
845             }
846              
847 0   0       my ($class, $className) = @_;
848             my $scalarVariable = $class->{ScalarVariable}->X($className);
849              
850             return $scalarVariable;
851 0     0     }
852              
853             my ($class, $className) = @_;
854              
855             my $scalarVariable = "\$";
856             $scalarVariable .= $class->{''};
857              
858             return $scalarVariable;
859             }
860              
861 0   0       my ($class, $className) = @_;
862             return ( $class->{RealNumber}
863             || $class->{FunctionReturn}
864             || $class->{ArrayElement}
865 0     0     || $class->{HashElement}
866 0           || $class->{ScalarVariable}
867             || $class->{Calc}
868 0           || $class->{ArrayList}
869             || $class->{HashRef}
870 0 0         || $class->{ClassAccessor}
871 0           || $class->{ClassFunctionReturn}
  0            
872 0           || $class->{String}
873             || $class->{STDIN}
874             || $class->{ObjectFunctionCall}
875 0           || $class->{EmbedBlock} )->X($className);
876 0           }
877              
878             my ($class, $className) = @_;
879             my $stdin = '<STDIN>';
880 0     0     return $stdin;
881 0           }
882              
883 0           my ($class, $className) = @_;
  0            
884 0            
885             my $object = $class->{Object}->X($className);
886             my $functionName = $class->{FunctionName}->X($className);
887 0            
888             my $objectFunctionCall;
889             if(exists $class->{Parameters}) {
890             my @parameters = @{$class->{Parameters}->X($className)};
891 0     0     my $parameters = join(",", @parameters);
892             $objectFunctionCall = "\$" . $object . "->" . $functionName . "(" . $parameters . ")";
893             } else {
894             $objectFunctionCall = "\$" . $object . "->" . $functionName . "()";
895             }
896              
897             return $objectFunctionCall;
898             }
899              
900 0   0       my ($class, $className) = @_;
901             my $variableName = $class->{HashKeyStringValue}->X($className);
902              
903             my $classAccessor = '$class->{"' . $className . '"}->{"'. $variableName .'"}';
904 0     0     return $classAccessor;
905             }
906              
907             my ($class, $className) = @_;
908 0   0       my $functionName = $class->{FunctionName}->X($className);
909             my @parameters;
910             my $parameters = "";
911             if(exists $class->{Parameters}) {
912 0     0     @parameters = @{$class->{Parameters}->X($className)};
913             $parameters = join(",", @parameters);
914 0           }
915 0            
916             my $classFunctionReturn = '$class->' . $functionName . '('. $parameters .');';
917 0           return $classFunctionReturn;
918 0           }
919              
920             my ($class, $className) = @_;
921             my $functionName = $class->{FunctionName}->X($className);
922 0     0     my @parameters;
923 0           my $parameters = "";
924 0            
925             if(exists $class->{Parameters}) {
926 0           @parameters = @{$class->{Parameters}->X($className)};
927 0           $parameters = join(",", @parameters);
928             }
929              
930             my $classFunctionReturn = '$class->' . $functionName . '('. $parameters .')';
931 0     0     return $classFunctionReturn;
932 0           }
933              
934 0           my ($class, $className) = @_;
935             my $functionName = $class->{FunctionName}->X($className);
936              
937             my $functionReturn = $functionName . "(" ;
938 0     0      
939             if(exists $class->{Parameters}) {
940 0           my @parameters = @{$class->{Parameters}->X($className)};
941 0           my $parameters = join(",", @parameters);
942             $functionReturn .= $parameters;
943 0           }
944              
945             $functionReturn .= ")";
946             return $functionReturn;
947 0     0     }
948              
949             my ($class, $className) = @_;
950             my $arrayName = $class->{ArrayName}->X($className);
951             my @accessList;
952              
953             for my $element (@{ $class->{ArrayAccess} }) {
954             push @accessList, $element->X($className);
955             }
956              
957             my $arrayElement = "\$" . $arrayName;
958             foreach my $element (@accessList) {
959             $arrayElement .= "->[" . $element . "]";
960             }
961 0   0        
962             return $arrayElement;
963             }
964              
965 0     0     my ($class, $className) = @_;
966 0           my $number = $class->{ArrayKey}->X($className);
967 0           return $number;
968             }
969              
970             my ($class, $className) = @_;
971 0     0     return ( $class->{Number}
972             || $class->{ScalarVariable}
973 0           || $class->{ArrayElement}
974 0           || $class->{HashElement}
975             || $class->{FunctionReturn}
976 0           || $class->{ClassFunctionReturn} )->X($className);
977 0 0         }
978 0            
  0            
979 0           my ($class, $className) = @_;
980 0           my $arrayName = $class->{''};
981             return $arrayName;
982 0           }
983              
984             my ($class, $className) = @_;
985 0           my $hashName = $class->{HashName}->X($className);
986             my @accessList;
987              
988             for my $element (@{ $class->{HashAccess} }) {
989 0     0     push @accessList, $element->X($className);
990 0           }
991              
992 0           my $hashElement = "\$" . $hashName;
993 0           foreach my $element (@accessList) {
994             $hashElement .= "->{" . $element . "}";
995             }
996              
997 0     0     return $hashElement;
998 0           }
999 0            
1000 0           my ($class, $className) = @_;
1001 0 0         my $hashKey = $class->{HashKey}->X($className);
1002 0           return $hashKey;
  0            
1003 0           }
1004              
1005             my ($class, $className) = @_;
1006 0           my $hashName = $class->{''};
1007 0           return $hashName;
1008             }
1009              
1010             my ($class, $className) = @_;
1011 0     0     return ( $class->{String}
1012 0           || $class->{Number}
1013 0           || $class->{ScalarVariable}
1014 0           || $class->{ArrayElement}
1015             || $class->{HashElement}
1016 0 0         || $class->{FunctionReturn}
1017 0           || $class->{ClassFunctionReturn} )->X($className);
  0            
1018 0           }
1019              
1020             my ($class, $className) = @_;
1021 0            
1022 0           my $hashKeyStringValue = "\"";
1023             $hashKeyStringValue .= $class->{HashKeyStringValue}->X($className);
1024             $hashKeyStringValue .= "\"";
1025              
1026 0     0     return $hashKeyStringValue;
1027 0           }
1028              
1029 0           my ($class, $className) = @_;
1030             my $hashKeyStringValue = $class->{''};
1031 0 0         return $hashKeyStringValue;
1032 0           }
  0            
1033 0            
1034 0           my ($class, $className) = @_;
1035             my $hashKeyNumber = $class->{''};
1036             return $hashKeyNumber;
1037 0           }
1038 0            
1039             my ($class, $className) = @_;
1040             my $arrayElement = $class->{ArrayElement}->X($className);
1041             my $rhs = $class->{RHS}->X($className);
1042 0     0      
1043 0           my $arrayAssignment = $arrayElement . " = " . $rhs . ";\n";
1044 0           return $arrayAssignment;
1045             }
1046 0            
  0            
1047 0           my ($class, $className) = @_;
1048             my $hashElement = $class->{HashElement}->X($className);
1049             my $rhs = $class->{RHS}->X($className);
1050 0            
1051 0           my $hashAssignment = $hashElement . " = " . $rhs . ";\n";
1052 0           return $hashAssignment;
1053             }
1054              
1055 0           my ($class, $className) = @_;
1056             my $calcExpression = $class->{CalcExpression}->X($className);
1057             return $calcExpression;
1058             }
1059 0     0      
1060 0           my ($class, $className) = @_;
1061 0           my @calcOperands;
1062             my @calcOperator;
1063              
1064             for my $element (@{ $class->{CalcOperands} }) {
1065 0     0     push @calcOperands, $element->X($className);
1066             }
1067              
1068             for my $element (@{ $class->{CalcOperator} }) {
1069             push @calcOperator, $element->X($className);
1070             }
1071 0   0        
1072             my $calcExpression = $calcOperands[0];
1073             for my $counter (1 .. $#calcOperands) {
1074             $calcExpression .= $calcOperator[$counter - 1] . " " . $calcOperands[$counter];
1075 0     0     }
1076 0            
1077 0           return $calcExpression;
1078             }
1079              
1080             my ($class, $className) = @_;
1081 0     0     return ( $class->{RealNumber}
1082 0           || $class->{ScalarVariable}
1083 0           || $class->{ArrayElement}
1084             || $class->{HashElement}
1085 0           || $class->{ClassAccessor}
  0            
1086 0           || $class->{ClassFunctionReturn}
1087             || $class->{FunctionReturn}
1088             || $class->{EmbedBlock}
1089 0           || $class->{ObjectFunctionCall} )->X($className);
1090 0           }
1091 0            
1092             my ($class, $className) = @_;
1093             return ( $class->{Plus}
1094 0           || $class->{Minus}
1095             || $class->{Multiply}
1096             || $class->{Divide}
1097             || $class->{EmbedBlock} )->X($className);
1098 0     0     }
1099 0            
1100 0           my ($class, $className) = @_;
1101             if(exists $class->{RHS}) {
1102             my $rhs = $class->{RHS}->X($className);
1103             my $return = "return " . $rhs . ";\n";
1104 0     0     return $return;
1105 0           } else {
1106 0           return "return;";
1107             }
1108             }
1109              
1110 0     0     my ($class, $className) = @_;
1111             return "last;";
1112             }
1113              
1114             my ($class, $className) = @_;
1115             return "next;";
1116             }
1117 0   0        
1118             my ($class, $className) = @_;
1119             my $greaterThan = $class->{''};
1120             return $greaterThan;
1121 0     0     }
1122              
1123 0           my ($class, $className) = @_;
1124 0           my $lessThan = $class->{''};
1125 0           return $lessThan;
1126             }
1127 0            
1128             my ($class, $className) = @_;
1129             my $equals = $class->{''};
1130             return $equals;
1131 0     0     }
1132 0            
1133 0           my ($class, $className) = @_;
1134             my $plus = $class->{''};
1135             return $plus;
1136             }
1137 0     0      
1138 0           my ($class, $className) = @_;
1139 0           my $minus = $class->{''};
1140             return $minus;
1141             }
1142              
1143 0     0     my ($class, $className) = @_;
1144 0           my $multiply = $class->{''};
1145 0           return $multiply;
1146             }
1147 0            
1148 0           my ($class, $className) = @_;
1149             my $divide = $class->{''};
1150             return $divide;
1151             }
1152 0     0      
1153 0           my ($class, $className) = @_;
1154 0           my $divide = $class->{''};
1155             return $divide;
1156 0           }
1157 0            
1158             my ($class, $className) = @_;
1159             my $divide = $class->{''};
1160             return $divide;
1161 0     0     }
1162 0            
1163 0           my ($class, $className) = @_;
1164             my $greaterThanEquals = $class->{''};
1165             return $greaterThanEquals;
1166             }
1167 0     0      
1168 0           my ($class, $className) = @_;
1169             my $lessThanEquals = $class->{''};
1170             return $lessThanEquals;
1171 0           }
  0            
1172 0            
1173             my ($class, $className) = @_;
1174             my $stringEquals = $class->{''};
1175 0           return $stringEquals;
  0            
1176 0           }
1177              
1178             my ($class, $className) = @_;
1179 0           my $stringNotEquals = $class->{''};
1180 0           return $stringNotEquals;
1181 0           }
1182              
1183             my ($class, $className) = @_;
1184 0           my $notEqulas = $class->{''};
1185             return $notEqulas;
1186             }
1187              
1188 0     0     my ($class, $className) = @_;
1189             my $logicalAnd = $class->{''};
1190             return $logicalAnd;
1191             }
1192              
1193             my ($class, $className) = @_;
1194             my $logicalOr = $class->{''};
1195             return $logicalOr;
1196             }
1197 0   0        
1198             my $parser = qr {
1199             <nocontext:>
1200             # <debug: on>
1201 0     0      
1202             <Lang>
1203             <objrule: PT::Lang> <[Class]>+
1204              
1205             <objrule: PT::Class> <TokenClass> <ClassName> <ClassBlock>
1206 0   0       <objrule: PT::ClassName> [a-zA-Z]+?
1207             <objrule: PT::ClassBlock> <LBrace> <ClassGroups> <RBrace>
1208             <objrule: PT::ClassGroups> <[Group]>+
1209              
1210 0     0     <objrule: PT::Group> <ws: (\s++)*> <Comment> | <Parent> | <Packages> | <EmbedBlock> | <Function> | <NonSyntaxClass>
1211 0 0          
1212 0           <objtoken: PT::NonSyntaxClass> \b.*\b
1213 0            
1214 0           <objrule: PT::Comment> [#] <LineComment> @
1215             <objtoken: PT::LineComment> .*?
1216 0            
1217             <objrule: PT::Parent> <TokenParent> <LParen> <ClassNames> <RParen> <SemiColon>
1218             <objrule: PT::ClassNames> <[ClassName]>+ % <Comma>
1219              
1220             <objrule: PT::Packages> <LParen> <PackageList> <RParen> <SemiColon>
1221 0     0     <objrule: PT::PackageList> <[Package]>+ % <Comma>
1222 0           <objrule: PT::Package> <PackageWithConstructor> | <PackageWithoutConstructor>
1223             <objrule: PT::PackageWithConstructor> [!] <Object> <Equal> <PackageName> <Dot> <Constructor> <LParen> <ObjectParameters>? <RParen>
1224             <objrule: PT::ObjectParameters> <PackageParams> | <Parameters>
1225             <objrule: PT::PackageParams> <[KeyValue]>+ % <Comma>
1226 0     0     <objrule: PT::PackageName> <[PackageDir]>+ % (::)
1227 0           <objrule: PT::PackageWithoutConstructor> <PackageName> <QW>?
1228             <objrule: PT::QW> <Dot> <LParen> <FunctionList> <RParen>
1229             <objrule: PT::FunctionList> <[FunctionName]>+ % <Comma>
1230             <objrule: PT::Constructor> [a-zA-Z]+?
1231 0     0     <objrule: PT::Object> [a-zA-Z]+?
1232 0           <objrule: PT::PackageDir> [a-zA-Z]+?
1233 0            
1234             <objrule: PT::Function> <TokenFunction> <FunctionName> <LParen> <FunctionParamList> <RParen> <CodeBlock>
1235             <objtoken: PT::FunctionName> [a-zA-Z_]+?
1236              
1237 0     0     <objrule: PT::FunctionParamList> <EmptyParamList> | <FunctionParams>
1238 0           <objtoken: PT::EmptyParamList> .{0}
1239 0           <objrule: PT::FunctionParams> <[Arg]>+ % <Comma>
1240             <objrule: PT::Arg> [a-zA-Z]+?
1241              
1242             <objrule: PT::CodeBlock> <LBrace> <Blocks> <RBrace>
1243 0     0     <objrule: PT::Blocks> <[Block]>+
1244 0            
1245 0           <objrule: PT::Block> <IfElse> | <While> | <ForEach> | <For> | <EmbedBlock> | <Comment> | <Statement> | <NonSyntaxFunction>
1246              
1247             <objtoken: PT::NonSyntaxFunction> \b.*\b
1248              
1249 0     0     <objrule: PT::EmbedBlock> <TokenEmbedBlock> <EmbedCodeBlock>
1250 0           <objrule: PT::EmbedCodeBlock> <EmbedBegin> <EmbeddedCode> <EmbedEnd>
1251 0           <objrule: PT::EmbedBegin> <LParen>\?
1252             <objrule: PT::EmbedEnd> \?<RParen>
1253             <objrule: PT::EmbeddedCode> (?<=\(\?)\s*.*?\s*(?=\?\))
1254              
1255 0     0     <objrule: PT::While> <TokenWhile> <LParen> <BoolExpression> <RParen> <CodeBlock>
1256 0           <objrule: PT::ForEach> <TokenForeach> <Var> <ForEachVariableName> <LParen> <VariableName> <RParen> <CodeBlock>
1257 0           <objrule: PT::ForEachVariableName> <VariableName>
1258              
1259             <objrule: PT::For> <TokenFor> <Var> <VariableName> <LParen> <ForRange> <RParen> <CodeBlock>
1260             <objrule: PT::ForRange> <LowerRange> <Dot><Dot><Dot> <UpperRange>
1261 0     0      
1262 0           <objrule: PT::LowerRange> <Number> | <VariableName> | <ArrayElement> | <HashElement>
1263 0           | <ClassAccessor> | <ClassFunctionReturn> | <FunctionReturn>
1264              
1265             <objrule: PT::UpperRange> <Number> | <VariableName> | <ArrayElement> | <HashElement>
1266             | <ClassAccessor> | <ClassFunctionReturn> | <FunctionReturn>
1267 0     0      
1268 0           <objrule: PT::IfElse> <If> <ElsIf>? <Else>?
1269 0           <objrule: PT::If> <TokenIf> <LParen> <BoolExpression> <RParen> <CodeBlock>
1270              
1271             <objrule: PT::BoolExpression> <[BooleanExpression]>+ % <[BoolOperator]>
1272             <objrule: PT::BooleanExpression> <BoolOperands> <BoolOperatorExpression>?
1273 0     0     <objrule: PT::BoolOperatorExpression> <BoolOperator> <BoolOperands>
1274 0            
1275 0           <objrule: PT::BoolOperands> <RealNumber> | <String> | <ScalarVariable> | <ArrayElement> | <HashElement>
1276             | <ClassAccessor> | <ClassFunctionReturn> | <FunctionReturn> | <EmbedBlock>
1277              
1278             <objrule: PT::BoolOperator> <GreaterThan> | <LessThan> | <Equals> | <GreaterThanEquals> | <LessThanEquals>
1279 0     0     | <StringEquals> | <StringNotEquals> | <NotEqulas> | <LogicalAnd> | <LogicalOr>
1280 0           | <EmbedBlock>
1281 0            
1282             <objrule: PT::ElsIf> <[ElsIfChain]>+
1283             <objrule: PT::ElsIfChain> <TokenElsIf> <LParen> <BoolExpression> <RParen> <CodeBlock>
1284             <objrule: PT::Else> <TokenElse> <CodeBlock>
1285 0     0      
1286 0           <objrule: PT::Statement> <VariableDeclaration> | <FunctionCall> | <ClassFunctionCall>
1287 0           | <ObjectCall> | <Assignment> | <Return> | <Last> | <Next>
1288             <objrule: PT::ClassFunctionCall> <TokenClass> <Dot> <FunctionName> <LParen> <Parameters>? <RParen> <SemiColon>
1289              
1290             <objrule: PT::ObjectCall> <ObjectFunctionCall> <SemiColon>
1291 0     0     <objrule: PT::VariableDeclaration> <ArrayDeclaration> | <HashDeclaration> | <ScalarDeclaration>
1292 0           <objrule: PT::ScalarDeclaration> <Var> <VariableName> <Equal> <Value> <SemiColon>
1293 0            
1294             <objtoken: PT::Var> var
1295             <objtoken: PT::VariableName> [a-zA-Z_]+?
1296             <objrule: PT::Value> <RHS>
1297 0     0     <objtoken: PT::Number> [0-9]+
1298 0           <objtoken: PT::RealNumber> [-]?[0-9]+\.?[0-9]+|[0-9]+
1299 0           <objrule: PT::String> <LQuote> <StringValue> <RQuote>
1300             <objrule: PT::LQuote> <Quote>
1301             <objrule: PT::RQuote> <Quote>
1302             <objtoken: PT::StringValue> (?<=")\s*.*?\s*(?=")
1303 0     0      
1304 0           <objrule: PT::ArrayDeclaration> <Var> <VariableName> <Equal> <ArrayList> <SemiColon>
1305 0           <objrule: PT::ArrayList> <LBracket> <ListElements> <RBracket>
1306             <objrule: PT::ListElements> .{0} | <[ListElement]>+ % <Comma>
1307              
1308             <objrule: PT::ListElement> <RealNumber> | <String> | <ClassFunctionReturn> | <FunctionReturn>
1309 0     0     | <ArrayElement> | <HashElement> | <ArrayList> | <HashRef>
1310 0           | <VariableName> | <EmbedBlock>
1311 0            
1312             <objrule: PT::HashDeclaration> <Var> <VariableName> <Equal> <HashRef> <SemiColon>
1313             <objrule: PT::HashRef> <LBrace> <KeyValuePairs> <RBrace>
1314             <objrule: PT::KeyValuePairs> .{0} | <[KeyValue]>+ % <Comma>
1315 0     0     <objrule: PT::KeyValue> <PairKey> <Colon> <PairValue>
1316 0            
1317 0           <objrule: PT::PairKey> <Number> | <String> | <ClassFunctionReturn> | <FunctionReturn>
1318             | <VariableName> | <EmbedBlock>
1319              
1320             <objrule: PT::PairValue> <RealNumber> | <String> | <ClassFunctionReturn> | <FunctionReturn>
1321 0     0     | <ArrayElement> | <HashElement> | <ArrayList> | <HashRef>
1322 0           | <VariableName> | <EmbedBlock>
1323 0            
1324             <objrule: PT::FunctionCall> <FunctionName> <LParen> <Parameters>? <RParen> <SemiColon>
1325             <objrule: PT::Parameters> <[Param]>+ % <Comma>
1326             <objrule: PT::Param> <RealNumber> | <String> | <VariableName> | <ArrayElement> | <HashElement>
1327             | <HashRef> | <FunctionReturn> | <ClassFunctionReturn> | <EmbedBlock>
1328              
1329             <objrule: PT::Assignment> <ScalarAssignment> | <ArrayAssignment> | <HashAssignment> | <AccessorAssignment>
1330              
1331             <objrule: PT::ScalarAssignment> <ScalarVariable> <Equal> <RHS> <SemiColon>
1332             <objtoken: PT::ScalarVariable> [a-zA-Z]+
1333              
1334             <objrule: PT::RHS> <RealNumber> | <FunctionReturn> | <ArrayElement> | <HashElement>
1335             | <ScalarVariable> | <Calc> | <ArrayList> | <HashRef> | <ClassAccessor>
1336             | <ClassFunctionReturn> | <String> | <STDIN> | <ObjectFunctionCall>
1337             | <EmbedBlock>
1338              
1339             <objrule: PT::FunctionReturn> <FunctionName> <LParen> <Parameters>? <RParen>
1340              
1341             <objrule: PT::ArrayElement> <ArrayName> <[ArrayAccess]>+
1342             <objrule: PT::ArrayAccess> <LBracket> <ArrayKey> <RBracket>
1343             <objrule: PT::ArrayKey> <Number> | <ScalarVariable> | <ArrayElement>
1344             | <HashElement> | <FunctionReturn> | <ClassFunctionReturn>
1345             <objrule: PT::ArrayName> [a-zA-Z]+?
1346              
1347             <objrule: PT::HashElement> <HashName> <[HashAccess]>+
1348             <objrule: PT::HashAccess> <LBrace> <HashKey> <RBrace>
1349             <objtoken: PT::HashName> [a-zA-Z]+?
1350             <objrule: PT::HashKey> <String> | <Number> | <ScalarVariable> | <ArrayElement>
1351             | <HashElement> | <FunctionReturn> | <ClassFunctionReturn>
1352              
1353             <objrule: PT::STDIN> <LessThan> <TokenSTDIN> <GreaterThan>
1354              
1355             <objtoken: PT::HashKeyStringValue> [a-zA-Z]+?
1356             <objrule: PT::AccessorAssignment> <TokenClass> <Dot> <HashKeyStringValue> <Equal> <RHS> <SemiColon>
1357             <objrule: PT::ClassAccessor> <TokenClass> <Dot> <HashKeyStringValue>
1358             <objrule: PT::ClassFunctionReturn> <TokenClass> <Dot> <FunctionName> <LParen> <Parameters>? <RParen>
1359              
1360             <objrule: PT::ArrayAssignment> <ArrayElement> <Equal> <RHS> <SemiColon>
1361             <objrule: PT::HashAssignment> <HashElement> <Equal> <RHS> <SemiColon>
1362              
1363             <objrule: PT::Calc> <CalcExpression>
1364             <objrule: PT::CalcExpression> <[CalcOperands]>+ % <[CalcOperator]>
1365             <objrule: PT::CalcOperands> <RealNumber> | <ScalarVariable> | <ArrayElement> | <HashElement> | <ClassAccessor>
1366             | <ClassFunctionReturn> | <FunctionReturn> | <EmbedBlock> | <ObjectFunctionCall>
1367              
1368             <objtoken: PT::CalcOperator> <Plus> | <Minus> | <Multiply> | <Divide> | <Modulus> | <Exponent> | <EmbedBlock>
1369              
1370             <objrule: PT::Return> <TokenReturn> <RHS>? <SemiColon>
1371             <objrule: PT::Last> <TokenLast> <SemiColon>
1372             <objrule: PT::Next> <TokenNext> <SemiColon>
1373              
1374             <objtoken: PT::TokenReturn> return
1375             <objtoken: PT::TokenNext> next
1376             <objtoken: PT::TokenLast> last
1377             <objtoken: PT::TokenElse> else
1378             <objtoken: PT::TokenElsIf> elsif
1379             <objtoken: PT::TokenIf> if
1380             <objtoken: PT::TokenFor> for
1381             <objtoken: PT::TokenForeach> foreach
1382             <objtoken: PT::TokenWhile> while
1383             <objtoken: PT::TokenFunction> function
1384             <objtoken: PT::TokenParent> parent
1385             <objtoken: PT::TokenClass> class
1386             <objtoken: PT::TokenEmbedBlock> embed
1387              
1388             <objtoken: PT::TokenSTDIN> STDIN
1389              
1390             <objrule: PT::ObjectFunctionCall> [!] <Object> <Dot> <FunctionName> <LParen> <Parameters>? <RParen>
1391              
1392             <objtoken: PT::Modulus> \%
1393             <objtoken: PT::Exponent> \*\*
1394             <objtoken: PT::LogicalAnd> \&\&
1395             <objtoken: PT::LogicalOr> \|\|
1396             <objtoken: PT::NotEqulas> \!=
1397             <objtoken: PT::StringNotEquals> ne
1398             <objtoken: PT::StringEquals> eq
1399             <objtoken: PT::LessThanEquals> \<=
1400             <objtoken: PT::GreaterThanEquals> \>=
1401             <objtoken: PT::GreaterThan> \>
1402             <objtoken: PT::LessThan> \<
1403             <objtoken: PT::Equals> ==
1404             <objtoken: PT::Plus> \+
1405             <objtoken: PT::Minus> \-
1406             <objtoken: PT::Multiply> \*
1407             <objtoken: PT::Divide> \/
1408             <objtoken: PT::Quote> "
1409             <objtoken: PT::SemiColon> ;
1410             <objtoken: PT::Colon> :
1411             <objtoken: PT::Dot> \.
1412             <objtoken: PT::Equal> =
1413             <objtoken: PT::Comma> ,
1414             <objtoken: PT::LParen> \(
1415             <objtoken: PT::RParen> \)
1416             <objtoken: PT::LBrace> \{
1417             <objtoken: PT::RBrace> \}
1418             <objtoken: PT::LBracket> \[
1419             <objtoken: PT::RBracket> \]
1420             }xms;
1421              
1422             my ($class, $program) = @_;
1423             if($program =~ $parser) {
1424             my $code = $/{Lang}->X();
1425             return $code;
1426             } else {
1427             my $notMatch = "print 'Error';";
1428             return $notMatch;
1429             }
1430             }
1431              
1432             1;
1433              
1434              
1435             =head1 NAME
1436              
1437             Lang::HL HL programming language.
1438              
1439             =head1 SYNOPSIS
1440              
1441             $> hlc <directoryName>
1442             $> hlp <directoryName>
1443              
1444             =head1 DESCRIPTION
1445              
1446             HL is a programming language.
1447              
1448             =head1 EXAMPLE
1449              
1450             class Main {
1451             (JSON,
1452             !mechanize = WWW::Mechanize.new());
1453              
1454             function main() {
1455             class.counter = 0;
1456              
1457             var hash = class.returnNumber();
1458             var json = encode_json(hash);
1459             print(json, "\n");
1460              
1461             var url = "https://metacpan.org/pod/WWW::Mechanize";
1462             !mechanize.get(url);
1463             var page = !mechanize.text();
1464             print(page, "\n");
1465             }
1466              
1467             function returnNumber() {
1468             var number = {};
1469              
1470             if(class.counter < 10) {
1471             class.counter = class.counter + 1;
1472              
1473             number = { "number" : class.returnNumber() };
1474             return number;
1475             }
1476              
1477             return class.counter;
1478             }
1479             }
1480              
1481             =head1 AUTHOR
1482              
1483             Rajkumar Reddy
1484              
1485             =head1 COPYRIGHT AND LICENSE
1486              
1487             Copyright (C) 2022 by Rajkumar Reddy. All rights reserved.
1488              
1489              
1490             =cut