pascalabcnet/Parsers/OldPythonParser/python_gppg_yacc.cs
AlexanderZemlyak d5e9994ff2
Revert pascal language moving to language plugins (#3175)
* Return Parsers folder with standard parsers and move SyntaxTreeConverters back to Core

* Rename PascalLanguage project to PascalABCLanguageInfo

* Fix pascal dll loading
2024-07-02 16:10:50 +03:00

1112 lines
57 KiB
C#

// This code was generated by the Gardens Point Parser Generator
// Copyright (c) Wayne Kelly, QUT 2005-2008
// (see accompanying GPPGcopyright.rtf)
// GPPG version 1.3.1.136 (2008-11-11)
// Machine: PC
// DateTime: 30.06.2009 22:50:24
// UserName: A
// Input file <python_yacc.y>
// options: conflicts no-lines gplex conflicts
using System;
using System.Collections.Generic;
using System.Text;
using gppg;
using System.IO;
using PascalABCCompiler.SyntaxTree;
using GPPGTools;
namespace PascalABCCompiler.PythonABCParser
{
public enum Tokens {
error=1,EOF=2,SEMICOLUMN=3,ENDLINE=4,kINDENT=5,kDEDENT=6,
kIF=7,kELSE=8,kWHILE=9,kDEF=10,kFED=11,kRETURN=12,
LPAREN=13,RPAREN=14,COLUMN=15,COLON=16,LSQUARE=17,RSQUARE=18,
FUNCRETSYMB=19,DOT=20,ASSIGN=21,PLUS=22,MINUS=23,MULT=24,
DIVIDE=25,AND=26,OR=27,NOT=28,LT=29,GT=30,
EQ=31,NE=32,LE=33,GE=34,INTNUM=35,FLOATNUM=36,
STRINGLITERAL=37,MULTILINESTRING=38,TRUECONST=39,FALSECONST=40,ID=41,bINT=42,
bFLOAT=43,bSTR=44,bBOOL=45,UMINUS=46,LOWERTHENELSE=47};
public struct ValueType
{
public statement _statement;
public addressed_value _addressed_value;
public statement_list _statement_list;
public const_node _const_node;
public op_type_node _op_type_node;
public token_info _token_info;
public ident _ident;
public named_type_reference _named_type_reference;
public typed_parameters _typed_parametres;
public formal_parameters _formal_parametres;
public procedure_definition _procedure_definition;
public declarations _declarations;
public expression_list _expression_list;
}
// Abstract base class for GPLEX scanners
public abstract class ScanBase : IScanner<ValueType,LexLocation> {
private LexLocation __yylloc = new LexLocation();
public override LexLocation yylloc { get { return __yylloc; } set { __yylloc = value; } }
protected virtual bool yywrap() { return true; }
}
public class Parser: ShiftReduceParser<ValueType, LexLocation>
{
// for fake dynamic typification
List<var_def_statement> _var_def_statement_list = new List<var_def_statement>();
private Dictionary<int, string> aliasses = null;
protected override void Initialize()
{
this.errToken = (int)Tokens.error;
this.eofToken = (int)Tokens.EOF;
states=new State[123];
AddState(0,new State(new int[]{1,122,5,-4,10,-4},new int[]{-1,1,-8,3}));
AddState(1,new State(new int[]{2,2}));
AddState(2,new State(-1));
AddState(3,new State(new int[]{5,4,10,91},new int[]{-6,89,-7,90}));
AddState(4,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,6,-22,3,-22,4,-22},new int[]{-14,5,-13,86,-11,80}));
AddState(5,new State(new int[]{6,6,3,59,4,60},new int[]{-16,8}));
AddState(6,new State(new int[]{1,7,2,-2}));
AddState(7,new State(-21));
AddState(8,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,6,-22,3,-22,4,-22,11,-22},new int[]{-13,9,-11,80}));
AddState(9,new State(-20));
AddState(10,new State(new int[]{21,11,13,62}));
AddState(11,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,12}));
AddState(12,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35,6,-23,3,-23,4,-23,11,-23}));
AddState(13,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,14}));
AddState(14,new State(new int[]{22,-43,23,-43,24,17,25,19,26,21,27,-43,29,-43,30,-43,33,-43,34,-43,31,-43,32,-43,6,-43,3,-43,4,-43,11,-43,15,-43,14,-43,16,-43}));
AddState(15,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,16}));
AddState(16,new State(new int[]{22,-44,23,-44,24,17,25,19,26,21,27,-44,29,-44,30,-44,33,-44,34,-44,31,-44,32,-44,6,-44,3,-44,4,-44,11,-44,15,-44,14,-44,16,-44}));
AddState(17,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,18}));
AddState(18,new State(-45));
AddState(19,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,20}));
AddState(20,new State(-46));
AddState(21,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,22}));
AddState(22,new State(-47));
AddState(23,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,24}));
AddState(24,new State(new int[]{22,-48,23,-48,24,17,25,19,26,21,27,-48,29,-48,30,-48,33,-48,34,-48,31,-48,32,-48,6,-48,3,-48,4,-48,11,-48,15,-48,14,-48,16,-48}));
AddState(25,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,26}));
AddState(26,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-49,30,-49,33,-49,34,-49,31,-49,32,-49,6,-49,3,-49,4,-49,11,-49,15,-49,14,-49,16,-49}));
AddState(27,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,28}));
AddState(28,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-50,30,-50,33,-50,34,-50,31,-50,32,-50,6,-50,3,-50,4,-50,11,-50,15,-50,14,-50,16,-50}));
AddState(29,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,30}));
AddState(30,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-51,30,-51,33,-51,34,-51,31,-51,32,-51,6,-51,3,-51,4,-51,11,-51,15,-51,14,-51,16,-51}));
AddState(31,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,32}));
AddState(32,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-52,30,-52,33,-52,34,-52,31,-52,32,-52,6,-52,3,-52,4,-52,11,-52,15,-52,14,-52,16,-52}));
AddState(33,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,34}));
AddState(34,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-53,30,-53,33,-53,34,-53,31,-53,32,-53,6,-53,3,-53,4,-53,11,-53,15,-53,14,-53,16,-53}));
AddState(35,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,36}));
AddState(36,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,-54,30,-54,33,-54,34,-54,31,-54,32,-54,6,-54,3,-54,4,-54,11,-54,15,-54,14,-54,16,-54}));
AddState(37,new State(-36));
AddState(38,new State(-37));
AddState(39,new State(-38));
AddState(40,new State(-39));
AddState(41,new State(new int[]{13,42,22,-40,23,-40,24,-40,25,-40,26,-40,27,-40,29,-40,30,-40,33,-40,34,-40,31,-40,32,-40,6,-40,3,-40,4,-40,11,-40,15,-40,14,-40,16,-40}));
AddState(42,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57,14,-32},new int[]{-10,43,-9,45,-12,61}));
AddState(43,new State(new int[]{14,44}));
AddState(44,new State(-58));
AddState(45,new State(new int[]{15,46,14,-33}));
AddState(46,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,47}));
AddState(47,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35,15,-35,14,-35}));
AddState(48,new State(-41));
AddState(49,new State(-42));
AddState(50,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,51}));
AddState(51,new State(-55));
AddState(52,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,53}));
AddState(53,new State(-56));
AddState(54,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,55}));
AddState(55,new State(new int[]{14,56,22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35}));
AddState(56,new State(-57));
AddState(57,new State(new int[]{3,59,4,60},new int[]{-16,58}));
AddState(58,new State(-59));
AddState(59,new State(-60));
AddState(60,new State(-61));
AddState(61,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35,15,-34,14,-34}));
AddState(62,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57,14,-32},new int[]{-10,63,-9,45,-12,61}));
AddState(63,new State(new int[]{14,64}));
AddState(64,new State(-27));
AddState(65,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,66}));
AddState(66,new State(new int[]{16,67,22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35}));
AddState(67,new State(new int[]{4,68}));
AddState(68,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,6,-22,3,-22,4,-22,11,-22},new int[]{-13,69,-11,80}));
AddState(69,new State(-24));
AddState(70,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,71}));
AddState(71,new State(new int[]{16,72,22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35}));
AddState(72,new State(new int[]{4,73}));
AddState(73,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,4,-22},new int[]{-13,74,-11,80}));
AddState(74,new State(new int[]{4,75}));
AddState(75,new State(new int[]{8,76,6,-25,3,-25,4,-25,11,-25}));
AddState(76,new State(new int[]{16,77}));
AddState(77,new State(new int[]{4,78}));
AddState(78,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,6,-22,3,-22,4,-22,11,-22},new int[]{-13,79,-11,80}));
AddState(79,new State(-26));
AddState(80,new State(-28));
AddState(81,new State(new int[]{35,37,36,38,39,39,40,40,41,41,37,48,38,49,28,50,23,52,13,54,1,57},new int[]{-12,82}));
AddState(82,new State(new int[]{22,13,23,15,24,17,25,19,26,21,27,23,29,25,30,27,33,29,34,31,31,33,32,35,6,-31,3,-31,4,-31,11,-31}));
AddState(83,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,6,-22,3,-22,4,-22},new int[]{-14,84,-13,86,-11,80}));
AddState(84,new State(new int[]{6,85,3,59,4,60},new int[]{-16,8}));
AddState(85,new State(new int[]{1,7,6,-29,3,-29,4,-29,11,-29}));
AddState(86,new State(-19));
AddState(87,new State(new int[]{2,88}));
AddState(88,new State(-30));
AddState(89,new State(-5));
AddState(90,new State(-6));
AddState(91,new State(new int[]{41,92}));
AddState(92,new State(new int[]{13,93}));
AddState(93,new State(new int[]{41,116,1,120,14,-9},new int[]{-5,94,-4,113,-3,119}));
AddState(94,new State(new int[]{14,95}));
AddState(95,new State(new int[]{16,96,19,102}));
AddState(96,new State(new int[]{3,59,4,60},new int[]{-16,97}));
AddState(97,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,11,-22,6,-22,3,-22,4,-22},new int[]{-14,98,-13,86,-11,80}));
AddState(98,new State(new int[]{11,99,6,101,3,59,4,60},new int[]{-16,8}));
AddState(99,new State(new int[]{3,59,4,60},new int[]{-16,100}));
AddState(100,new State(-8));
AddState(101,new State(new int[]{1,7}));
AddState(102,new State(new int[]{42,109,43,110,44,111,45,112},new int[]{-2,103}));
AddState(103,new State(new int[]{16,104}));
AddState(104,new State(new int[]{3,59,4,60},new int[]{-16,105}));
AddState(105,new State(new int[]{41,10,9,65,7,70,12,81,5,83,1,87,11,-22,6,-22,3,-22,4,-22},new int[]{-14,106,-13,86,-11,80}));
AddState(106,new State(new int[]{11,107,6,101,3,59,4,60},new int[]{-16,8}));
AddState(107,new State(new int[]{3,59,4,60},new int[]{-16,108}));
AddState(108,new State(-7));
AddState(109,new State(-15));
AddState(110,new State(-16));
AddState(111,new State(-17));
AddState(112,new State(-18));
AddState(113,new State(new int[]{15,114,14,-10}));
AddState(114,new State(new int[]{41,116},new int[]{-3,115}));
AddState(115,new State(-12));
AddState(116,new State(new int[]{16,117}));
AddState(117,new State(new int[]{42,109,43,110,44,111,45,112},new int[]{-2,118}));
AddState(118,new State(-14));
AddState(119,new State(-11));
AddState(120,new State(new int[]{14,121}));
AddState(121,new State(-13));
AddState(122,new State(-3));
rules=new Rule[62];
rules[1]=new Rule(-15, new int[]{-1,2});
rules[2]=new Rule(-1, new int[]{-8,5,-14,6});
rules[3]=new Rule(-1, new int[]{1});
rules[4]=new Rule(-8, new int[]{});
rules[5]=new Rule(-8, new int[]{-8,-6});
rules[6]=new Rule(-8, new int[]{-8,-7});
rules[7]=new Rule(-7, new int[]{10,41,13,-5,14,19,-2,16,-16,-14,11,-16});
rules[8]=new Rule(-6, new int[]{10,41,13,-5,14,16,-16,-14,11,-16});
rules[9]=new Rule(-5, new int[]{});
rules[10]=new Rule(-5, new int[]{-4});
rules[11]=new Rule(-4, new int[]{-3});
rules[12]=new Rule(-4, new int[]{-4,15,-3});
rules[13]=new Rule(-4, new int[]{1,14});
rules[14]=new Rule(-3, new int[]{41,16,-2});
rules[15]=new Rule(-2, new int[]{42});
rules[16]=new Rule(-2, new int[]{43});
rules[17]=new Rule(-2, new int[]{44});
rules[18]=new Rule(-2, new int[]{45});
rules[19]=new Rule(-14, new int[]{-13});
rules[20]=new Rule(-14, new int[]{-14,-16,-13});
rules[21]=new Rule(-14, new int[]{-14,6,1});
rules[22]=new Rule(-13, new int[]{});
rules[23]=new Rule(-13, new int[]{41,21,-12});
rules[24]=new Rule(-13, new int[]{9,-12,16,4,-13});
rules[25]=new Rule(-13, new int[]{7,-12,16,4,-13,4});
rules[26]=new Rule(-13, new int[]{7,-12,16,4,-13,4,8,16,4,-13});
rules[27]=new Rule(-13, new int[]{41,13,-10,14});
rules[28]=new Rule(-13, new int[]{-11});
rules[29]=new Rule(-13, new int[]{5,-14,6});
rules[30]=new Rule(-13, new int[]{1,2});
rules[31]=new Rule(-11, new int[]{12,-12});
rules[32]=new Rule(-10, new int[]{});
rules[33]=new Rule(-10, new int[]{-9});
rules[34]=new Rule(-9, new int[]{-12});
rules[35]=new Rule(-9, new int[]{-9,15,-12});
rules[36]=new Rule(-12, new int[]{35});
rules[37]=new Rule(-12, new int[]{36});
rules[38]=new Rule(-12, new int[]{39});
rules[39]=new Rule(-12, new int[]{40});
rules[40]=new Rule(-12, new int[]{41});
rules[41]=new Rule(-12, new int[]{37});
rules[42]=new Rule(-12, new int[]{38});
rules[43]=new Rule(-12, new int[]{-12,22,-12});
rules[44]=new Rule(-12, new int[]{-12,23,-12});
rules[45]=new Rule(-12, new int[]{-12,24,-12});
rules[46]=new Rule(-12, new int[]{-12,25,-12});
rules[47]=new Rule(-12, new int[]{-12,26,-12});
rules[48]=new Rule(-12, new int[]{-12,27,-12});
rules[49]=new Rule(-12, new int[]{-12,29,-12});
rules[50]=new Rule(-12, new int[]{-12,30,-12});
rules[51]=new Rule(-12, new int[]{-12,33,-12});
rules[52]=new Rule(-12, new int[]{-12,34,-12});
rules[53]=new Rule(-12, new int[]{-12,31,-12});
rules[54]=new Rule(-12, new int[]{-12,32,-12});
rules[55]=new Rule(-12, new int[]{28,-12});
rules[56]=new Rule(-12, new int[]{23,-12});
rules[57]=new Rule(-12, new int[]{13,-12,14});
rules[58]=new Rule(-12, new int[]{41,13,-10,14});
rules[59]=new Rule(-12, new int[]{1,-16});
rules[60]=new Rule(-16, new int[]{3});
rules[61]=new Rule(-16, new int[]{4});
nonTerminals = new string[] {"", "program", "builtintype", "formalparam",
"formallist", "formalparams", "procdecl", "funcdecl", "decls", "exprlist",
"factparams", "retstmt", "expr", "stmt", "liststmt", "$accept", "term",
};
}
protected override void DoAction(int action)
{
switch (action)
{
case 2: // program -> decls, kINDENT, liststmt, kDEDENT
{
//$1.source_context = PT.GetTokenSourceContext(@1);
value_stack.array[value_stack.top-2]._statement_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
variable_definitions _variable_definitions = new variable_definitions();
foreach (var_def_statement vds in _var_def_statement_list)
{
_variable_definitions.var_definitions.Add(vds);
}
_var_def_statement_list.Clear();
declarations _declarations1;
if(value_stack.array[value_stack.top-4]._declarations == null)
_declarations1 = new declarations();
else
_declarations1 = value_stack.array[value_stack.top-4]._declarations;
_declarations1.defs.Add(_variable_definitions);
//_declarations1.source_context = PT.GetTokenSourceContext(@1); //
block _block;
if(_declarations1.defs.Count > 0)
_block = new block(_declarations1, value_stack.array[value_stack.top-2]._statement_list);
else
_block = new block(null, value_stack.array[value_stack.top-2]._statement_list);
//_block.source_context = PT.GetTokenSourceContext(@1.Merge(@2)); // @$
GPPGParser.CompilationUnit = new program_module(null, null, _block, null);
GPPGParser.CompilationUnit.Language = LanguageId.PascalABCNET;
//GPPGParser.CompilationUnit.source_context = _block.source_context; // @$
}
break;
case 3: // program -> error
{
GPPGParser.CompilationUnit = new compilation_unit();
Errors.ErrorMsg err = new Errors.ErrorMsg(GPPGParser.current_file_name, PT.GetTokenSourceContext(yyloc), "PROGRAM_ERROR");
GPPGParser.errors.Add(err);
}
break;
case 4: // decls -> /* empty */
{
yyval._declarations = null;
}
break;
case 5: // decls -> decls, procdecl
{
//if ($1 != null) $1.source_context = PT.GetTokenSourceContext(@1);
//$2.source_context = PT.GetTokenSourceContext(@2);
declarations _declarations1;
if (value_stack.array[value_stack.top-2]._declarations != null)
{
_declarations1 = value_stack.array[value_stack.top-2]._declarations;
_declarations1.defs.Add(value_stack.array[value_stack.top-1]._procedure_definition);
}
else
{
_declarations1 = new declarations();
_declarations1.defs.Add(value_stack.array[value_stack.top-1]._procedure_definition);
}
yyval._declarations = _declarations1;
//$$.source_context = PT.GetTokenSourceContext(@2); // !!!
}
break;
case 6: // decls -> decls, funcdecl
{
declarations _declarations1;
if (value_stack.array[value_stack.top-2]._declarations != null)
{
_declarations1 = value_stack.array[value_stack.top-2]._declarations;
_declarations1.defs.Add(value_stack.array[value_stack.top-1]._procedure_definition);
}
else
{
_declarations1 = new declarations();
_declarations1.defs.Add(value_stack.array[value_stack.top-1]._procedure_definition);
}
yyval._declarations = _declarations1;
}
break;
case 7: // funcdecl -> kDEF, ID, LPAREN, formalparams, RPAREN, FUNCRETSYMB, builtintype,
// COLON, term, liststmt, kFED, term
{// 1 2 3 4 5 6 7 8 9 10 11 12
value_stack.array[value_stack.top-12]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-12]);
value_stack.array[value_stack.top-11]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-11]);
value_stack.array[value_stack.top-10]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-10]);
PT.AssignSourceContext(value_stack.array[value_stack.top-9]._formal_parametres, location_stack.array[location_stack.top-9]);
value_stack.array[value_stack.top-8]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-8]);
value_stack.array[value_stack.top-7]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-7]);
value_stack.array[value_stack.top-6]._named_type_reference.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-6]);
value_stack.array[value_stack.top-5]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-5]);
value_stack.array[value_stack.top-3]._statement_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
method_name _method_name = new method_name(null, value_stack.array[value_stack.top-11]._ident, null);
function_header _function_header = new function_header(value_stack.array[value_stack.top-6]._named_type_reference);
_function_header.of_object = false;
_function_header.name = _method_name;
_function_header.parameters = value_stack.array[value_stack.top-9]._formal_parametres;
_method_name.source_context = value_stack.array[value_stack.top-11]._ident.source_context;
_function_header.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-12].Merge(location_stack.array[location_stack.top-5]));
// HACK: aftereffects fake dynamic typification
if(value_stack.array[value_stack.top-9]._formal_parametres != null)
foreach (typed_parameters tp in value_stack.array[value_stack.top-9]._formal_parametres.params_list)
{
bool HaveIdent = false;
var_def_statement v = new var_def_statement();
foreach (var_def_statement vds in _var_def_statement_list)
{
if(tp.idents.idents[0].name == vds.vars.idents[0].name)
{
HaveIdent = true;
v = vds;
break;
}
}
if (HaveIdent)
_var_def_statement_list.Remove(v);
}
variable_definitions _variable_definitions = new variable_definitions();
foreach (var_def_statement vds in _var_def_statement_list)
{
_variable_definitions.var_definitions.Add(vds);
}
// end hack
declarations _declarations1 = new declarations();
_declarations1.defs.Add(_variable_definitions);
_declarations1.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-9]); // formalparams
block _block;
if(_declarations1.defs.Count > 0)
_block = new block(_declarations1, value_stack.array[value_stack.top-3]._statement_list);
else
_block = new block(null, value_stack.array[value_stack.top-3]._statement_list);
_var_def_statement_list.Clear();
_block.source_context = PT.GetTokenSourceContext(yyloc);
procedure_definition _procedure_definition = new procedure_definition(_function_header, _block);
yyval._procedure_definition = _procedure_definition;
yyval._procedure_definition.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 8: // procdecl -> kDEF, ID, LPAREN, formalparams, RPAREN, COLON, term, liststmt, kFED,
// term
{// 1 2 3 4 5 6 7 8 9
value_stack.array[value_stack.top-10]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-10]);
value_stack.array[value_stack.top-9]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-9]);
value_stack.array[value_stack.top-8]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-8]);
PT.AssignSourceContext(value_stack.array[value_stack.top-7]._formal_parametres, location_stack.array[location_stack.top-7]);
value_stack.array[value_stack.top-6]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-6]);
value_stack.array[value_stack.top-5]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-5]);
value_stack.array[value_stack.top-3]._statement_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
method_name _method_name = new method_name(null, value_stack.array[value_stack.top-9]._ident, null);
procedure_header _procedure_header = new procedure_header(value_stack.array[value_stack.top-7]._formal_parametres, null, _method_name, false, false, null, null);
_method_name.source_context = value_stack.array[value_stack.top-9]._ident.source_context;
_procedure_header.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-10].Merge(location_stack.array[location_stack.top-5])); // sum of lex locations 1..6
// HACK: aftereffects fake dynamic typification
if(value_stack.array[value_stack.top-7]._formal_parametres != null)
foreach (typed_parameters tp in value_stack.array[value_stack.top-7]._formal_parametres.params_list)
{
bool HaveIdent = false;
var_def_statement v = new var_def_statement();
foreach (var_def_statement vds in _var_def_statement_list)
{
if(tp.idents.idents[0].name == vds.vars.idents[0].name)
{
HaveIdent = true;
v = vds;
break;
}
}
if (HaveIdent)
_var_def_statement_list.Remove(v);
}
variable_definitions _variable_definitions = new variable_definitions();
foreach (var_def_statement vds in _var_def_statement_list)
{
_variable_definitions.var_definitions.Add(vds);
}
// end hack
declarations _declarations1 = new declarations();
_declarations1.defs.Add(_variable_definitions);
_declarations1.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-7]); // formalparams
block _block;
if(_declarations1.defs.Count > 0)
_block = new block(_declarations1, value_stack.array[value_stack.top-3]._statement_list);
else
_block = new block(null, value_stack.array[value_stack.top-3]._statement_list);
_var_def_statement_list.Clear();
_block.source_context = PT.GetTokenSourceContext(yyloc);
procedure_definition _procedure_definition = new procedure_definition(_procedure_header, _block);
yyval._procedure_definition = _procedure_definition;
yyval._procedure_definition.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 9: // formalparams -> /* empty */
{
yyval._formal_parametres = null;
}
break;
case 10: // formalparams -> formallist
{
value_stack.array[value_stack.top-1]._formal_parametres.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._formal_parametres = value_stack.array[value_stack.top-1]._formal_parametres;
yyval._formal_parametres.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 11: // formallist -> formalparam
{
value_stack.array[value_stack.top-1]._typed_parametres.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
formal_parameters _formal_parametres = new formal_parameters();
_formal_parametres.params_list.Add(value_stack.array[value_stack.top-1]._typed_parametres);
yyval._formal_parametres = _formal_parametres;
yyval._formal_parametres.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 12: // formallist -> formallist, COLUMN, formalparam
{
value_stack.array[value_stack.top-3]._formal_parametres.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._typed_parametres.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
formal_parameters _formal_parametres = value_stack.array[value_stack.top-3]._formal_parametres;
_formal_parametres.params_list.Add(value_stack.array[value_stack.top-1]._typed_parametres);
yyval._formal_parametres = _formal_parametres;
yyval._formal_parametres.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 13: // formallist -> error, RPAREN
{
GPPGParser.CompilationUnit = new compilation_unit();
Errors.ErrorMsg err = new Errors.ErrorMsg(GPPGParser.current_file_name, PT.GetTokenSourceContext(yyloc), "FORMALLIST_ERROR");
GPPGParser.errors.Add(err);
}
break;
case 14: // formalparam -> ID, COLON, builtintype
{
value_stack.array[value_stack.top-3]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._named_type_reference.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
ident_list _ident_list = new ident_list();
_ident_list.idents.Add(value_stack.array[value_stack.top-3]._ident);
named_type_reference _named_type_reference = value_stack.array[value_stack.top-1]._named_type_reference;
typed_parameters _typed_parametres = new typed_parameters(_ident_list, _named_type_reference, parametr_kind.none, null);
yyval._typed_parametres = _typed_parametres;
yyval._typed_parametres.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 15: // builtintype -> bINT
{
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
named_type_reference _named_type_reference = new named_type_reference();
_named_type_reference.names.Add(new ident("integer"));
yyval._named_type_reference = _named_type_reference;
yyval._named_type_reference.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 16: // builtintype -> bFLOAT
{
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
named_type_reference _named_type_reference = new named_type_reference();
_named_type_reference.names.Add(new ident("real"));
yyval._named_type_reference = _named_type_reference;
yyval._named_type_reference.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 17: // builtintype -> bSTR
{
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
named_type_reference _named_type_reference = new named_type_reference();
_named_type_reference.names.Add(new ident("string"));
yyval._named_type_reference = _named_type_reference;
yyval._named_type_reference.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 18: // builtintype -> bBOOL
{
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
named_type_reference _named_type_reference = new named_type_reference();
_named_type_reference.names.Add(new ident("boolean"));
yyval._named_type_reference = _named_type_reference;
yyval._named_type_reference.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 19: // liststmt -> stmt
{
value_stack.array[value_stack.top-1]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
statement_list _sl = new statement_list();
_sl.subnodes.Add(value_stack.array[value_stack.top-1]._statement);
yyval._statement_list = _sl;
yyval._statement_list.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 20: // liststmt -> liststmt, term, stmt
{
value_stack.array[value_stack.top-3]._statement_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-1]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
statement_list _sl = value_stack.array[value_stack.top-3]._statement_list;
_sl.subnodes.Add(value_stack.array[value_stack.top-1]._statement);
yyval._statement_list = _sl;
yyval._statement_list.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 21: // liststmt -> liststmt, kDEDENT, error
{
GPPGParser.CompilationUnit = new compilation_unit();
Errors.ErrorMsg err = new Errors.ErrorMsg(GPPGParser.current_file_name, PT.GetTokenSourceContext(yyloc), "err in liststmt");
GPPGParser.errors.Add(err);
}
break;
case 22: // stmt -> /* empty */
{
yyval._statement = new empty_statement();
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 23: // stmt -> ID, ASSIGN, expr
{
value_stack.array[value_stack.top-3]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
// HACK: fake dynamic typification
ident_list _ident_list = new ident_list();
_ident_list.idents.Add(value_stack.array[value_stack.top-3]._ident);
var_def_statement _var_def_statement = new var_def_statement(_ident_list, null, value_stack.array[value_stack.top-1]._addressed_value, definition_attribute.None, false);
bool HaveIdent = false;
foreach (var_def_statement vds in _var_def_statement_list)
{
if(vds.vars.idents[0].name == value_stack.array[value_stack.top-3]._ident.name)
{
HaveIdent = true;
break;
}
}
if(!HaveIdent)
_var_def_statement_list.Add(_var_def_statement);
// end hack
yyval._statement = new assign(value_stack.array[value_stack.top-3]._ident, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 24: // stmt -> kWHILE, expr, COLON, ENDLINE, stmt
{
value_stack.array[value_stack.top-5]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-5]);
value_stack.array[value_stack.top-4]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-4]);
value_stack.array[value_stack.top-3]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-1]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._statement = new while_node(value_stack.array[value_stack.top-4]._addressed_value, value_stack.array[value_stack.top-1]._statement, WhileCycleType.While);
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 25: // stmt -> kIF, expr, COLON, ENDLINE, stmt, ENDLINE
{
value_stack.array[value_stack.top-6]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-6]);
value_stack.array[value_stack.top-5]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-5]);
value_stack.array[value_stack.top-4]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-4]);
value_stack.array[value_stack.top-2]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
yyval._statement = new if_node(value_stack.array[value_stack.top-5]._addressed_value, value_stack.array[value_stack.top-2]._statement, null);
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 26: // stmt -> kIF, expr, COLON, ENDLINE, stmt, ENDLINE, kELSE, COLON, ENDLINE, stmt
{
value_stack.array[value_stack.top-10]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-10]);
value_stack.array[value_stack.top-9]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-9]);
value_stack.array[value_stack.top-8]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-8]);
value_stack.array[value_stack.top-6]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-6]);
value_stack.array[value_stack.top-1]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._statement = new if_node(value_stack.array[value_stack.top-9]._addressed_value, value_stack.array[value_stack.top-6]._statement, value_stack.array[value_stack.top-1]._statement);
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 27: // stmt -> ID, LPAREN, factparams, RPAREN
{
value_stack.array[value_stack.top-4]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-4]);
value_stack.array[value_stack.top-3]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
PT.AssignSourceContext(value_stack.array[value_stack.top-2]._expression_list, location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
procedure_call _procedure_call = new procedure_call();
method_call _method_call;
if(value_stack.array[value_stack.top-2]._expression_list != null)
_method_call = new method_call(value_stack.array[value_stack.top-2]._expression_list);
else
_method_call = new method_call();
if (ParserHelper.builtins.ContainsKey(value_stack.array[value_stack.top-4]._ident.name))
{
_method_call.dereferencing_value = new ident(ParserHelper.builtins[value_stack.array[value_stack.top-4]._ident.name]);
}
else
{
_method_call.dereferencing_value = value_stack.array[value_stack.top-4]._ident;
}
_method_call.source_context = value_stack.array[value_stack.top-4]._ident.source_context;
_procedure_call.func_name = _method_call;
yyval._statement = _procedure_call;
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 28: // stmt -> retstmt
{
value_stack.array[value_stack.top-1]._statement.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._statement = value_stack.array[value_stack.top-1]._statement;
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 29: // stmt -> kINDENT, liststmt, kDEDENT
{
value_stack.array[value_stack.top-3]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._statement_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._statement = value_stack.array[value_stack.top-2]._statement_list;
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 30: // stmt -> error, EOF
{
GPPGParser.CompilationUnit = new compilation_unit();
Errors.ErrorMsg err = new Errors.ErrorMsg(GPPGParser.current_file_name, PT.GetTokenSourceContext(yyloc), "STATEMENT_EXPECTED");
GPPGParser.errors.Add(err);
}
break;
case 31: // retstmt -> kRETURN, expr
{
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
ident id = PT.create_directive_name("result", location_stack.array[location_stack.top-2]);
yyval._statement = new assign(id, value_stack.array[value_stack.top-1]._addressed_value, Operators.Assignment);
yyval._statement.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 32: // factparams -> /* empty */
{
yyval._expression_list = null;
}
break;
case 33: // factparams -> exprlist
{
value_stack.array[value_stack.top-1]._expression_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._expression_list = value_stack.array[value_stack.top-1]._expression_list;
yyval._expression_list.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 34: // exprlist -> expr
{
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
expression_list _expression_list = new expression_list();
_expression_list.expressions.Add(value_stack.array[value_stack.top-1]._addressed_value);
yyval._expression_list = _expression_list;
yyval._expression_list.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 35: // exprlist -> exprlist, COLUMN, expr
{
value_stack.array[value_stack.top-3]._expression_list.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
expression_list _expression_list = value_stack.array[value_stack.top-3]._expression_list;
_expression_list.expressions.Add(value_stack.array[value_stack.top-1]._addressed_value);
yyval._expression_list = _expression_list;
yyval._expression_list.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 36: // expr -> INTNUM
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 37: // expr -> FLOATNUM
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 38: // expr -> TRUECONST
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 39: // expr -> FALSECONST
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 40: // expr -> ID
{
value_stack.array[value_stack.top-1]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._ident;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 41: // expr -> STRINGLITERAL
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 42: // expr -> MULTILINESTRING
{
value_stack.array[value_stack.top-1]._const_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = value_stack.array[value_stack.top-1]._const_node;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 43: // expr -> expr, PLUS, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 44: // expr -> expr, MINUS, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 45: // expr -> expr, MULT, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 46: // expr -> expr, DIVIDE, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 47: // expr -> expr, AND, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 48: // expr -> expr, OR, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 49: // expr -> expr, LT, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 50: // expr -> expr, GT, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 51: // expr -> expr, LE, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 52: // expr -> expr, GE, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 53: // expr -> expr, EQ, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 54: // expr -> expr, NE, expr
{
value_stack.array[value_stack.top-3]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new bin_expr(value_stack.array[value_stack.top-3]._addressed_value, value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 55: // expr -> NOT, expr
{
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new un_expr(value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 56: // expr -> MINUS, expr
{
value_stack.array[value_stack.top-2]._op_type_node.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
yyval._addressed_value = new un_expr(value_stack.array[value_stack.top-1]._addressed_value, value_stack.array[value_stack.top-2]._op_type_node.type);
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 57: // expr -> LPAREN, expr, RPAREN
{
value_stack.array[value_stack.top-2]._addressed_value.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-2]);
yyval._addressed_value = value_stack.array[value_stack.top-2]._addressed_value;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 58: // expr -> ID, LPAREN, factparams, RPAREN
{
value_stack.array[value_stack.top-4]._ident.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-4]);
value_stack.array[value_stack.top-3]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-3]);
PT.AssignSourceContext(value_stack.array[value_stack.top-2]._expression_list, location_stack.array[location_stack.top-2]);
value_stack.array[value_stack.top-1]._token_info.source_context = PT.GetTokenSourceContext(location_stack.array[location_stack.top-1]);
method_call _method_call;
if(value_stack.array[value_stack.top-2]._expression_list != null)
_method_call = new method_call(value_stack.array[value_stack.top-2]._expression_list);
else
_method_call = new method_call();
if (ParserHelper.builtins.ContainsKey(value_stack.array[value_stack.top-4]._ident.name))
{
_method_call.dereferencing_value = new ident(ParserHelper.builtins[value_stack.array[value_stack.top-4]._ident.name]);
}
else
{
_method_call.dereferencing_value = value_stack.array[value_stack.top-4]._ident;
}
_method_call.dereferencing_value.source_context = value_stack.array[value_stack.top-4]._ident.source_context;
yyval._addressed_value = _method_call;
yyval._addressed_value.source_context = PT.GetTokenSourceContext(yyloc);
}
break;
case 59: // expr -> error, term
{
GPPGParser.CompilationUnit = new compilation_unit();
Errors.ErrorMsg err = new Errors.ErrorMsg(GPPGParser.current_file_name, PT.GetTokenSourceContext(yyloc), "EXPRESSION_EXPECTED");
GPPGParser.errors.Add(err);
}
break;
}
}
protected override string TerminalToString(int terminal)
{
if (aliasses != null && aliasses.ContainsKey(terminal))
return aliasses[terminal];
else if (((Tokens)terminal).ToString() != terminal.ToString())
return ((Tokens)terminal).ToString();
else
return CharToString((char)terminal);
}
PythonParserTools PT = new PythonParserTools();
class ParserHelper
{
public static Dictionary<string, string> builtins;
static ParserHelper()
{
builtins = new Dictionary<string, string>();
builtins.Add("print", "writeln");
builtins.Add("input", "readln");
}
}
}
}