diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index 81592b627..efd10f925 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: DESKTOP-G8V08V4 -// DateTime: 24.11.2018 8:10:22 +// DateTime: 01.12.2018 12:55:41 // UserName: ????????? // GPLEX input file // GPLEX frame file diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index 9dc1bcec9..6a2025d4e 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -24,6 +24,7 @@ %using PascalABCCompiler.ParserTools; %using PascalABCCompiler.Errors; %using System.Linq; +%using SyntaxVisitors; %namespace GPPGParserScanner @@ -4524,7 +4525,11 @@ common_lambda_body lambda_function_body : expr_l1 { - //$$ = NewLambdaBody($1, @$); + var id = SyntaxVisitors.ExprHasNameVisitor.HasName($1, "Result"); + if (id != null) + { + parsertools.AddErrorFromResource("RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT", id.source_context); + } var sl = new statement_list(new assign("result",$1,@$),@$); // assign - Result sl.expr_lambda_body = true; $$ = sl; diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index 633986eaf..7a9bf87ee 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,7 +2,7 @@ // GPPG version 1.3.6 // Machine: DESKTOP-G8V08V4 -// DateTime: 24.11.2018 8:10:22 +// DateTime: 01.12.2018 12:55:41 // UserName: ????????? // Input file @@ -18,6 +18,7 @@ using PascalABCSavParser; using PascalABCCompiler.ParserTools; using PascalABCCompiler.Errors; using System.Linq; +using SyntaxVisitors; namespace GPPGParserScanner { @@ -6773,8 +6774,12 @@ public partial class GPPGParser: ShiftReduceParser expr_l1 { - //$$ = NewLambdaBody($1, @$); - var sl = new statement_list(new assign("result",ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan),CurrentLocationSpan); // ���� �������� ��� � assign ��� ������������������� ��� ������ + /*var id = SyntaxVisitors.ExprHasNameVisitor.HasName(ValueStack[ValueStack.Depth-1].ex, "Result"); + if (id != null) + { + parsertools.AddErrorFromResource("RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT", id.source_context); + }*/ + var sl = new statement_list(new assign("result",ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan),CurrentLocationSpan); // ���� �������� ��� � assign ��� ������������������� ��� ������ - ����� ��������� ����� Result sl.expr_lambda_body = true; CurrentSemanticValue.stn = sl; } diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index 4ffc922ca..5ab3edda1 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -235,5 +235,6 @@ script= + diff --git a/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj b/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj index dea9ae361..9eeb4ca67 100644 --- a/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj +++ b/Parsers/PascalABCParserNewSaushkin/PascalABCSaushkinParser.csproj @@ -126,14 +126,14 @@ {AF2EFD7B-69DD-4B43-AF65-B59B29349C23} ParserTools - - {613e0dda-aa8a-437c-ac45-507b47429ff9} - SemanticTree - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A} SyntaxTree + + {a9ab4282-83b4-41a7-86c3-e5bf6a45e7e2} + SyntaxVisitors + {1c9c945a-586d-42a2-a06b-65d84fa7ff78} TreeConverter diff --git a/SyntaxVisitors/BaseVisitors/SmallHelperVisitors.cs b/SyntaxVisitors/BaseVisitors/SmallHelperVisitors.cs index 6aeed0b4e..345e53679 100644 --- a/SyntaxVisitors/BaseVisitors/SmallHelperVisitors.cs +++ b/SyntaxVisitors/BaseVisitors/SmallHelperVisitors.cs @@ -53,15 +53,21 @@ namespace SyntaxVisitors public class ExprHasNameVisitor : WalkingVisitorNew // есть ли в выражении переменная с данным именем (не включая вложенные лямбды) (используется для поиска Result) { private string varname; - public bool Has = false; + public ident id = null; + public static ident HasName(expression ex, string varname) + { + var v = new ExprHasNameVisitor(varname); + v.ProcessNode(ex); + return v.id; + } public ExprHasNameVisitor(string varname) { this.varname = varname.ToLower(); } - public override void visit(ident id) + public override void visit(ident i) { - if (id.name.ToLower() == varname) - Has = true; + if (i.name.ToLower() == varname) + id = i; } public override void visit(dot_node dn) { diff --git a/SyntaxVisitors/SyntaxVisitors.csproj b/SyntaxVisitors/SyntaxVisitors.csproj index fdb80c62a..695908b45 100644 --- a/SyntaxVisitors/SyntaxVisitors.csproj +++ b/SyntaxVisitors/SyntaxVisitors.csproj @@ -37,8 +37,6 @@ - - diff --git a/bin/Lng/Eng/PascalABCParser.dat b/bin/Lng/Eng/PascalABCParser.dat index 7b54ae781..e9f943d25 100644 --- a/bin/Lng/Eng/PascalABCParser.dat +++ b/bin/Lng/Eng/PascalABCParser.dat @@ -69,4 +69,5 @@ BAD_INT2=Too small int64 INVALID_INTERFACE_MEMBER=Interface members cannot have definitions EXTENDED_INDEXED_PROPERTIES=Extended indexed properties are not realized ATTRIBUTE_REDECLARED=This attribute has been already applied to type -STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Static properties cannot have attribute '{0}' \ No newline at end of file +STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Static properties cannot have attribute '{0}' +RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT=Result identifier is not allowed in this context \ No newline at end of file diff --git a/bin/Lng/Rus/PascalABCParser.dat b/bin/Lng/Rus/PascalABCParser.dat index 2ca8f1788..ae1f331b2 100644 --- a/bin/Lng/Rus/PascalABCParser.dat +++ b/bin/Lng/Rus/PascalABCParser.dat @@ -70,4 +70,5 @@ INVALID_INTERFACE_MEMBER=Члены интерфейса не могут име EXTENDED_INDEXED_PROPERTIES=Индексные свойства не могут быть расширенными TWO_STRING_LITERALS_IN_SUCCESSION=Две литеральные строковые константы не могут стоять подряд ATTRIBUTE_REDECLARED=Повторное применение атрибута -STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Статические свойства не могут иметь атрибут '{0}' \ No newline at end of file +STATIC_PROPERTIES_CANNOT_HAVE_ATTRBUTE_{0}=Статические свойства не могут иметь атрибут '{0}' +RESULT_IDENT_NOT_EXPECTED_IN_THIS_CONTEXT=Имя Result недопустимо в этом контексте \ No newline at end of file