diff --git a/Assignment 1/Program.cs b/Assignment 1/Program.cs index b791095..ced166b 100644 --- a/Assignment 1/Program.cs +++ b/Assignment 1/Program.cs @@ -139,9 +139,10 @@ namespace Assignment_1 long lastLinePos = 0; long initPos = 0; bool cont = false; + bool isLineFinished = true; while (true) { - if (dynamicInput) + if (dynamicInput && isLineFinished) { lastLinePos = source.Position; if (!cont) @@ -230,7 +231,10 @@ namespace Assignment_1 // Increment the source pos past the semi-colon cont = false; source.Position++; - if (dynamicInput) + SkipWhitespace(source); + if (source.Position == source.Length) isLineFinished = true; + else isLineFinished = false; + if (dynamicInput && isLineFinished) { // Nicely format the output stream, so we may print it cleanly source.WriteByte((byte)'\n'); @@ -241,7 +245,7 @@ namespace Assignment_1 return; } } - else if (source.Position != lastLinePos)// - 1) + else if (source.Position != lastLinePos) { // In the case that we expect some more data, we must keep tabs of our current line, and keep accumulating data until we're finished lastLinePos = source.Position; @@ -259,11 +263,12 @@ namespace Assignment_1 throw new ParserException("Failed parsing statement", 0, source.Position); } } - // Throwing a parserexception will return us to this point immediately. From here, the line is automatically restored, + // Throwing a ParserException will return us to this point immediately. From here, the line is automatically restored, // and the excepion printed to the console window. // This means that each function does not need to keep track of our current position in the stream catch (ParserException e) { + isLineFinished = true; if (e.Importance > 3) { throw new ApplicationException("A critical error occurred."); @@ -274,10 +279,6 @@ namespace Assignment_1 } else { - /* - Console.WriteLine(e.LinePosition + ": " + e.Message); - source.Position = initPos; - source.SetLength(initPos);*/ WriteDebugLine(0, 0, e.Message, source); } if (!dynamicInput) diff --git a/Assignment 1/example4.txt b/Assignment 1/example4.txt new file mode 100644 index 0000000..a039e95 --- /dev/null +++ b/Assignment 1/example4.txt @@ -0,0 +1,49 @@ +set a1 " +To be, or not to be - that is the question: +Whether 'tis nobler in the mind to suffer +The slings and arrows of outrageous fortune +Or to take arms against a sea of troubles, +And by opposing end them. To die - to sleep - +No more; and by a sleep to say we end +The heartache, and the thousand natural shocks +That flesh is heir to. 'Tis a consummation +Devoutly to be wish'd. To die - to sleep. +To sleep - perchance to dream: ay, there's the rub! +For in that sleep of death what dreams may come +When we have shuffled off this mortal coil, +Must give us pause. There's the respect +That makes calamity of so long life. +For who would bear the whips and scorns of time, +The oppressor's wrong, the proud man's contumely, +The pangs of despised love, the law's delay, +The insolence of office, and the spurns +That patient merit of the unworthy takes, +When he himself might his quietus make" + NEWLINE + +"With a bare bodkin? +"; + +set averylongvariablethathasbeencontrivedjusttobeanuisancetothe341classwhohaveprobablythoughtthattheycouldgetawaywithallocatingshortvariablenamesofashortlengthbutaregoingtobereallydisappointediftheydidbecausethisisnotashortvariableidentifieratall " +Who would these fardels bear, +To grunt and sweat under a weary life, +But that the dread of something after death - +The undiscover'd country, from whose bourn +No traveller returns - puzzles the will, +And makes us rather bear those ills we have +Than fly to others that we know not of? +Thus conscience does make cowards of us all, +And thus the native hue of resolution +Is sicklied o'er with the pale cast of thought, +And enterprises of great pith and moment +With this regard their currents turn awry +And lose the name of action."; + +set soliloquy a1 + NEWLINE + averylongvariablethathasbeencontrivedjusttobeanuisancetothe341classwhohaveprobablythoughtthattheycouldgetawaywithallocatingshortvariablenamesofashortlengthbutaregoingtobereallydisappointediftheydidbecausethisisnotashortvariableidentifieratall; + +set dummy "dummy1"; + +print soliloquy; +printwordcount soliloquy; +printwords soliloquy; +printlength soliloquy; +list; +exit;