diff --git a/Module7/ParserVistors.csproj b/Module7/ParserVistors.csproj
index 8d2fb0c108a132b221c54a9261e58911d0e8b6b0..7702ededf985b555ab49ecb0de83777510c63888 100644
--- a/Module7/ParserVistors.csproj
+++ b/Module7/ParserVistors.csproj
@@ -1,6 +1,6 @@
 п»ї<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props')" />
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props')" />
   <Import Project="..\packages\NUnit.3.13.3\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.13.3\build\NUnit.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -12,7 +12,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>SimpleLang</RootNamespace>
     <AssemblyName>SimpleLang</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
     <TargetFrameworkProfile>
     </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
@@ -28,6 +28,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
     <PlatformTarget>x86</PlatformTarget>
@@ -37,6 +38,7 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
     <DebugSymbols>true</DebugSymbols>
@@ -46,6 +48,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
     <OutputPath>bin\Release\</OutputPath>
@@ -55,6 +58,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -104,7 +108,7 @@
       <ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их.  Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
     </PropertyGroup>
     <Error Condition="!Exists('..\packages\NUnit.3.13.3\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.13.3\build\NUnit.props'))" />
-    <Error Condition="!Exists('..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props'))" />
+    <Error Condition="!Exists('..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props'))" />
   </Target>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/Module7/Visitors/ChangeVarIdVisitor.cs b/Module7/Visitors/ChangeVarIdVisitor.cs
index 2512e3bed9118a8d696f474cc5225095bdd2961d..8baa804dbc9d87a17dc3530464d334b54a069ece 100644
--- a/Module7/Visitors/ChangeVarIdVisitor.cs
+++ b/Module7/Visitors/ChangeVarIdVisitor.cs
@@ -20,7 +20,7 @@ namespace SimpleLang.Visitors
         {
             if (id.Name == from)
                 id.Name = to;
-            base.VisitIdNode(id);
+            //base.VisitIdNode(id);
         }
 
 
diff --git a/Module7/Visitors/CommonlyUsedVarVisitor.cs b/Module7/Visitors/CommonlyUsedVarVisitor.cs
index bf0e397e3c2a2f447c5c85c2c37c6c2e720c94f8..59b52e97d19921f8c567201fdd67a7cd3f88b586 100644
--- a/Module7/Visitors/CommonlyUsedVarVisitor.cs
+++ b/Module7/Visitors/CommonlyUsedVarVisitor.cs
@@ -8,19 +8,29 @@ namespace SimpleLang.Visitors
 {
     public class CommonlyUsedVarVisitor : AutoVisitor
     {
-        public Dictionary<string, int> VarCount = new Dictionary<string, int>();
+        
+        public Dictionary<string, int> varUsageCount = new Dictionary<string, int>();
         public string mostCommonlyUsedVar()
         {
-            //throw new NotImplementedException();
-            var max = VarCount.Values.Max();
-            return VarCount.Where(x => x.Value == max).First().Key;
+            int maxCount = 0;
+            string mostCommonVar = "";
+            foreach (var kv in varUsageCount)
+            {
+                if (kv.Value > maxCount)
+                {
+                    mostCommonVar = kv.Key;
+                    maxCount = kv.Value;
+                }
+            }
+            return mostCommonVar;
+
+
         }
         public override void VisitIdNode(IdNode id)
         {
-            if (VarCount.ContainsKey(id.Name))
-                VarCount[id.Name]++;
-            else
-                VarCount[id.Name] = 1;
+            if (!varUsageCount.ContainsKey(id.Name))
+                varUsageCount[id.Name] = 0;
+            varUsageCount[id.Name]++;
         }
 
     }
diff --git a/Module7/Visitors/ExprComplexityVisitor.cs b/Module7/Visitors/ExprComplexityVisitor.cs
index 5c550273f3753b14e027f241f3cec127a8e5f3d7..29371ec9b609e698aa06c9490bde6924a739a625 100644
--- a/Module7/Visitors/ExprComplexityVisitor.cs
+++ b/Module7/Visitors/ExprComplexityVisitor.cs
@@ -8,58 +8,51 @@ namespace SimpleLang.Visitors
 {
     public class ExprComplexityVisitor : AutoVisitor
     {
-        private List<int> Complexity = new List<int>();
-        private bool entered = false;
+        List<int> complexityList = new List<int>();
+        int lastExprComplexity = 0;
 
-        // список должен содержать сложность каждого выражения, встреченного при обычном порядке обхода AST
-        public List<int> getComplexityList()
+        public override void VisitAssignNode(AssignNode a)
+        {
+            a.Expr.Visit(this);
+            complexityList.Add(lastExprComplexity);
+            lastExprComplexity = 0;
+        }
+
+        public override void VisitCycleNode(CycleNode c)
         {
-            return Complexity;
+            c.Expr.Visit(this);
+            complexityList.Add(lastExprComplexity);
+            lastExprComplexity = 0;
+            c.Stat.Visit(this);
         }
 
-        public override void VisitIntNumNode(IntNumNode num)
+        public override void VisitWriteNode(WriteNode w)
         {
-            if (!entered)
-                Complexity.Add(0);
-            base.VisitIntNumNode(num);
+            w.Expr.Visit(this);
+            complexityList.Add(lastExprComplexity);
+            lastExprComplexity = 0;
         }
-		public override void VisitIdNode(IdNode num)
-		{
-			if (!entered)
-				Complexity.Add(0);
-			base.VisitIdNode(num);
-		}
 
-		public override void VisitWriteNode(WriteNode num)
-		{
-			if (!entered)
-				Complexity.Add(0);
-			base.VisitWriteNode(num);
-		}
+        public List<int> getComplexityList()
+        {
+            return complexityList;
+        }
 
-		public override void VisitBinOpNode(BinOpNode binop)
+        public override void VisitBinOpNode(BinOpNode binop)
         {
-            if (entered)
+            binop.Left.Visit(this);
+            if (binop.Op == '+' || binop.Op == '-')
             {
-                if (binop.Op == '+' || binop.Op == '-')
-                    Complexity[Complexity.Count - 1]++;
-                else if (binop.Op == '*' || binop.Op == '/')
-                    Complexity[Complexity.Count - 1] += 3;
-                base.VisitBinOpNode(binop);
+                lastExprComplexity += 1;
             }
-            else
+            if (binop.Op == '*' || binop.Op == '/')
             {
-                entered = true;
-                Complexity.Add(0);
-                if (binop.Op == '+' || binop.Op == '-')
-                    Complexity[Complexity.Count - 1]++;
-                else if (binop.Op == '*' || binop.Op == '/')
-                    Complexity[Complexity.Count - 1] += 3;
-                base.VisitBinOpNode(binop);
-                entered = false;
+                lastExprComplexity += 3;
             }
+            binop.Right.Visit(this);
         }
 
 
+
     }
 }
diff --git a/Module7/app.config b/Module7/app.config
index fcd0c9373599da3670c1db785b6d1ccafa462e53..3e0e37cfc8c7a59ae349f3d930cc162ccb3f4d50 100644
--- a/Module7/app.config
+++ b/Module7/app.config
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
diff --git a/Module7/packages.config b/Module7/packages.config
index 23cecd6aea26171f30219d4cfc64b187a7fd4b62..014c1663d4d6aa4714a8f527a2c09ab71e83a929 100644
--- a/Module7/packages.config
+++ b/Module7/packages.config
@@ -1,6 +1,6 @@
 п»ї<?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="NUnit" version="3.13.3" targetFramework="net40" />
-  <package id="NUnit.ConsoleRunner" version="3.15.2" targetFramework="net40" />
-  <package id="NUnit3TestAdapter" version="4.3.0" targetFramework="net40" />
+  <package id="NUnit.ConsoleRunner" version="3.16.0" targetFramework="net48" />
+  <package id="NUnit3TestAdapter" version="4.3.1" targetFramework="net48" />
 </packages>
\ No newline at end of file
diff --git a/Module8/ParserGenerator.csproj b/Module8/ParserGenerator.csproj
index 4cf5eb428755095d56e794e8c5557f0b84e5e797..c10db2f6f8d61351f7a09b2db7a54842378d4c0e 100644
--- a/Module8/ParserGenerator.csproj
+++ b/Module8/ParserGenerator.csproj
@@ -1,6 +1,6 @@
 п»ї<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props')" />
+<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props')" />
   <Import Project="..\packages\NUnit.3.13.3\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.13.3\build\NUnit.props')" />
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -12,7 +12,7 @@
     <AppDesignerFolder>Properties</AppDesignerFolder>
     <RootNamespace>SimpleLang</RootNamespace>
     <AssemblyName>SimpleLang</AssemblyName>
-    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
     <TargetFrameworkProfile>
     </TargetFrameworkProfile>
     <FileAlignment>512</FileAlignment>
@@ -28,6 +28,7 @@
     <DefineConstants>DEBUG;TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
     <PlatformTarget>x86</PlatformTarget>
@@ -37,6 +38,7 @@
     <DefineConstants>TRACE</DefineConstants>
     <ErrorReport>prompt</ErrorReport>
     <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
     <DebugSymbols>true</DebugSymbols>
@@ -46,6 +48,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
     <OutputPath>bin\Release\</OutputPath>
@@ -55,6 +58,7 @@
     <PlatformTarget>AnyCPU</PlatformTarget>
     <ErrorReport>prompt</ErrorReport>
     <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
+    <Prefer32Bit>false</Prefer32Bit>
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -101,7 +105,7 @@
       <ErrorText>Данный проект ссылается на пакеты NuGet, отсутствующие на этом компьютере. Используйте восстановление пакетов NuGet, чтобы скачать их.  Дополнительную информацию см. по адресу: http://go.microsoft.com/fwlink/?LinkID=322105. Отсутствует следующий файл: {0}.</ErrorText>
     </PropertyGroup>
     <Error Condition="!Exists('..\packages\NUnit.3.13.3\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.13.3\build\NUnit.props'))" />
-    <Error Condition="!Exists('..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.4.3.0\build\net35\NUnit3TestAdapter.props'))" />
+    <Error Condition="!Exists('..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.4.3.1\build\net35\NUnit3TestAdapter.props'))" />
   </Target>
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/Module8/SimpleYacc.y b/Module8/SimpleYacc.y
index 028e210734bba55753bbed81a56968bfc159d8f4..303266bc0551992e4ae50a2d5512a96d448bf81b 100644
--- a/Module8/SimpleYacc.y
+++ b/Module8/SimpleYacc.y
@@ -122,7 +122,7 @@ varlist	: ident
 while   : WHILE expr DO statement { $$ = new WhileNode($2, $4); }
 		;
 
-repeat : REPEAT stlist UNTIL expr { $$ = new RepeatNode($2, $4); }
+repeat : REPEAT stlist UNTIL expr { $$ = new RepeatNode($4, $2); }
 		;
 
 if 		: IF expr THEN statement { $$ = new IfNode($2, $4); } %prec IFX
diff --git a/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs b/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
index bdef845317716b588b00eada6c01c8f8287066b0..d953ab080e8cda53196a76431a6d6d0a36d5e4d7 100644
--- a/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
+++ b/Module8/Visitors/GenCodeVisitors/GenCodeVisitor.cs
@@ -112,5 +112,49 @@ namespace SimpleLang.Visitors
             foreach (var s in genc.commands)
                 Console.WriteLine(s);
         }
+
+        public override void VisitIfNode(IfNode i)
+        {
+            i.expr.Visit(this);
+            Label elseLabel = genc.DefineLabel();
+            Label endIfLabel = genc.DefineLabel();
+            genc.Emit(OpCodes.Brfalse, elseLabel);
+            i.ifTrue.Visit(this);
+            genc.Emit(OpCodes.Br, endIfLabel);
+            genc.MarkLabel(elseLabel);
+            if (i.ifFalse != null)
+                i.ifFalse.Visit(this);
+            genc.MarkLabel(endIfLabel);
+        }
+
+        public override void VisitWhileNode(WhileNode whileNode)
+        {
+            var loopLabel = genc.DefineLabel();
+            var endLabel = genc.DefineLabel();
+
+            genc.MarkLabel(loopLabel);
+            whileNode.Expr.Visit(this);
+            genc.Emit(OpCodes.Ldc_I4_0);
+            genc.Emit(OpCodes.Beq, endLabel);
+            whileNode.Stat.Visit(this);
+            genc.Emit(OpCodes.Br, loopLabel);
+            genc.MarkLabel(endLabel);
+        }
+
+        public override void VisitRepeatNode(RepeatNode repeatNode)
+        {
+            var loopLabel = genc.DefineLabel();
+            var endLabel = genc.DefineLabel();
+
+            genc.MarkLabel(loopLabel);
+            foreach (var st in repeatNode.StList)
+                st.Visit(this);
+            repeatNode.Expr.Visit(this);
+            genc.Emit(OpCodes.Ldc_I4_0);
+            genc.Emit(OpCodes.Beq, endLabel);
+            genc.Emit(OpCodes.Br, loopLabel);
+            genc.MarkLabel(endLabel);
+        }
+
     }
 }
diff --git a/Module8/app.config b/Module8/app.config
index fcd0c9373599da3670c1db785b6d1ccafa462e53..3e0e37cfc8c7a59ae349f3d930cc162ccb3f4d50 100644
--- a/Module8/app.config
+++ b/Module8/app.config
@@ -1,3 +1,3 @@
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
-<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/></startup></configuration>
diff --git a/Module8/packages.config b/Module8/packages.config
index 23cecd6aea26171f30219d4cfc64b187a7fd4b62..014c1663d4d6aa4714a8f527a2c09ab71e83a929 100644
--- a/Module8/packages.config
+++ b/Module8/packages.config
@@ -1,6 +1,6 @@
 п»ї<?xml version="1.0" encoding="utf-8"?>
 <packages>
   <package id="NUnit" version="3.13.3" targetFramework="net40" />
-  <package id="NUnit.ConsoleRunner" version="3.15.2" targetFramework="net40" />
-  <package id="NUnit3TestAdapter" version="4.3.0" targetFramework="net40" />
+  <package id="NUnit.ConsoleRunner" version="3.16.0" targetFramework="net48" />
+  <package id="NUnit3TestAdapter" version="4.3.1" targetFramework="net48" />
 </packages>
\ No newline at end of file