diff --git a/Module1/packages.config b/Module1/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module1/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module2/SimpleLangLexer/packages.config b/Module2/SimpleLangLexer/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module2/SimpleLangLexer/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module2/SimpleLexerDemo/packages.config b/Module2/SimpleLexerDemo/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module2/SimpleLexerDemo/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module3/Gplex.exe b/Module3/Gplex.exe new file mode 100644 index 0000000000000000000000000000000000000000..51a522e221f5ca52cc934933e08745f1653a98b5 Binary files /dev/null and b/Module3/Gplex.exe differ diff --git a/Module3/LexerAddon.cs b/Module3/LexerAddon.cs index c2467796d99e34b2906c362b66cf925504fe57e5..a14d4be6818a7989eb032382794a00cbbbbd4193 100644 --- a/Module3/LexerAddon.cs +++ b/Module3/LexerAddon.cs @@ -19,7 +19,7 @@ namespace GeneratedLexer public int sumInt = 0; public double sumDouble = 0.0; public List<string> idsInComment = new List<string>(); - + public LexerAddon(string programText) { @@ -49,6 +49,16 @@ namespace GeneratedLexer break; } } while (true); + + idCount = myScanner.IdCount; + minIdLength = myScanner.MinIdLength; + maxIdLength = myScanner.MaxIdLength; + var sumIdLength = myScanner.SumIdLength; + if (idCount > 0) + avgIdLength = (double)sumIdLength / idCount; + sumInt = myScanner.IntSum; + sumDouble = myScanner.DoubleSum; + idsInComment = myScanner.CommentedIds; } } } diff --git a/Module3/SimpleLex.cs b/Module3/SimpleLex.cs index d8f9df81a5460e11bf2e732ea49905ce52e6f7fa..1a9bc65778c6b725b07fe308ea8da250081ec867 100644 --- a/Module3/SimpleLex.cs +++ b/Module3/SimpleLex.cs @@ -1,14 +1,10 @@ // // This CSharp output file generated by Gardens Point LEX -// Gardens Point LEX (GPLEX) is Copyright (c) John Gough, QUT 2006-2014. -// Output produced by GPLEX is the property of the user. -// See accompanying file GPLEXcopyright.rtf. -// -// GPLEX Version: 1.2.2 -// Machine: MAINHOMEPC2 -// DateTime: 30.09.2018 17:57:38 -// UserName: someone -// GPLEX input file <SimpleLex.lex - 30.09.2018 17:56:56> +// Version: 1.1.3.301 +// Machine: DESKTOP-H0VRSS3 +// DateTime: 25.09.2022 23:49:01 +// UserName: nikit +// GPLEX input file <SimpleLex.lex> // GPLEX frame file <embedded resource> // // Option settings: noParser, minimize @@ -16,8 +12,8 @@ // // -// Revised backup code -// Version 1.2.1 of 24-June-2013 +// Experimental embedded frame +// Version 1.1.3 of 18-April-2010 // // #define BACKUP @@ -126,15 +122,24 @@ namespace SimpleScanner enum Result {accept, noMatch, contextFound}; - const int maxAccept = 20; - const int initial = 21; + const int maxAccept = 40; + const int initial = 41; const int eofNum = 0; const int goStart = -1; const int INITIAL = 0; + const int COMMENT = 1; #region user code public int LexValueInt; public double LexValueDouble; + public string LexValueString; + public int IdCount = 0; + public int MinIdLength = Int32.MaxValue; + public int MaxIdLength = 0; + public int IntSum = 0; + public double DoubleSum = 0.0; + public int SumIdLength = 0; + public List<string> CommentedIds = new List<string>(); #endregion user code int state; @@ -166,112 +171,208 @@ public int LexValueInt; } }; - static int[] startState = new int[] {21, 0}; + static int[] startState = new int[] {41, 44, 0}; - static Table[] NxS = new Table[23] { + static Table[] NxS = new Table[45] { /* NxS[ 0] */ new Table(0, 0, 0, null), /* NxS[ 1] */ new Table(0, 0, -1, null), -/* NxS[ 2] */ new Table(46, 12, -1, new sbyte[] {22, -1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2}), -/* NxS[ 3] */ new Table(61, 1, -1, new sbyte[] {19}), -/* NxS[ 4] */ new Table(0, 0, -1, null), -/* NxS[ 5] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 6] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 15, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 7] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 11, 5}), -/* NxS[ 8] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 9] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 10, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 10] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 11] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 12, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 12] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 13, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 13] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 14, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 14] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 15] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 16] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 17, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 17] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 18, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 18] */ new Table(48, 75, -1, new sbyte[] {5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, -1, -1, -1, -1, -1, -1, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, -1, -1, -1, -1, 5, -1, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5}), -/* NxS[ 19] */ new Table(0, 0, -1, null), -/* NxS[ 20] */ new Table(48, 10, -1, new sbyte[] {20, 20, 20, 20, 20, 20, - 20, 20, 20, 20}), -/* NxS[ 21] */ new Table(10, 113, 1, new sbyte[] {-1, 1, 1, -1, 1, 1, +/* NxS[ 2] */ new Table(39, 1, 43, new sbyte[] {25}), +/* NxS[ 3] */ new Table(47, 1, -1, new sbyte[] {24}), +/* NxS[ 4] */ new Table(46, 12, -1, new sbyte[] {42, -1, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4}), +/* NxS[ 5] */ new Table(61, 1, -1, new sbyte[] {22}), +/* NxS[ 6] */ new Table(0, 0, -1, null), +/* NxS[ 7] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 8] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 18, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 9] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 14, 7}), +/* NxS[ 10] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 12, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 11] */ new Table(0, 0, -1, null), +/* NxS[ 12] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 13, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 13] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 14] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 15, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 15] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 16, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 16] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 17, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 17] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 18] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 19, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 19] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 20, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 20] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 21, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 21] */ new Table(48, 75, -1, new sbyte[] {7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, -1, -1, -1, -1, -1, -1, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, -1, -1, -1, -1, 7, -1, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7}), +/* NxS[ 22] */ new Table(0, 0, -1, null), +/* NxS[ 23] */ new Table(48, 10, -1, new sbyte[] {23, 23, 23, 23, 23, 23, + 23, 23, 23, 23}), +/* NxS[ 24] */ new Table(10, 4, 24, new sbyte[] {-1, 24, 24, -1}), +/* NxS[ 25] */ new Table(0, 0, -1, null), +/* NxS[ 26] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 27] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 37, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 28] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 33, 26}), +/* NxS[ 29] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 31, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 30] */ new Table(0, 0, -1, null), +/* NxS[ 31] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 32, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 32] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 33] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 34, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 34] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 35, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 35] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 36, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 36] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 37] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 38, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 38] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 39, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 39] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 40, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 40] */ new Table(48, 75, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, -1, -1, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26}), +/* NxS[ 41] */ new Table(10, 114, 1, new sbyte[] {-1, 1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 1, 1, 1, 1, - 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 5, - 1, 5, 6, 7, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}), -/* NxS[ 22] */ new Table(48, 10, -1, new sbyte[] {20, 20, 20, 20, 20, 20, - 20, 20, 20, 20}), + -1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 6, 1, 1, 1, 1, + 1, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, 1, 7, + 1, 7, 8, 9, 7, 10, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 11}), +/* NxS[ 42] */ new Table(48, 10, -1, new sbyte[] {23, 23, 23, 23, 23, 23, + 23, 23, 23, 23}), +/* NxS[ 43] */ new Table(39, 1, 43, new sbyte[] {25}), +/* NxS[ 44] */ new Table(65, 61, -1, new sbyte[] {26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, -1, -1, 26, -1, 26, 27, 28, 26, 29, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, -1, -1, 30}), }; int NextState() { @@ -356,7 +457,8 @@ int NextState() { #if !NOFILES public Scanner(Stream file) { SetSource(file); // no unicode option - } + } + #endif // !NOFILES public Scanner() { } @@ -384,7 +486,7 @@ int NextState() { if (next < 0xDC00 || next > 0xDFFF) code = ScanBuff.UnicodeReplacementChar; else - code = (0x10000 + ((code & 0x3FF) << 10) + (next & 0x3FF)); + code = (0x10000 + (code & 0x3FF << 10) + (next & 0x3FF)); } #endif cCol++; @@ -437,7 +539,9 @@ int NextState() { GetCode(); } +#if !NOFILES // ================ LineBuffer Initialization =================== + /// <summary> /// Create and initialize a LineBuff buffer object for this scanner /// </summary> @@ -451,7 +555,6 @@ int NextState() { GetCode(); } -#if !NOFILES // =============== StreamBuffer Initialization ================== /// <summary> @@ -553,12 +656,6 @@ int NextState() { } } - /// <summary> - /// Discards all but the first "n" codepoints in the recognized pattern. - /// Resets the buffer position so that only n codepoints have been consumed; - /// yytext is also re-evaluated. - /// </summary> - /// <param name="n">The number of codepoints to consume</param> [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] void yyless(int n) { @@ -578,10 +675,6 @@ int NextState() { // but it does not seem possible to re-establish // the correct column counts except by going forward. // - /// <summary> - /// Removes the last "n" code points from the pattern. - /// </summary> - /// <param name="n">The number to remove</param> [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] void _yytrunc(int n) { yyless(yyleng - n); } @@ -594,23 +687,18 @@ int NextState() { // can't use (tokEPos - tokPos) because of the // possibility of surrogate pairs in the token. // - /// <summary> - /// The length of the pattern in codepoints (not the same as - /// string-length if the pattern contains any surrogate pairs). - /// </summary> [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "yyleng")] [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "yyleng")] public int yyleng { get { +#if BYTEMODE + return tokEPos - tokPos; +#else if (tokELin == tokLin) return tokECol - tokCol; - else -#if BYTEMODE - return tokEPos - tokPos; -#else - { + else { int ch; int count = 0; int save = buffer.Pos; @@ -619,7 +707,7 @@ int NextState() { ch = buffer.Read(); if (!char.IsHighSurrogate((char)ch)) count++; } while (buffer.Pos < tokEPos && ch != ScanBuff.EndOfFile); - buffer.Pos = save; + buffer.Pos = save; return count; } #endif // BYTEMODE @@ -644,55 +732,64 @@ int NextState() { // ============== The main tokenizer code ================= - int Scan() { - for (; ; ) { - int next; // next state to enter + int Scan() + { + for (; ; ) + { + int next; // next state to enter +#if BACKUP + Result rslt = Result.noMatch; +#endif // BACKUP #if LEFTANCHORS - for (;;) { + for (;;) + { // Discard characters that do not start any pattern. // Must check the left anchor condition after *every* GetCode! state = ((cCol == 0) ? anchorState[currentScOrd] : currentStart); - if ((next = NextState()) != goStart) break; // LOOP EXIT HERE... + if ((next = NextState()) != goStart) + break; // LOOP EXIT HERE... GetCode(); } #else // !LEFTANCHORS state = currentStart; - while ((next = NextState()) == goStart) { + while ((next = NextState()) == goStart) // At this point, the current character has no // transition from the current state. We discard // the "no-match" char. In traditional LEX such // characters are echoed to the console. GetCode(); - } #endif // LEFTANCHORS // At last, a valid transition ... MarkToken(); state = next; - GetCode(); + GetCode(); + + while ((next = NextState()) > eofNum) // Exit for goStart AND for eofNum #if BACKUP - bool contextSaved = false; - while ((next = NextState()) > eofNum) { // Exit for goStart AND for eofNum - if (state <= maxAccept && next > maxAccept) { // need to prepare backup data - // Store data for the *latest* accept state that was found. - SaveStateAndPos( ref ctx ); - contextSaved = true; + if (state <= maxAccept && next > maxAccept) // need to prepare backup data + { + // ctx is an object. The fields may be + // mutated by the call to Recurse2. + // On return the data in ctx is the + // *latest* accept state that was found. + + rslt = Recurse2(ref ctx, next); + if (rslt == Result.noMatch) + RestoreStateAndPos(ref ctx); + break; } - state = next; - GetCode(); - } - if (state > maxAccept && contextSaved) - RestoreStateAndPos( ref ctx ); -#else // BACKUP - while ((next = NextState()) > eofNum) { // Exit for goStart AND for eofNum - state = next; - GetCode(); - } + else #endif // BACKUP - if (state <= maxAccept) { + { + state = next; + GetCode(); + } + if (state <= maxAccept) + { MarkEnd(); #region ActionSwitch -#pragma warning disable 162, 1522 +#pragma warning disable 162 switch (state) { case eofNum: @@ -700,59 +797,127 @@ int NextState() { return (int)Tokens.EOF; break; case 1: + case 2: + case 3: LexError(); return 0; break; - case 2: + case 4: LexValueInt = int.Parse(yytext); + IntSum += LexValueInt; return (int)Tok.INUM; break; - case 3: + case 5: return (int)Tok.COLON; break; - case 4: + case 6: return (int)Tok.SEMICOLON; break; - case 5: - case 6: case 7: case 8: case 9: - case 11: + case 10: case 12: - case 13: + case 14: case 15: case 16: - case 17: -return (int)Tok.ID; + case 18: + case 19: + case 20: +IdCount += 1; + SumIdLength += yytext.Length; + if (yytext.Length > MaxIdLength) + MaxIdLength = yytext.Length; + if (yytext.Length < MinIdLength) + MinIdLength = yytext.Length; + return (int)Tok.ID; break; - case 10: + case 11: +BEGIN(COMMENT); + break; + case 13: return (int)Tok.END; break; - case 14: + case 17: return (int)Tok.CYCLE; break; - case 18: + case 21: return (int)Tok.BEGIN; break; - case 19: + case 22: return (int)Tok.ASSIGN; break; - case 20: + case 23: LexValueDouble = double.Parse(yytext); + DoubleSum += LexValueDouble; return (int)Tok.RNUM; break; + case 24: +return (int)Tok.COMMENT; + break; + case 25: +LexValueString = yytext; + return (int)Tok.STRINGAP; + break; + case 26: + case 27: + case 28: + case 29: + case 31: + case 33: + case 34: + case 35: + case 37: + case 38: + case 39: +CommentedIds.Add(yytext); + break; + case 30: +BEGIN(INITIAL); + return (int)Tok.LONGCOMMENT; + break; + case 32: +{} + break; + case 36: +{} + break; + case 40: +{} + break; default: break; } -#pragma warning restore 162, 1522 +#pragma warning restore 162 #endregion } } } #if BACKUP - void SaveStateAndPos(ref Context ctx) { + Result Recurse2(ref Context ctx, int next) + { + // Assert: at entry "state" is an accept state AND + // NextState(state, code) != goStart AND + // NextState(state, code) is not an accept state. + // + SaveStateAndPos(ref ctx); + state = next; + GetCode(); + + while ((next = NextState()) > eofNum) + { + if (state <= maxAccept && next > maxAccept) // need to update backup data + SaveStateAndPos(ref ctx); + state = next; + if (state == eofNum) return Result.accept; + GetCode(); + } + return (state <= maxAccept ? Result.accept : Result.noMatch); + } + + void SaveStateAndPos(ref Context ctx) + { ctx.bPos = buffer.Pos; ctx.rPos = readPos; ctx.cCol = cCol; @@ -761,7 +926,8 @@ LexValueDouble = double.Parse(yytext); ctx.cChr = code; } - void RestoreStateAndPos(ref Context ctx) { + void RestoreStateAndPos(ref Context ctx) + { buffer.Pos = ctx.bPos; readPos = ctx.rPos; cCol = ctx.cCol; @@ -769,7 +935,8 @@ LexValueDouble = double.Parse(yytext); state = ctx.state; code = ctx.cChr; } -#endif // BACKUP + +#endif // BACKUP // ============= End of the tokenizer code ================ @@ -803,7 +970,7 @@ LexValueDouble = double.Parse(yytext); public void LexError() { - Console.WriteLine("({0},{1}): ÍåèçâåñòГûé ñèìâîë {2}", yyline, yycol, yytext); + Console.WriteLine("({0},{1}): Неизвестный символ {2}", yyline, yycol, yytext); } public string TokToString(Tok tok) @@ -816,6 +983,8 @@ public string TokToString(Tok tok) return tok + " " + LexValueInt; case Tok.RNUM: return tok + " " + LexValueDouble; + case Tok.STRINGAP: + return tok + " " + yytext; default: return tok + ""; } @@ -870,7 +1039,6 @@ public string TokToString(Tok tok) return new LineBuffer(source); } -#if (!NOFILES) public static ScanBuff GetBuffer(Stream source) { return new BuildBuffer(source); @@ -881,8 +1049,7 @@ public string TokToString(Tok tok) { return new BuildBuffer(source, fallbackCodePage); } -#endif // !BYTEMODE -#endif // !NOFILES +#endif } #region Buffer classes @@ -1005,7 +1172,7 @@ public string TokToString(Tok tok) { ix = lstart = 0; } - while (ix < numLines) + for (; ; ) { int len = line[ix].Length + 1; if (pos < lstart + len) break; @@ -1063,8 +1230,7 @@ public string TokToString(Tok tok) { cPos = value; findIndex(cPos, out cLine, out curLineStart); - // cLine should be the *next* line after curLine. - curLine = (cLine < numLines ? line[cLine++] : ""); + curLine = line[cLine]; curLineEnd = curLineStart + curLine.Length; } } @@ -1072,7 +1238,7 @@ public string TokToString(Tok tok) public override string ToString() { return "LineBuffer"; } } -#if (!NOFILES) + // ============================================================== // ===== class BuildBuff : for unicode text files ======== // ============================================================== @@ -1313,13 +1479,12 @@ public string TokToString(Tok tok) } #endif // !BYTEMODE } -#endif // !NOFILES #endregion Buffer classes // ============================================================== // ============ class CodePageHandling ============= // ============================================================== -#if (!NOFILES) + public static class CodePageHandling { public static int GetCodePage(string option) @@ -1530,7 +1695,6 @@ public string TokToString(Tok tok) #endif // !BYTEMODE #endregion -#endif // !NOFILES // End of code copied from embedded resource diff --git a/Module3/SimpleLex.lex b/Module3/SimpleLex.lex index c0434f09b6e8ca1adf55cd70f9ae3e4b18e41e45..e9a1cfb394386474224f30adc426a06aa30c0a0b 100644 --- a/Module3/SimpleLex.lex +++ b/Module3/SimpleLex.lex @@ -6,25 +6,48 @@ Digit [0-9] AlphaDigit {Alpha}|{Digit} INTNUM {Digit}+ REALNUM {INTNUM}\.{INTNUM} +STRING \'[^']*\' ID {Alpha}{AlphaDigit}* +DotChr [^\r\n] +OneLineCmnt \/\/{DotChr}* +%x COMMENT // Здесь можно делать описания типов, переменных и методов - они попадают в класс Scanner %{ public int LexValueInt; public double LexValueDouble; + public string LexValueString; + public int IdCount = 0; + public int MinIdLength = Int32.MaxValue; + public int MaxIdLength = 0; + public int IntSum = 0; + public double DoubleSum = 0.0; + public int SumIdLength = 0; + public List<string> CommentedIds = new List<string>(); %} %% {INTNUM} { LexValueInt = int.Parse(yytext); + IntSum += LexValueInt; return (int)Tok.INUM; } {REALNUM} { LexValueDouble = double.Parse(yytext); + DoubleSum += LexValueDouble; return (int)Tok.RNUM; } +{OneLineCmnt} { + return (int)Tok.COMMENT; +} + +{STRING} { + LexValueString = yytext; + return (int)Tok.STRINGAP; +} + begin { return (int)Tok.BEGIN; } @@ -38,9 +61,32 @@ cycle { } {ID} { + IdCount += 1; + SumIdLength += yytext.Length; + if (yytext.Length > MaxIdLength) + MaxIdLength = yytext.Length; + if (yytext.Length < MinIdLength) + MinIdLength = yytext.Length; return (int)Tok.ID; } +"{" { + BEGIN(COMMENT); +} + +<COMMENT> "}" { + BEGIN(INITIAL); + return (int)Tok.LONGCOMMENT; +} + +<COMMENT> begin {} +<COMMENT> end {} +<COMMENT> cycle {} + +<COMMENT>{ID} { + CommentedIds.Add(yytext); +} + ":" { return (int)Tok.COLON; } @@ -77,6 +123,8 @@ public string TokToString(Tok tok) return tok + " " + LexValueInt; case Tok.RNUM: return tok + " " + LexValueDouble; + case Tok.STRINGAP: + return tok + " " + yytext; default: return tok + ""; } diff --git a/Module3/a.txt b/Module3/a.txt index cda64314589386e33d85b530880ee7a9b74b7e00..925feada5446a977610076ef09fb98ed5ecfbc54 100644 --- a/Module3/a.txt +++ b/Module3/a.txt @@ -1,3 +1,9 @@ -begin ggg : ; :+= 7 99.9 5 -1 -ppp end +begin ggg : ; := 7 99.9 5 +1 tu polasdq 0.2 +ppp end // wooow begin +cycle 'hi mark' +{ gvjbh 8 1.5 +begin end +pa pew +; : } := +pumpum cycle diff --git a/Module3/mymain.cs b/Module3/mymain.cs index 9a33c597556eaecf3a6908bf931d847f7ed6c273..5d1f013e373efb396268d1b42d3e3e2a401810c1 100644 --- a/Module3/mymain.cs +++ b/Module3/mymain.cs @@ -33,14 +33,15 @@ namespace GeneratedLexer if (tok == (int)Tok.EOF) { Console.WriteLine(); - Console.WriteLine("number of id: {0:D}", cnt_id); - Console.WriteLine("average length of the id: {0:N}", avg_id_len / cnt_id); - Console.WriteLine("min length of the id: {0:D}", min_id_len); - Console.WriteLine("min length of the id: {0:D}", max_id_len); + Console.WriteLine("number of id: {0:D}", scanner.IdCount); + Console.WriteLine("average length of the id: {0:N}", (double)scanner.SumIdLength / scanner.IdCount); + Console.WriteLine("min length of the id: {0:D}", scanner.MinIdLength); + Console.WriteLine("min length of the id: {0:D}", scanner.MaxIdLength); Console.WriteLine(); - Console.WriteLine("sum of int: {0:D}", sum_int); - Console.WriteLine("sum of double: {0:N}", sum_d); + Console.WriteLine("sum of int: {0:D}", scanner.IntSum); + Console.WriteLine("sum of double: {0:N}", scanner.DoubleSum); + Console.WriteLine(string.Join(" ", scanner.CommentedIds)); Console.WriteLine(); @@ -50,7 +51,7 @@ namespace GeneratedLexer Console.WriteLine(scanner.TokToString((Tok)tok)); } while (true); - Console.ReadKey(); + //Console.ReadKey(); } } } diff --git a/Module3/packages.config b/Module3/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module3/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module4/SimpleLangParser/packages.config b/Module4/SimpleLangParser/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module4/SimpleLangParser/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module4/SimpleLangParserTest/packages.config b/Module4/SimpleLangParserTest/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module4/SimpleLangParserTest/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module5/packages.config b/Module5/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module5/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module7/packages.config b/Module7/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module7/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/Module8/packages.config b/Module8/packages.config new file mode 100644 index 0000000000000000000000000000000000000000..71fe2d472a2b3e35380df0a4ca03a9a67dec6a43 --- /dev/null +++ b/Module8/packages.config @@ -0,0 +1,10 @@ +п»ї<?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="NUnit.Extension.NUnitProjectLoader" version="3.7.1" targetFramework="net40" /> + <package id="NUnit.Extension.TeamCityEventListener" version="1.0.7" targetFramework="net40" /> + <package id="NUnit.Extension.VSProjectLoader" version="3.9.0" targetFramework="net40" /> + <package id="NUnit3TestAdapter" version="4.3.0-alpha-net7.4" targetFramework="net40" /> + <package id="Newtonsoft.Json" version="13.0.2-beta2" targetFramework="net40" /> +</packages> \ No newline at end of file diff --git a/TestGeneratedLexer/Tests.cs b/TestGeneratedLexer/Tests.cs index 57d7d4cfefec38b435448d0de4ad694d624d177e..43a3db0326413bf8b69bc98a26620c2434582590 100644 --- a/TestGeneratedLexer/Tests.cs +++ b/TestGeneratedLexer/Tests.cs @@ -40,7 +40,7 @@ namespace TestGeneratedLexer } [Test] - [Ignore("This test is disabled")] + //[Ignore("This test is disabled")] public void TestString() { LexerAddon lexer = new LexerAddon(@"3 389 3 'ssfsf ' "); @@ -50,7 +50,7 @@ namespace TestGeneratedLexer } [Test] - [Ignore("This test is disabled")] + //[Ignore("This test is disabled")] public void TestSingleLineCmt() { LexerAddon lexer = new LexerAddon(@"i22d1 5.6 // i 32 id3 @@ -63,7 +63,7 @@ namespace TestGeneratedLexer } [Test] - [Ignore("This test is disabled")] + //[Ignore("This test is disabled")] public void TestMultiLineCmt() { LexerAddon lexer = new LexerAddon(@"i22d1 5.6 { i 32 id3 @@ -76,7 +76,7 @@ namespace TestGeneratedLexer } [Test] - [Ignore("This test is disabled")] + //[Ignore("This test is disabled")] public void TestMultiLineCmtIds() { LexerAddon lexer = new LexerAddon(@"i22d1 5.6 { i 32 id3