From 7fc176f8540d016c058444efb6f69833875dc863 Mon Sep 17 00:00:00 2001 From: Mikhalkovich Stanislav Date: Fri, 2 Jan 2026 12:16:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20=5FParse?= =?UTF-8?q?PABC1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _ParsePABC1/ParsePABC1.sln | 40 --- _ParsePABC1/ParsePABC1/App.config | 6 - .../BaseVisitors/BaseChangeVisitor.cs | 78 ------ .../BaseVisitors/BaseEnterExitVisitor.cs | 27 -- .../BaseVisitors/CollectNamespaces.cs | 61 ----- .../BaseVisitors/CollectUpperNodesVisitor.cs | 39 --- _ParsePABC1/ParsePABC1/ProgramOld.cs | 62 ----- .../ParsePABC1/Properties/AssemblyInfo.cs | 36 --- .../UniversalVisitors/CountNodesVisitor.cs | 44 --- .../DeleteRedundantBeginEnds.cs | 36 --- .../SimplePrettyPrinterVisitor.cs | 209 --------------- .../YieldVisitors/DeleteAllLocalDefs.cs | 43 --- .../YieldVisitors/DeleteLocalDefs.cs | 72 ----- .../YieldVisitors/LoweringVisitor.cs | 93 ------- .../ProcessYieldsCapturedVars.cs | 250 ------------------ _ParsePABC1/a.pas | 15 -- _ParsePABC1/b.pas | 15 -- _ParsePABC1/c.pas | 7 - _ParsePABC1/c1.pas | 4 - _ParsePABC1/d.pas | 10 - _ParsePABC1/e.pas | 22 -- _ParsePABC1/e2.pas | 8 - _ParsePABC1/ex1.pas | 3 - _ParsePABC1/ex2.pas | 3 - _ParsePABC1/f.pas | 40 --- _ParsePABC1/f1.pas | 21 -- _ParsePABC1/f2.pas | 8 - _ParsePABC1/yield1.pas | 11 - _ParsePABC1/yield2.pas | 16 -- 29 files changed, 1279 deletions(-) delete mode 100644 _ParsePABC1/ParsePABC1.sln delete mode 100644 _ParsePABC1/ParsePABC1/App.config delete mode 100644 _ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs delete mode 100644 _ParsePABC1/ParsePABC1/BaseVisitors/CollectUpperNodesVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/ProgramOld.cs delete mode 100644 _ParsePABC1/ParsePABC1/Properties/AssemblyInfo.cs delete mode 100644 _ParsePABC1/ParsePABC1/UniversalVisitors/CountNodesVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/UniversalVisitors/DeleteRedundantBeginEnds.cs delete mode 100644 _ParsePABC1/ParsePABC1/UniversalVisitors/SimplePrettyPrinterVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs delete mode 100644 _ParsePABC1/ParsePABC1/YieldVisitors/DeleteLocalDefs.cs delete mode 100644 _ParsePABC1/ParsePABC1/YieldVisitors/LoweringVisitor.cs delete mode 100644 _ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs delete mode 100644 _ParsePABC1/a.pas delete mode 100644 _ParsePABC1/b.pas delete mode 100644 _ParsePABC1/c.pas delete mode 100644 _ParsePABC1/c1.pas delete mode 100644 _ParsePABC1/d.pas delete mode 100644 _ParsePABC1/e.pas delete mode 100644 _ParsePABC1/e2.pas delete mode 100644 _ParsePABC1/ex1.pas delete mode 100644 _ParsePABC1/ex2.pas delete mode 100644 _ParsePABC1/f.pas delete mode 100644 _ParsePABC1/f1.pas delete mode 100644 _ParsePABC1/f2.pas delete mode 100644 _ParsePABC1/yield1.pas delete mode 100644 _ParsePABC1/yield2.pas diff --git a/_ParsePABC1/ParsePABC1.sln b/_ParsePABC1/ParsePABC1.sln deleted file mode 100644 index 5f39f6e2b..000000000 --- a/_ParsePABC1/ParsePABC1.sln +++ /dev/null @@ -1,40 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25123.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxVisitors", "ParsePABC1\SyntaxVisitors.csproj", "{BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTree", "..\SyntaxTree\SyntaxTree.csproj", "{C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YieldDesugarTest", "YieldDesugarTest\YieldDesugarTest.csproj", "{9EBC62C6-3092-4E9D-940E-476D332E0951}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SyntaxTreeChanger", "..\SyntaxTreeChanger\SyntaxTreeChanger.csproj", "{F10A5330-DCF4-4533-877C-7B1B1BE23884}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAA767F1-6544-4A44-BA17-5FBFCF6F2D99}.Release|Any CPU.Build.0 = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2CAC65A-B2AE-4CCC-B067-E6B8E75DF73A}.Release|Any CPU.Build.0 = Release|Any CPU - {9EBC62C6-3092-4E9D-940E-476D332E0951}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9EBC62C6-3092-4E9D-940E-476D332E0951}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9EBC62C6-3092-4E9D-940E-476D332E0951}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9EBC62C6-3092-4E9D-940E-476D332E0951}.Release|Any CPU.Build.0 = Release|Any CPU - {F10A5330-DCF4-4533-877C-7B1B1BE23884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F10A5330-DCF4-4533-877C-7B1B1BE23884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F10A5330-DCF4-4533-877C-7B1B1BE23884}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F10A5330-DCF4-4533-877C-7B1B1BE23884}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/_ParsePABC1/ParsePABC1/App.config b/_ParsePABC1/ParsePABC1/App.config deleted file mode 100644 index 74ade9db5..000000000 --- a/_ParsePABC1/ParsePABC1/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs deleted file mode 100644 index 14b105368..000000000 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseChangeVisitor.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class BaseChangeVisitor : CollectUpperNodesVisitor - { - public override void DefaultVisit(syntax_tree_node n) - { - // Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими) - var Сount = n.subnodes_count; - var СountWithoutListElements = n.subnodes_without_list_elements_count; - - for (var i = 0; i < СountWithoutListElements; i++) - ProcessNode(n[i]); - - for (var i = Сount - 1; i >= СountWithoutListElements; i--) // в обратном порядке - ProcessNode(n[i]); - } - - public void Replace(syntax_tree_node from, syntax_tree_node to) - { - var upper = UpperNode(); - if (upper == null) - throw new Exception("У корневого элемента нельзя получить UpperNode"); - upper.Replace(from, to); - } - - public T UpperNodeAs(int up = 1) where T : syntax_tree_node - { - var stl = UpperNode(up) as T; - if (stl == null) - throw new Exception("Элемент вложен не в " + typeof(T)); - return stl; - } - - public bool DeleteInIdentList(ident id) - { - var idl = UpperNodeAs(); - return idl.Remove(id); - } - - public bool DeleteInStatementList(statement st) - { - var stl = UpperNodeAs(); - return stl.Remove(st); - } - - public static IEnumerable SeqStatements(params statement[] seq) - { - var l = new List(); - foreach (var st in seq) - if (st is statement_list) - l.AddRange((st as statement_list).list); - else l.Add(st); - return l; - } - - public void ReplaceStatement(statement from, statement to) - { - var stl = UpperNodeAs(); - stl.Replace(from, to); - } - - public void ReplaceStatement(statement from, IEnumerable to) - { - var stl = UpperNodeAs(); - stl.Replace(from, to); - } - } - -} diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs deleted file mode 100644 index 946de80a7..000000000 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/BaseEnterExitVisitor.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class BaseEnterExitVisitor : WalkingVisitorNew - { - public BaseEnterExitVisitor() - { - OnEnter = Enter; - OnLeave = Exit; - } - - public virtual void Enter(syntax_tree_node st) - { - } - public virtual void Exit(syntax_tree_node st) - { - } - } -} diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs deleted file mode 100644 index d9147f283..000000000 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectNamespaces.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class CollectUpperNamespacesVisitor : CollectUpperNodesVisitor - { - protected List list = new List(); - - public bool PrintInfo = true; - - public override void Enter(syntax_tree_node st) - { - base.Enter(st); - if (st is procedure_definition || st is class_definition) - { - list.Add(st as declaration); - if (PrintInfo) - Console.Write("+: "+st.GetType().Name); - } - } - public override void Exit(syntax_tree_node st) - { - if (st is procedure_definition || st is class_definition) - { - if (PrintInfo) - Console.WriteLine("-: " + st.GetType().Name); - list.RemoveAt(list.Count - 1); - } - base.Exit(st); - } - - public override void visit(procedure_definition p) - { - if (PrintInfo) - Console.WriteLine(" " + p.proc_header.name.meth_name); - - var ld = new FindLocalDefsVisitor(); - p.visit(ld); - - base.visit(p); - } - public override void visit(class_definition cl) - { - type_declarations tds = UpperNode(2) as type_declarations; - if (PrintInfo) - { - var f = tds.types_decl.Find(td => td.type_def == cl); - Console.WriteLine(" " + f.type_name); - } - base.visit(cl); - } - } - -} diff --git a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectUpperNodesVisitor.cs b/_ParsePABC1/ParsePABC1/BaseVisitors/CollectUpperNodesVisitor.cs deleted file mode 100644 index 687007b6a..000000000 --- a/_ParsePABC1/ParsePABC1/BaseVisitors/CollectUpperNodesVisitor.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class CollectUpperNodesVisitor : BaseEnterExitVisitor - { - protected List listNodes = new List(); - - public syntax_tree_node CurrentNode - { - get - { - return listNodes[listNodes.Count - 1]; - } - } - - public syntax_tree_node UpperNode(int up = 1) - { - return listNodes[listNodes.Count - 1 - up]; - } - - public override void Enter(syntax_tree_node st) - { - listNodes.Add(st); - } - public override void Exit(syntax_tree_node st) - { - listNodes.RemoveAt(listNodes.Count - 1); - } - } - -} diff --git a/_ParsePABC1/ParsePABC1/ProgramOld.cs b/_ParsePABC1/ParsePABC1/ProgramOld.cs deleted file mode 100644 index 651d8d97a..000000000 --- a/_ParsePABC1/ParsePABC1/ProgramOld.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler.Errors; -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace ParsePABC1 -{ - class Program - { - static syntax_tree_node ParseFile(string fname) - { - Compiler c = new Compiler(); - - var err = new List(); - - var txt = System.IO.File.ReadAllText(fname); - - var cu = c.ParsersController.Compile(fname, txt, err, PascalABCCompiler.Parsers.ParseMode.ForFormatter); - - if (cu == null) - { - Console.WriteLine("Не распарсилось"); - } - return cu; - } - - static void Main(string[] args) - { - var cu = ParseFile(@"d:\w5\e.pas"); - if (cu == null) - return; - - //CodeFormatters.CodeFormatter cf = new CodeFormatters.CodeFormatter(0); - //txt = cf.FormatTree(txt, cu as compilation_unit, 0, 0); - - cu.visit(new ChangeWhileVisitor()); - cu.visit(new DeleteRedundantBeginEnds()); - - /*cu.visit(new CollectUpperNamespacesVisitor()); - - var allv = new AllVarsInProcYields(); - cu.visit(allv); - allv.PrintDict();*/ - - /*var cnt = new CountNodesVisitor(); - cu.visit(cnt); - cnt.PrintSortedByValue();*/ - - var ld = new List(); - ld.Add("p1"); - var dld = new DeleteLocalDefs(ld); - cu.visit(dld); - - cu.visit(new SimplePrettyPrinterVisitor()); - } - } -} diff --git a/_ParsePABC1/ParsePABC1/Properties/AssemblyInfo.cs b/_ParsePABC1/ParsePABC1/Properties/AssemblyInfo.cs deleted file mode 100644 index 624a2bb1d..000000000 --- a/_ParsePABC1/ParsePABC1/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("ParsePABC1")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ParsePABC1")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("fa30eefc-3fcc-45a3-8b6f-465b1a5c17ba")] - -// Сведения о версии сборки состоят из следующих четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/_ParsePABC1/ParsePABC1/UniversalVisitors/CountNodesVisitor.cs b/_ParsePABC1/ParsePABC1/UniversalVisitors/CountNodesVisitor.cs deleted file mode 100644 index 926290f80..000000000 --- a/_ParsePABC1/ParsePABC1/UniversalVisitors/CountNodesVisitor.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class CountNodesVisitor : BaseEnterExitVisitor - { - public Dictionary d = new Dictionary(); - - public int exprcount,statcount; - public override void Enter(syntax_tree_node st) - { - if (d.ContainsKey(st.GetType())) - d[st.GetType()] += 1; - else d[st.GetType()] = 1; - if (st is expression) - exprcount++; - if (st is statement) - statcount++; - } - - public void PrintSortedByValue() - { - var q = d.Select(x => new { x.Key, x.Value }).OrderByDescending(y => y.Value); - foreach (var a in q) - Console.WriteLine("{0}: {1} ", a.Key.Name, a.Value); - Console.WriteLine(); - Console.WriteLine("Expressions Count: {0}", exprcount); - Console.WriteLine("Statements Count: {0}", statcount); - } - - public void Print() - { - foreach (var a in d) - Console.WriteLine("{0}: {1} ", a.Key.Name, a.Value); - } - } -} diff --git a/_ParsePABC1/ParsePABC1/UniversalVisitors/DeleteRedundantBeginEnds.cs b/_ParsePABC1/ParsePABC1/UniversalVisitors/DeleteRedundantBeginEnds.cs deleted file mode 100644 index f77116c23..000000000 --- a/_ParsePABC1/ParsePABC1/UniversalVisitors/DeleteRedundantBeginEnds.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler.Errors; -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class DeleteRedundantBeginEnds : BaseChangeVisitor - { - public override void Exit(syntax_tree_node st) - { - var stl = st as statement_list; - if (stl != null && UpperNode() is statement_list) - ReplaceStatement(stl, stl.subnodes); - - var lst = st as labeled_statement; - if (lst != null) - { - var sttl = lst.to_statement as statement_list; - if (sttl != null) - { - sttl.subnodes[0] = new labeled_statement(lst.label_name, sttl.subnodes[0]); // а если [0] элемента вообще нет? - ReplaceStatement(lst,sttl.subnodes); - } - } - - base.Exit(st); - } - - } -} diff --git a/_ParsePABC1/ParsePABC1/UniversalVisitors/SimplePrettyPrinterVisitor.cs b/_ParsePABC1/ParsePABC1/UniversalVisitors/SimplePrettyPrinterVisitor.cs deleted file mode 100644 index dfab440f9..000000000 --- a/_ParsePABC1/ParsePABC1/UniversalVisitors/SimplePrettyPrinterVisitor.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler.Errors; -using PascalABCCompiler.PCU; -using PascalABCCompiler.SemanticTreeConverters; -using System.CodeDom.Compiler; -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - - -namespace SyntaxVisitors -{ - public class SimplePrettyPrinterVisitor : WalkingVisitorNew - { - int off = 0; - - bool printNodeType = false; - - public static SimplePrettyPrinterVisitor New - { - get { return new SimplePrettyPrinterVisitor(); } - } - - public SimplePrettyPrinterVisitor() - { - OnEnter = Enter; - OnLeave = Exit; - } - - public void Println(string s) - { - Console.Write(new string(' ', off)); - Console.WriteLine(s); - } - public void Print(string s) - { - Console.Write(new string(' ', off)); - Console.Write(s); - } - public void PrintNoOffset(string s) - { - Console.Write(s); - } - public void PrintlnNoOffset(string s) - { - Console.WriteLine(s); - } - - public void PrintlnNode(syntax_tree_node st) - { - if (printNodeType) - Console.Write(st.GetType().Name + ": "); - Console.WriteLine(new string(' ', off)+st); - } - public virtual void Enter(syntax_tree_node st) - { - if (st is statement_list) - { - Println("begin"); - off += 2; - } - else if (st is type_declarations) // надо в visit и самому всё обрабатывать - { - var tds = st is type_declarations; - Println("type "); - off += 2; - } - else if (st is case_variant) - { - var td = st as case_variant; - Println(td.conditions.ToString()+": "); - off += 2; - //ProcessNode(td.type_def); - //visitNode = false; - } - else if (st is type_declaration) - { - var td = st as type_declaration; - Print(td.type_name + " = "); - ProcessNode(td.type_def); - visitNode = false; - } - else if (st is class_definition) - { - var cd = st as class_definition; - PrintNoOffset("class"); - if (cd.class_parents != null && cd.class_parents.types.Count > 0) - { - PrintlnNoOffset("(" + cd.class_parents.ToString() + ")"); - } - else - PrintlnNoOffset(""); - off += 2; - ProcessNode(cd.body); - visitNode = false; - } - else if (st is access_modifer_node) - { - var am = st as access_modifer_node; - Println(am.access_level.ToString()); - - } - else if (st is variable_definitions) - { - var vds = st as variable_definitions; - Println("var"); - off += 2; - } - else if (st is var_def_statement) - { - var vds = st as var_def_statement; - Println(vds.ToString()); - } - else if (st is empty_statement || st is declarations || st is block || st is class_body || st is class_members || st is case_variants || st is program_module) - { - } - else if (st is if_node) - { - var ifn = st as if_node; - - Println("if " + ifn.condition.ToString() + " then"); - off += 2; - ProcessNode(ifn.then_body); - if (ifn.else_body == null) - { - visitNode = false; - return; - } - off -= 2; - Println("else "); - off += 2; - ProcessNode(ifn.else_body); - visitNode = false; - } - else if (st is while_node) - { - var wn = st as while_node; - - Println("while " + wn.expr.ToString() + " do"); - off += 2; - } - else if (st is case_node) - { - var cn = st as case_node; - - Println("case " + cn.param.ToString() + " of"); - off += 2; - } - else if (st is labeled_statement) - { - var lst = st as labeled_statement; - - Println(lst.label_name.name + ": "); - ProcessNode(lst.to_statement); - visitNode = false; - } - else if (st is var_statement || st is procedure_header) - { - Println(st.ToString()); - visitNode = false; - } - else if (st is procedure_definition) - { - Println(""); - } - else if (st is statement || st is variable_definitions || st is label_definitions) - { - PrintlnNode(st); - if (st is labeled_statement) - visitNode = false; - } - else if (st is token_info) - { - var s = st.ToString(); - if (s == "begin" || s == "end") - return; - PrintlnNode(st); - } - else - { - var q = st.GetType().GetMethod("ToString", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly); - if (q == null) - Println(st.GetType().Name); - } - } - public virtual void Exit(syntax_tree_node st) - { - if (st is statement_list) - { - off -= 2; - Println("end"); - } - else if (st is while_node || st is if_node || st is type_declarations || st is variable_definitions || st is case_variant) - { - off -= 2; - } - else if (st is class_definition || st is case_node) - { - off -= 2; - Println("end;"); - } - } - - } -} diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs deleted file mode 100644 index be4336a69..000000000 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteAllLocalDefs.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class DeleteAllLocalDefs : BaseChangeVisitor - { - public List LocalDeletedDefs = new List(); // все локальные описания - public HashSet LocalDeletedDefsNames = new HashSet(); // их имена - для быстрого поиска - - public DeleteAllLocalDefs() // надо запускать этот визитор начиная с корня подпрограммы - { - } - - public override void visit(var_statement vs) // локальные описания внутри процедуры - { - LocalDeletedDefs.Add(vs.var_def); - DeleteInStatementList(vs); - - LocalDeletedDefsNames.UnionWith(vs.var_def.vars.idents.Select(id => id.name)); - } - - public override void visit(variable_definitions vd) - { - foreach (var v in vd.list) - { - LocalDeletedDefs.Add(v); - LocalDeletedDefsNames.UnionWith(v.vars.idents.Select(id => id.name)); - } - var d = UpperNodeAs(); - d.defs.Remove(vd); // может ли остаться список declarations пустым? - } - - // еще - не заходить в лямбды - - } -} diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteLocalDefs.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteLocalDefs.cs deleted file mode 100644 index 7bf83b84b..000000000 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/DeleteLocalDefs.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class DeleteLocalDefs : BaseChangeVisitor - { - public List LocalDeletedIds = new List(); - public List BlockDeletedIds = new List(); - public HashSet idsToDelete; - public HashSet deletedIdsToDeleteInLocalScope = new HashSet(); // одно множество и на Local и на Block - - public DeleteLocalDefs(HashSet ids) // надо запускать этот визитор начиная с корня подпрограммы - { - idsToDelete = ids; - } - public override void visit(var_statement vs) - { - var idents = vs.var_def.vars.idents; - - var IdentsToDeleteInVarDef = idents.FindAll(id => idsToDelete.Contains(id.name)); // найти в операторе все идентификаторы для удаления - if (IdentsToDeleteInVarDef.Count != 0) - { - deletedIdsToDeleteInLocalScope.UnionWith(IdentsToDeleteInVarDef.Select(id => id.name)); // добавить те идентификаторы, которые мы удаляем из данного описания - - LocalDeletedIds.Add(new var_def_statement(new ident_list(IdentsToDeleteInVarDef), vs.var_def.vars_type, vs.var_def.inital_value)); // добавить описание из удаленных в данном разделе описаний идентификаторов - idents.RemoveAll(id => idsToDelete.Contains(id.name)); // удалить в операторе все идентификаторы для удаления - - idsToDelete.ExceptWith(deletedIdsToDeleteInLocalScope); - - if (idents.Count == 0) // то и весь var_statement надо убить - this.DeleteInStatementList(vs); - } - // Здесь мы не обрабатываем вложенный var_def_statement, поэтому когда мы будем обрабатывать его в другом visit, то это будут переменные до beginа подпрограммы или основной программы - } - public override void visit(var_def_statement vd) - { - var idents = vd.vars.idents; - - var IdentsToDeleteInVarDef = idents.FindAll(id => idsToDelete.Contains(id.name)); // найти в операторе все идентификаторы для удаления - if (IdentsToDeleteInVarDef.Count != 0) - { - deletedIdsToDeleteInLocalScope.UnionWith(IdentsToDeleteInVarDef.Select(id => id.name)); // добавить те идентификаторы, которые мы удаляем из данного описания - - BlockDeletedIds.Add(new var_def_statement(new ident_list(IdentsToDeleteInVarDef), vd.vars_type, vd.inital_value)); // добавить описание из удаленных в данном разделе описаний идентификаторов - idents.RemoveAll(id => idsToDelete.Contains(id.name)); // удалить в операторе все идентификаторы для удаления - - if (idents.Count == 0) - { - // Выше - variable_definitions, еще выше - declarations - var uvdsl = UpperNodeAs(); - uvdsl.var_definitions.Remove(vd); - if (uvdsl.var_definitions.Count == 0) - { - var d = UpperNodeAs(2); - d.defs.Remove(uvdsl); - } - } - } - } - public void AfterProcTraverse() - { - idsToDelete.ExceptWith(deletedIdsToDeleteInLocalScope); // исключаем из множества удаляемых идентификаторов те, которые мы нашли и удалили в секции var_statement. Это надо делать не для каждого описания, а в конце подпрограммы после удаления из всех секций var_statement - } - } -} diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/LoweringVisitor.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/LoweringVisitor.cs deleted file mode 100644 index 4d954c22c..000000000 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/LoweringVisitor.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler.Errors; -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -namespace SyntaxVisitors -{ - public class LoweringVisitor : BaseChangeVisitor - { - public static LoweringVisitor New - { - get { return new LoweringVisitor(); } - } - - int varnum = 0; - - public string newVarName() - { - varnum++; - return "<>varLV" + varnum.ToString(); - } - - public static void Accept(procedure_definition pd) - { - New.ProcessNode(pd); - } - - public override void Enter(syntax_tree_node st) - { - base.Enter(st); - if (!(st is procedure_definition || st is block || st is statement_list || st is case_node || st is for_node || st is foreach_stmt || st is if_node || st is repeat_node || st is while_node || st is with_statement || st is try_stmt || st is lock_stmt)) - { - visitNode = false; - } - } - - public override void visit(while_node wn) - { - ProcessNode(wn.statements); - var b = HasStatementVisitor.Has(wn); - if (!b) - return; - - var gt1 = goto_statement.New; - var gt2 = goto_statement.New; - - var if0 = new if_node(un_expr.Not(wn.expr), gt1); - var lb2 = new labeled_statement(gt2.label, if0); - var lb1 = new labeled_statement(gt1.label); - - ReplaceStatement(wn, SeqStatements(lb2, wn.statements, gt2, lb1)); - - // в declarations ближайшего блока добавить описание labels - block bl = listNodes.FindLast(x => x is block) as block; - - bl.defs.Add(new label_definitions(gt1.label, gt2.label)); - } - - public override void visit(for_node fn) - { - ProcessNode(fn.statements); - var b = HasStatementVisitor.Has(fn); - if (!b) - return; - - var gt1 = goto_statement.New; - var gt2 = goto_statement.New; - - var endtemp = new ident(newVarName()); - var ass1 = new var_statement(fn.loop_variable, fn.type_name, fn.initial_value); - var ass2 = new var_statement(endtemp, fn.type_name, fn.finish_value); - - - var if0 = new if_node(bin_expr.Greater(fn.loop_variable, fn.finish_value), gt1); - var lb2 = new labeled_statement(gt2.label, if0); - var lb1 = new labeled_statement(gt1.label); - var Inc = new procedure_call(new method_call(new ident("Inc"),new expression_list(fn.loop_variable))); - - ReplaceStatement(fn, SeqStatements(ass1,ass2,lb2, fn.statements, Inc, gt2, lb1)); - - // в declarations ближайшего блока добавить описание labels - block bl = listNodes.FindLast(x => x is block) as block; - - bl.defs.Add(new label_definitions(gt1.label, gt2.label)); - } - } - -} diff --git a/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs b/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs deleted file mode 100644 index 8c9b57860..000000000 --- a/_ParsePABC1/ParsePABC1/YieldVisitors/ProcessYieldsCapturedVars.cs +++ /dev/null @@ -1,250 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -using PascalABCCompiler; -using PascalABCCompiler.SyntaxTree; - -using PascalABCCompiler.ParserTools; -using PascalABCCompiler.Errors; - - -namespace SyntaxVisitors -{ - public static class Consts - { - public static string Current = "<>current"; - public static string State = "<>state"; - } - - public class ProcessYieldCapturedVarsVisitor : BaseChangeVisitor - { - int clnum = 0; - - public string newClassName() - { - clnum++; - return "clyield#" + clnum.ToString(); - } - - public FindMainIdentsVisitor mids; // захваченные переменные процедуры по всем её yield - - public int countNodesVisited; - - public bool hasYields = false; - - public static ProcessYieldCapturedVarsVisitor New - { - get { return new ProcessYieldCapturedVarsVisitor(); } - } - - public ProcessYieldCapturedVarsVisitor() - { - //PrintInfo = false; - } - - public override void Enter(syntax_tree_node st) - { - base.Enter(st); - countNodesVisited++; - - // сокращение обходимых узлов. Как сделать фильтр по тем узлам, которые необходимо обходить? Например, все операторы (без выражений и описаний), все описания (без операторов) - if (st is assign || st is var_def_statement || st is procedure_call || st is procedure_header || st is expression) - { - visitNode = false; // фильтр - куда не заходить - } - } - - type_declarations GenClassesForYield(procedure_definition pd, IEnumerable fields) - { - var fh = (pd.proc_header as function_header); - if (fh == null) - throw new SyntaxError("Only functions can contain yields", "", pd.proc_header.source_context, pd.proc_header); - var seqt = fh.return_type as sequence_type; - if (seqt == null) - throw new SyntaxError("Functions with yields must return sequences", "", fh.return_type.source_context, fh.return_type); - - // Теперь на месте функции генерируем класс - - // Захваченные переменные - var cm = class_members.Public; - foreach (var m in fields) - cm.Add(m); - - // Параметры функции - List lid = new List(); - var pars = fh.parameters; - if (pars != null) - foreach (var ps in pars.params_list) - { - if (ps.param_kind != parametr_kind.none) - throw new SyntaxError("Parameters of functions with yields must not have 'var', 'const' or 'params' modifier", "", pars.source_context, pars); - if (ps.inital_value != null) - throw new SyntaxError("Parameters of functions with yields must not have initial values", "", pars.source_context, pars); - var_def_statement vds = new var_def_statement(ps.idents, ps.vars_type); - cm.Add(vds); // все параметры функции делаем полями класса - lid.AddRange(vds.vars.idents); - } - - var stels = seqt.elements_type; - - // Системные поля и методы для реализации интерфейса IEnumerable - cm.Add(new var_def_statement(Consts.State, "integer"), - new var_def_statement(Consts.Current, stels), - procedure_definition.EmptyDefaultConstructor, - new procedure_definition("Reset"), - new procedure_definition("MoveNext", "boolean", pd.proc_body), - new procedure_definition("get_Current", "object", new assign("Result", Consts.Current)), - new procedure_definition("GetEnumerator", "System.Collections.IEnumerator", new assign("Result", "Self")) - ); - - var className = newClassName(); - var classNameHelper = className + "Helper"; - - var interfaces = new named_type_reference_list("System.Collections.IEnumerator", "System.Collections.IEnumerable"); - var td = new type_declaration(classNameHelper, SyntaxTreeBuilder.BuildClassDefinition(interfaces, cm)); - - // Изменение тела процедуры - - var stl = new statement_list(new var_statement("res", new new_expr(className))); - stl.AddMany(lid.Select(id => new assign(new dot_node("res", id), id))); - stl.Add(new assign("Result", "res")); - pd.proc_body = new block(stl); - - // Второй класс - - var tpl = new template_param_list(stels); - - var IEnumeratorT = new template_type_reference("System.Collections.Generic.IEnumerator", tpl); - - var cm1 = class_members.Public.Add( - procedure_definition.EmptyDefaultConstructor, - new procedure_definition(new function_header("get_Current", stels), new assign("Result", Consts.Current)), - new procedure_definition(new function_header("GetEnumerator", IEnumeratorT), new assign("Result", "Self")), - new procedure_definition("Dispose") - ); - - var interfaces1 = new named_type_reference_list(classNameHelper); - var IEnumerableT = new template_type_reference("System.Collections.Generic.IEnumerable", tpl); - - interfaces1.Add(IEnumerableT).Add(IEnumeratorT); - - var td1 = new type_declaration(className, SyntaxTreeBuilder.BuildClassDefinition(interfaces1, cm1)); - - var cct = new type_declarations(td); - cct.Add(td1); - - return cct; - } - - public override void visit(procedure_definition pd) - { - hasYields = false; - if (pd.proc_header is function_header) - mids = new FindMainIdentsVisitor(); - - base.visit(pd); - - if (!hasYields) // т.е. мы разобрали функцию и уже выходим. Это значит, что пока yield будет обрабатываться только в функциях. Так это и надо. - return; - - var dld = new DeleteAllLocalDefs(); // mids.vars - все захваченные переменные - pd.visit(dld); // Удалить в локальных и блочных описаниях этой процедуры все переменные и вынести их в отдельный список var_def_statement - - mids.vars.Except(dld.LocalDeletedDefsNames); // параметры остались. Их тоже надо исключать - они и так будут обработаны - // В результате работы в mids.vars что-то осталось. Это не локальные переменные и с ними непонятно что делать - - LoweringVisitor.Accept(pd); - - var cfa = new ConstructFiniteAutomata((pd.proc_body as block).program_code); - cfa.Transform(); - (pd.proc_body as block).program_code = cfa.res; - - // Конструируем определение класса - var cct = GenClassesForYield(pd, dld.LocalDeletedDefs); // все удаленные описания переменных делаем описанием класса - - UpperNodeAs().InsertBefore(pd, cct); - - mids = null; // вдруг мы выйдем из процедуры, не зайдем в другую, а там - оператор! Такого конечно не может быть - } - - public override void visit(yield_node yn) - { - hasYields = true; - if (mids != null) // если мы - внутри процедуры - yn.visit(mids); - else throw new SyntaxError("Yield must be in functions only", "", yn.source_context, yn); - // mids.vars - надо установить, какие из них - локальные, какие - из этого класса, какие - являются параметрами функции, а какие - глобальные (все остальные) - // те, которые являются параметрами, надо скопировать в локальные переменные и переименовать использование везде по ходу данной функции - // самое сложное - переменные-поля этого класса - они требуют в создаваемом классе, реализующем итератор, хранить Self текущего класса и добавлять это Self везде по ходу алгоритма - // вначале будем считать, что переменные-поля этого класса и переменные-параметры не захватываются yield - //base.visit(yn); - } - } - - class ConstructFiniteAutomata - { - public statement_list res = new statement_list(); - statement_list stl; - int curState = 0; - - statement_list curStatList; - statement_list StatListAfterCase = new statement_list(); - - case_node cas; // формируемый case - - public ConstructFiniteAutomata(statement_list stl) - { - this.stl = stl; - } - - public void Process(statement st) - { - if (!(st is yield_node || st is labeled_statement)) - { - curStatList.Add(st); - } - if (st is yield_node) - { - var yn = st as yield_node; - curState += 1; - curStatList.AddMany( - new assign(Consts.Current, yn.ex), - new assign(Consts.State, curState), - new assign("Result", true), - new procedure_call("exit") - ); - - curStatList = new statement_list(); - case_variant cv = new case_variant(new expression_list(new int32_const(curState)), curStatList); - cas.conditions.variants.Add(cv); - } - if (st is labeled_statement) - { - var ls = st as labeled_statement; - curStatList = StatListAfterCase; - curStatList.Add(new labeled_statement(ls.label_name)); - Process(ls.to_statement); - } - } - - public void Transform() - { - cas = new case_node(new ident(Consts.State)); - - curStatList = new statement_list(); - case_variant cv = new case_variant(new expression_list(new int32_const(curState)), curStatList); - cas.conditions.variants.Add(cv); - - foreach (var st in stl.subnodes) - Process(st); - - stl.subnodes = BaseChangeVisitor.SeqStatements(cas, StatListAfterCase).ToList(); - //statement_list res = new statement_list(cas); - res = stl; - } - } - -} diff --git a/_ParsePABC1/a.pas b/_ParsePABC1/a.pas deleted file mode 100644 index 1b0c8eef0..000000000 --- a/_ParsePABC1/a.pas +++ /dev/null @@ -1,15 +0,0 @@ -label A,B,C; - -var - i,j: integer; - t,t1: real := 2+3; -begin - write(1+i,(t+2)*3); - i := 5; - begin - i := i + 1; - goto A; - j := 2; - end; - A: write(2); -end. \ No newline at end of file diff --git a/_ParsePABC1/b.pas b/_ParsePABC1/b.pas deleted file mode 100644 index f387ce0e1..000000000 --- a/_ParsePABC1/b.pas +++ /dev/null @@ -1,15 +0,0 @@ -begin - while True do - begin - x := 3; - end; - if x>0 then - x := 1 - else - begin - x := 2; - write(1); - end; - if x>1 then - x := y -end. \ No newline at end of file diff --git a/_ParsePABC1/c.pas b/_ParsePABC1/c.pas deleted file mode 100644 index 7e50b1c52..000000000 --- a/_ParsePABC1/c.pas +++ /dev/null @@ -1,7 +0,0 @@ -begin - while 2*2=4 do - begin - while x>0 do - x := 3; - end; -end. \ No newline at end of file diff --git a/_ParsePABC1/c1.pas b/_ParsePABC1/c1.pas deleted file mode 100644 index ba7099bd9..000000000 --- a/_ParsePABC1/c1.pas +++ /dev/null @@ -1,4 +0,0 @@ -begin - if True then - var x := 0; -end. \ No newline at end of file diff --git a/_ParsePABC1/d.pas b/_ParsePABC1/d.pas deleted file mode 100644 index 3e849152b..000000000 --- a/_ParsePABC1/d.pas +++ /dev/null @@ -1,10 +0,0 @@ -var x: integer; -begin - x := 1; - while x<5 do - begin - write(x); - x += 2; - x += 3; - end; -end. \ No newline at end of file diff --git a/_ParsePABC1/e.pas b/_ParsePABC1/e.pas deleted file mode 100644 index 3051c9090..000000000 --- a/_ParsePABC1/e.pas +++ /dev/null @@ -1,22 +0,0 @@ -procedure p; -var - x,y: integer; - s: string; -begin - var p1: integer; -end; - -function f: integer; -var - a: real; - p1,s,ffff: integer; -begin - var p1,s,d: integer; -end; - -var a,p1: real; - -begin - var p3,p1,p5,p6: integer; - p1 := 3; -end. \ No newline at end of file diff --git a/_ParsePABC1/e2.pas b/_ParsePABC1/e2.pas deleted file mode 100644 index 09a923855..000000000 --- a/_ParsePABC1/e2.pas +++ /dev/null @@ -1,8 +0,0 @@ -var - a,p1: real; - s: string; - -begin - var p3,p1,p5,p6: integer; - p1 := 3; -end. \ No newline at end of file diff --git a/_ParsePABC1/ex1.pas b/_ParsePABC1/ex1.pas deleted file mode 100644 index 3586b7a79..000000000 --- a/_ParsePABC1/ex1.pas +++ /dev/null @@ -1,3 +0,0 @@ -begin - var a := 2.5*3+a*(2+1); -end. \ No newline at end of file diff --git a/_ParsePABC1/ex2.pas b/_ParsePABC1/ex2.pas deleted file mode 100644 index c4abf647e..000000000 --- a/_ParsePABC1/ex2.pas +++ /dev/null @@ -1,3 +0,0 @@ -var a := 2 + 3; -begin -end. \ No newline at end of file diff --git a/_ParsePABC1/f.pas b/_ParsePABC1/f.pas deleted file mode 100644 index 8f8c99052..000000000 --- a/_ParsePABC1/f.pas +++ /dev/null @@ -1,40 +0,0 @@ -var i: integer; -const ccc = 2+3+4; - -procedure p(jjj: integer; var kkk: integer); -var i: integer; -const ccc: integer = 2; -type bcd = integer; -begin - var k: integer; -// yield x111.x222+fff; -// yield aaa[i]^.d+(bbb.c*nnn^)*fff(4); -end; - -function f(var i,j,k: integer): integer; -var i: integer; -begin - var k: integer; - k^[2].t[3]^ := a + 1 * 2*(3+k^[2].t[3]^); -end; - -type C = class - ck: integer; - procedure x1; - var cxk: integer; - begin - var cik: integer; - - end; - function f1(): integer; - var cfk: integer; - begin - var cfik: integer; - write(1+2+3+4,5*6); - end; -end; - -begin - var ii: integer; - -end. \ No newline at end of file diff --git a/_ParsePABC1/f1.pas b/_ParsePABC1/f1.pas deleted file mode 100644 index b265c69d2..000000000 --- a/_ParsePABC1/f1.pas +++ /dev/null @@ -1,21 +0,0 @@ -{function p: integer; -var l,m,n: integer; -begin - var i,j,k: integer; - yield j*dd; - yield i; -end;} - -procedure q; -var l,m,n: integer; - kk,jj: real; -begin - var i,j,k,mmm: integer; - yield x111.x222+fff; - yield l*k; - yield i*n; -end; - -begin - -end. \ No newline at end of file diff --git a/_ParsePABC1/f2.pas b/_ParsePABC1/f2.pas deleted file mode 100644 index 0ef0dc80f..000000000 --- a/_ParsePABC1/f2.pas +++ /dev/null @@ -1,8 +0,0 @@ -procedure q; -begin - var i,j,k,mmm: integer; -end; - -begin - -end. \ No newline at end of file diff --git a/_ParsePABC1/yield1.pas b/_ParsePABC1/yield1.pas deleted file mode 100644 index 18d0c9482..000000000 --- a/_ParsePABC1/yield1.pas +++ /dev/null @@ -1,11 +0,0 @@ -function Gen: sequence of integer; -begin - yield 1; - yield 5; -end; - -begin - var q := Gen(); - foreach var x in q do - Print(x); -end. \ No newline at end of file diff --git a/_ParsePABC1/yield2.pas b/_ParsePABC1/yield2.pas deleted file mode 100644 index c03babbbc..000000000 --- a/_ParsePABC1/yield2.pas +++ /dev/null @@ -1,16 +0,0 @@ -function Gen(n: integer): sequence of integer; -var j,k: real; -begin - var i := 1; - j := 5; - while i