diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 71ddd4056..c8be199f9 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "0"; public const string Build = "0"; - public const string Revision = "1143"; + public const string Revision = "1145"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index f0b292764..984c24276 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %COREVERSION%=0 -%REVISION%=1143 +%REVISION%=1145 %MINOR%=0 %MAJOR%=3 diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index eb8e0cc8b..46be65327 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs @@ -2,7 +2,7 @@ // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 // Machine: SSM -// DateTime: 15.01.2016 21:15:29 +// DateTime: 18.01.2016 8:09:32 // UserName: ????????? // GPLEX input file // GPLEX frame file @@ -2070,7 +2070,7 @@ yylval = new Union(); return (int)Tokens.tkHex; break; case 48: -if (parsertools.build_tree_for_brackets) +if (parsertools.build_tree_for_formatter) break; parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex index 014c7b017..dd849ab46 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex @@ -59,7 +59,7 @@ ALPHABET [^ a-zA-Z_0-9\r\n\t\'$#&,:.;@\+\-\*/=<>\^()\[\]\x01] } {DIRECTIVE} { - if (parsertools.build_tree_for_brackets) + if (parsertools.build_tree_for_formatter) break; parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index 6345dfc3b..7115b54ab 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -77,7 +77,7 @@ %type enumeration_id expr_l1_list %type enumeration_id_list %type const_simple_expr term typed_const typed_const_or_new expr const_expr elem range_expr const_elem array_const factor relop_expr expr_l1 simple_expr range_term range_factor -%type external_directive_ident init_const_expr case_label variable var_reference +%type external_directive_ident init_const_expr case_label variable var_reference %type for_cycle_type %type format_expr %type foreach_stmt @@ -1949,19 +1949,19 @@ inclass_proc_func_decl_noclass | tkFunction func_name fp_list tkColon fptype optional_method_modificators1 tkAssign relop_expr tkSemiColon { $$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $6 as procedure_attributes_list, $2 as method_name, $5 as type_definition, $8, @1.Merge(@6)); - if (parsertools.build_tree_for_brackets) + if (parsertools.build_tree_for_formatter) $$ = new short_func_definition($$ as procedure_definition); } | tkFunction func_name fp_list optional_method_modificators1 tkAssign relop_expr tkSemiColon { $$ = SyntaxTreeBuilder.BuildShortFuncDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, null, $6, @1.Merge(@4)); - if (parsertools.build_tree_for_brackets) + if (parsertools.build_tree_for_formatter) $$ = new short_func_definition($$ as procedure_definition); } | tkProcedure proc_name fp_list optional_method_modificators1 tkAssign stmt tkSemiColon { $$ = SyntaxTreeBuilder.BuildShortProcDefinition($3 as formal_parameters, $4 as procedure_attributes_list, $2 as method_name, $6 as statement, @1.Merge(@4)); - if (parsertools.build_tree_for_brackets) + if (parsertools.build_tree_for_formatter) $$ = new short_func_definition($$ as procedure_definition); } ; @@ -2616,8 +2616,6 @@ expr { $$ = $1; } | format_expr { $$ = $1; } - | func_decl_lambda - { $$ = $1; } ; expr_l1 @@ -2906,6 +2904,8 @@ factor } | var_reference { $$ = $1; } + | func_decl_lambda + { $$ = $1; } ; literal_or_number @@ -2967,7 +2967,7 @@ variable } | tkRoundOpen expr tkRoundClose { - if (!parsertools.build_tree_for_brackets) + if (!parsertools.build_tree_for_formatter) { $2.source_context = @$; $$ = $2; @@ -3429,9 +3429,12 @@ func_decl_lambda if (($4 as expression_list).expressions.Count>7) parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",@5); - $$ = new method_call(new dot_node("Tuple","Create"),$4 as expression_list,@$); + if (parsertools.build_tree_for_formatter) + $$ = new tuple_node_for_formatter($4 as expression_list); + else + $$ = new method_call(new dot_node("Tuple","Create"),$4 as expression_list,@$); } - else // It is a lambda-expression. Expressions must be identifiers. + else // It is a lambda-expression. Expressions in parameters must be identifiers. { var pair = $8 as pair_type_stlist; diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalParserTools.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalParserTools.cs index 0330f3f84..cbec53cb7 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalParserTools.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalParserTools.cs @@ -42,7 +42,7 @@ namespace PascalABCSavParser // SSM: Errors инициализируется в другом месте - сюда только передается! public List errors; public System.Collections.Stack NodesStack; // SSM: для каких-то вспомогательных целей в двух правилах - public bool build_tree_for_brackets = false; + public bool build_tree_for_formatter = false; public string CurrentFileName; diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index 65d58df24..b208696d2 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,7 +2,7 @@ // GPPG version 1.3.6 // Machine: SSM -// DateTime: 15.01.2016 21:15:30 +// DateTime: 18.01.2016 8:09:33 // UserName: ????????? // Input file @@ -151,7 +151,7 @@ public partial class GPPGParser: ShiftReduceParser format_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 529: // expr -> func_decl_lambda + case 529: // expr_l1 -> relop_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 530: // expr_l1 -> relop_expr + case 530: // expr_l1 -> question_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 531: // expr_l1 -> question_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 532: // sizeof_expr -> tkSizeOf, tkRoundOpen, simple_or_template_type_reference, + case 531: // sizeof_expr -> tkSizeOf, tkRoundOpen, simple_or_template_type_reference, // tkRoundClose { CurrentSemanticValue.ex = new sizeof_operator((named_type_reference)ValueStack[ValueStack.Depth-2].td, null, CurrentLocationSpan); } break; - case 533: // typeof_expr -> tkTypeOf, tkRoundOpen, simple_or_template_type_reference, + case 532: // typeof_expr -> tkTypeOf, tkRoundOpen, simple_or_template_type_reference, // tkRoundClose { CurrentSemanticValue.ex = new typeof_operator((named_type_reference)ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); } break; - case 534: // question_expr -> expr_l1, tkQuestion, expr_l1, tkColon, expr_l1 + case 533: // question_expr -> expr_l1, tkQuestion, expr_l1, tkColon, expr_l1 { CurrentSemanticValue.ex = new question_colon_expression(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 535: // simple_or_template_type_reference -> simple_type_identifier + case 534: // simple_or_template_type_reference -> simple_type_identifier { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 536: // simple_or_template_type_reference -> simple_type_identifier, + case 535: // simple_or_template_type_reference -> simple_type_identifier, // template_type_params { CurrentSemanticValue.td = new template_type_reference((named_type_reference)ValueStack[ValueStack.Depth-2].td, (template_param_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 537: // simple_or_template_type_reference -> simple_type_identifier, tkAmpersend, + case 536: // simple_or_template_type_reference -> simple_type_identifier, tkAmpersend, // template_type_params { CurrentSemanticValue.td = new template_type_reference((named_type_reference)ValueStack[ValueStack.Depth-3].td, (template_param_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 538: // optional_array_initializer -> tkRoundOpen, typed_const_list, tkRoundClose + case 537: // optional_array_initializer -> tkRoundOpen, typed_const_list, tkRoundClose { CurrentSemanticValue.stn = new array_const((expression_list)ValueStack[ValueStack.Depth-2].stn, CurrentLocationSpan); } break; - case 540: // new_expr -> tkNew, simple_or_template_type_reference, + case 539: // new_expr -> tkNew, simple_or_template_type_reference, // optional_expr_list_with_bracket { CurrentSemanticValue.ex = new new_expr(ValueStack[ValueStack.Depth-2].td, ValueStack[ValueStack.Depth-1].stn as expression_list, false, null, CurrentLocationSpan); } break; - case 541: // new_expr -> tkNew, array_name_for_new_expr, tkSquareOpen, optional_expr_list, + case 540: // new_expr -> tkNew, array_name_for_new_expr, tkSquareOpen, optional_expr_list, // tkSquareClose, optional_array_initializer { var el = ValueStack[ValueStack.Depth-3].stn as expression_list; @@ -4556,7 +4553,7 @@ public partial class GPPGParser: ShiftReduceParser tkNew, tkClass, tkRoundOpen, list_fields_in_unnamed_object, + case 541: // new_expr -> tkNew, tkClass, tkRoundOpen, list_fields_in_unnamed_object, // tkRoundClose { // sugared node @@ -4571,12 +4568,12 @@ public partial class GPPGParser: ShiftReduceParser identifier, tkAssign, relop_expr + case 542: // field_in_unnamed_object -> identifier, tkAssign, relop_expr { CurrentSemanticValue.ob = new name_assign_expr(ValueStack[ValueStack.Depth-3].id,ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); } break; - case 544: // field_in_unnamed_object -> relop_expr + case 543: // field_in_unnamed_object -> relop_expr { ident name = null; var id = ValueStack[ValueStack.Depth-1].ex as ident; @@ -4596,13 +4593,13 @@ public partial class GPPGParser: ShiftReduceParser field_in_unnamed_object + case 544: // list_fields_in_unnamed_object -> field_in_unnamed_object { var l = new name_assign_expr_list(); CurrentSemanticValue.ob = l.Add(ValueStack[ValueStack.Depth-1].ob as name_assign_expr); } break; - case 546: // list_fields_in_unnamed_object -> list_fields_in_unnamed_object, tkComma, + case 545: // list_fields_in_unnamed_object -> list_fields_in_unnamed_object, tkComma, // field_in_unnamed_object { var nel = ValueStack[ValueStack.Depth-3].ob as name_assign_expr_list; @@ -4613,173 +4610,176 @@ public partial class GPPGParser: ShiftReduceParser simple_type_identifier + case 546: // array_name_for_new_expr -> simple_type_identifier { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 548: // array_name_for_new_expr -> unsized_array_type + case 547: // array_name_for_new_expr -> unsized_array_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 549: // optional_expr_list_with_bracket -> /* empty */ + case 548: // optional_expr_list_with_bracket -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 550: // optional_expr_list_with_bracket -> tkRoundOpen, optional_expr_list, + case 549: // optional_expr_list_with_bracket -> tkRoundOpen, optional_expr_list, // tkRoundClose { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } break; - case 551: // relop_expr -> simple_expr + case 550: // relop_expr -> simple_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 552: // relop_expr -> relop_expr, relop, simple_expr + case 551: // relop_expr -> relop_expr, relop, simple_expr { CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 553: // relop_expr -> relop_expr, tkMatching, simple_expr + case 552: // relop_expr -> relop_expr, tkMatching, simple_expr { CurrentSemanticValue.ex = new matching_expression(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 554: // format_expr -> simple_expr, tkColon, simple_expr + case 553: // format_expr -> simple_expr, tkColon, simple_expr { CurrentSemanticValue.ex = new format_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, null, CurrentLocationSpan); } break; - case 555: // format_expr -> simple_expr, tkColon, simple_expr, tkColon, simple_expr + case 554: // format_expr -> simple_expr, tkColon, simple_expr, tkColon, simple_expr { CurrentSemanticValue.ex = new format_expr(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 556: // relop -> tkEqual + case 555: // relop -> tkEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 557: // relop -> tkNotEqual + case 556: // relop -> tkNotEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 558: // relop -> tkLower + case 557: // relop -> tkLower { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 559: // relop -> tkGreater + case 558: // relop -> tkGreater { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 560: // relop -> tkLowerEqual + case 559: // relop -> tkLowerEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 561: // relop -> tkGreaterEqual + case 560: // relop -> tkGreaterEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 562: // relop -> tkIn + case 561: // relop -> tkIn { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 563: // simple_expr -> term + case 562: // simple_expr -> term { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 564: // simple_expr -> simple_expr, addop, term + case 563: // simple_expr -> simple_expr, addop, term { CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 565: // addop -> tkPlus + case 564: // addop -> tkPlus { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 566: // addop -> tkMinus + case 565: // addop -> tkMinus { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 567: // addop -> tkOr + case 566: // addop -> tkOr { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 568: // addop -> tkXor + case 567: // addop -> tkXor { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 569: // addop -> tkCSharpStyleOr + case 568: // addop -> tkCSharpStyleOr { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 570: // typecast_op -> tkAs + case 569: // typecast_op -> tkAs { CurrentSemanticValue.ob = op_typecast.as_op; } break; - case 571: // typecast_op -> tkIs + case 570: // typecast_op -> tkIs { CurrentSemanticValue.ob = op_typecast.is_op; } break; - case 572: // as_is_expr -> term, typecast_op, simple_or_template_type_reference + case 571: // as_is_expr -> term, typecast_op, simple_or_template_type_reference { CurrentSemanticValue.ex = NewAsIsExpr(ValueStack[ValueStack.Depth-3].ex, (op_typecast)ValueStack[ValueStack.Depth-2].ob, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); } break; - case 573: // term -> factor + case 572: // term -> factor { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 574: // term -> new_expr + case 573: // term -> new_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 575: // term -> term, mulop, factor + case 574: // term -> term, mulop, factor { CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex,ValueStack[ValueStack.Depth-1].ex,(ValueStack[ValueStack.Depth-2].op).type, CurrentLocationSpan); } break; - case 576: // term -> as_is_expr + case 575: // term -> as_is_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 577: // mulop -> tkStar + case 576: // mulop -> tkStar { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 578: // mulop -> tkSlash + case 577: // mulop -> tkSlash { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 579: // mulop -> tkDiv + case 578: // mulop -> tkDiv { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 580: // mulop -> tkMod + case 579: // mulop -> tkMod { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 581: // mulop -> tkShl + case 580: // mulop -> tkShl { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 582: // mulop -> tkShr + case 581: // mulop -> tkShr { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 583: // mulop -> tkAnd + case 582: // mulop -> tkAnd { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 584: // default_expr -> tkDefault, tkRoundOpen, simple_or_template_type_reference, + case 583: // default_expr -> tkDefault, tkRoundOpen, simple_or_template_type_reference, // tkRoundClose { CurrentSemanticValue.ex = new default_operator(ValueStack[ValueStack.Depth-2].td as named_type_reference, CurrentLocationSpan); } break; - case 585: // factor -> tkNil + case 584: // factor -> tkNil { CurrentSemanticValue.ex = new nil_const(); CurrentSemanticValue.ex.source_context = CurrentLocationSpan; } break; - case 586: // factor -> literal_or_number + case 585: // factor -> literal_or_number { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 587: // factor -> default_expr + case 586: // factor -> default_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 588: // factor -> tkSquareOpen, elem_list, tkSquareClose + case 587: // factor -> tkSquareOpen, elem_list, tkSquareClose { CurrentSemanticValue.ex = new pascal_set_constant(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); } break; - case 589: // factor -> tkNot, factor + case 588: // factor -> tkNot, factor { CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 590: // factor -> sign, factor + case 589: // factor -> sign, factor { CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 591: // factor -> tkDeref, factor + case 590: // factor -> tkDeref, factor { CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); } break; - case 592: // factor -> var_reference + case 591: // factor -> var_reference +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 592: // factor -> func_decl_lambda { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; case 593: // literal_or_number -> literal @@ -4838,7 +4838,7 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, expr, tkRoundClose { - if (!parsertools.build_tree_for_brackets) + if (!parsertools.build_tree_for_formatter) { ValueStack[ValueStack.Depth-2].ex.source_context = CurrentLocationSpan; CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; @@ -5389,9 +5389,12 @@ public partial class GPPGParser: ShiftReduceParser7) parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",LocationStack[LocationStack.Depth-4]); - CurrentSemanticValue.ex = new method_call(new dot_node("Tuple","Create"),ValueStack[ValueStack.Depth-5].stn as expression_list,CurrentLocationSpan); + if (parsertools.build_tree_for_formatter) + CurrentSemanticValue.ex = new tuple_node_for_formatter(ValueStack[ValueStack.Depth-5].stn as expression_list); + else + CurrentSemanticValue.ex = new method_call(new dot_node("Tuple","Create"),ValueStack[ValueStack.Depth-5].stn as expression_list,CurrentLocationSpan); } - else // It is a lambda-expression. Expressions must be identifiers. + else // It is a lambda-expression. Expressions in parameters must be identifiers. { var pair = ValueStack[ValueStack.Depth-1].ob as pair_type_stlist; diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index 5d4a00960..479bc2789 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -90,6 +90,13 @@ script= + + + + + + + diff --git a/Parsers/PascalABCParserNewSaushkin/Parser.cs b/Parsers/PascalABCParserNewSaushkin/Parser.cs index 498cfda0f..538d32c15 100644 --- a/Parsers/PascalABCParserNewSaushkin/Parser.cs +++ b/Parsers/PascalABCParserNewSaushkin/Parser.cs @@ -19,7 +19,7 @@ namespace PascalABCCompiler.PascalABCNewParser { private List Errs; private string FileName; - public bool build_tree_for_brackets = false; + public bool build_tree_for_formatter = false; public GPPGParserHelper(List Errs, string FileName) { @@ -47,7 +47,7 @@ namespace PascalABCCompiler.PascalABCNewParser scanner.parsertools = parsertools;// передали parsertools в объект сканера GPPGParser parser = new GPPGParser(scanner); - parsertools.build_tree_for_brackets = build_tree_for_brackets; + parsertools.build_tree_for_formatter = build_tree_for_formatter; parser.parsertools = parsertools; // передали parsertools в объект парсера if (!parser.Parse()) @@ -253,7 +253,7 @@ namespace PascalABCCompiler.PascalABCNewParser { Errors.Clear(); localparserhelper = new GPPGParserHelper(Errors, FileName); - localparserhelper.build_tree_for_brackets = true; + localparserhelper.build_tree_for_formatter = true; syntax_tree_node root = localparserhelper.Parse(Text); return root; } diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 4a933ea90..39dcc8271 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.0.0.1143' +!define VERSION '3.0.0.1145' diff --git a/SyntaxTree/tree/AbstractVisitor.cs b/SyntaxTree/tree/AbstractVisitor.cs index a0870557e..310ad4af2 100644 --- a/SyntaxTree/tree/AbstractVisitor.cs +++ b/SyntaxTree/tree/AbstractVisitor.cs @@ -1042,6 +1042,11 @@ namespace PascalABCCompiler.SyntaxTree { DefaultVisit(_addressed_value_list); } + + public virtual void visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + DefaultVisit(_tuple_node_for_formatter); + } } diff --git a/SyntaxTree/tree/HierarchyVisitor.cs b/SyntaxTree/tree/HierarchyVisitor.cs index 1334095a5..c532977c9 100644 --- a/SyntaxTree/tree/HierarchyVisitor.cs +++ b/SyntaxTree/tree/HierarchyVisitor.cs @@ -1661,6 +1661,14 @@ namespace PascalABCCompiler.SyntaxTree { } + public virtual void pre_do_visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + } + + public virtual void post_do_visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + } + public override void visit(syntax_tree_node _syntax_tree_node) { DefaultVisit(_syntax_tree_node); @@ -3439,6 +3447,14 @@ namespace PascalABCCompiler.SyntaxTree visit(addressed_value_list.variables[i]); post_do_visit(_addressed_value_list); } + + public override void visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + DefaultVisit(_tuple_node_for_formatter); + pre_do_visit(_tuple_node_for_formatter); + visit(tuple_node_for_formatter.el); + post_do_visit(_tuple_node_for_formatter); + } } diff --git a/SyntaxTree/tree/SyntaxTreeStreamReader.cs b/SyntaxTree/tree/SyntaxTreeStreamReader.cs index 4a40af2a1..50a697801 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamReader.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamReader.cs @@ -434,6 +434,8 @@ namespace PascalABCCompiler.SyntaxTree return new assign_tuple(); case 206: return new addressed_value_list(); + case 207: + return new tuple_node_for_formatter(); } return null; } @@ -3678,6 +3680,18 @@ namespace PascalABCCompiler.SyntaxTree } } + + public void visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + read_tuple_node_for_formatter(_tuple_node_for_formatter); + } + + public void read_tuple_node_for_formatter(tuple_node_for_formatter _tuple_node_for_formatter) + { + read_expression(_tuple_node_for_formatter); + _tuple_node_for_formatter.el = _read_node() as expression_list; + } + } diff --git a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs index 5f7a35696..3d87d5ec1 100644 --- a/SyntaxTree/tree/SyntaxTreeStreamWriter.cs +++ b/SyntaxTree/tree/SyntaxTreeStreamWriter.cs @@ -5776,6 +5776,27 @@ namespace PascalABCCompiler.SyntaxTree } } + + public void visit(tuple_node_for_formatter _tuple_node_for_formatter) + { + bw.Write((Int16)207); + write_tuple_node_for_formatter(_tuple_node_for_formatter); + } + + public void write_tuple_node_for_formatter(tuple_node_for_formatter _tuple_node_for_formatter) + { + write_expression(_tuple_node_for_formatter); + if (_tuple_node_for_formatter.el == null) + { + bw.Write((byte)0); + } + else + { + bw.Write((byte)1); + _tuple_node_for_formatter.el.visit(this); + } + } + } diff --git a/SyntaxTree/tree/Tree.cs b/SyntaxTree/tree/Tree.cs index 82ca8f9a1..00f18119a 100644 --- a/SyntaxTree/tree/Tree.cs +++ b/SyntaxTree/tree/Tree.cs @@ -27275,6 +27275,117 @@ namespace PascalABCCompiler.SyntaxTree } + /// + /// + /// + [Serializable] + public partial class tuple_node_for_formatter : expression + { + + /// + ///Конструктор без параметров. + /// + public tuple_node_for_formatter() + { + + } + + /// + ///Конструктор с параметрами. + /// + public tuple_node_for_formatter(expression_list _el) + { + this._el=_el; + } + + /// + ///Конструктор с параметрами. + /// + public tuple_node_for_formatter(expression_list _el,SourceContext sc) + { + this._el=_el; + source_context = sc; + } + + protected expression_list _el; + + /// + /// + /// + public expression_list el + { + get + { + return _el; + } + set + { + _el=value; + } + } + + + /// + ///Свойство для получения количества всех подузлов без элементов поля типа List + /// + public override Int32 subnodes_without_list_elements_count + { + get + { + return 1; + } + } + /// + ///Свойство для получения количества всех подузлов. Подузлом также считается каждый элемент поля типа List + /// + public override Int32 subnodes_count + { + get + { + return 1; + } + } + /// + ///Индексатор для получения всех подузлов + /// + public override syntax_tree_node this[Int32 ind] + { + get + { + if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1) + throw new IndexOutOfRangeException(); + switch(ind) + { + case 0: + return el; + } + return null; + } + set + { + if(subnodes_count == 0 || ind < 0 || ind > subnodes_count-1) + throw new IndexOutOfRangeException(); + switch(ind) + { + case 0: + el = (expression_list)value; + break; + } + } + } + /// + ///Метод для обхода дерева посетителем + /// + ///Объект-посетитель. + ///Return value is void + public override void visit(IVisitor visitor) + { + visitor.visit(this); + } + + } + + } diff --git a/SyntaxTree/tree/Visitor.cs b/SyntaxTree/tree/Visitor.cs index c76ff3b35..3e30e3f66 100644 --- a/SyntaxTree/tree/Visitor.cs +++ b/SyntaxTree/tree/Visitor.cs @@ -1246,6 +1246,12 @@ namespace PascalABCCompiler.SyntaxTree ///Node to visit /// Return value is void void visit(addressed_value_list _addressed_value_list); + /// + ///Method to visit tuple_node_for_formatter. + /// + ///Node to visit + /// Return value is void + void visit(tuple_node_for_formatter _tuple_node_for_formatter); } diff --git a/SyntaxTree/tree/tree.nin b/SyntaxTree/tree/tree.nin index 6aab6a302..9137d4eaf 100644 Binary files a/SyntaxTree/tree/tree.nin and b/SyntaxTree/tree/tree.nin differ diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index 30d4f0a5d..659060f3c 100644 Binary files a/bin/Lib/PABCRtl.dll and b/bin/Lib/PABCRtl.dll differ