/// <summary> /// We create a microscanner, wrap it in a peekable scanner, and then start the /// parsing routine by calling SystemGoal. In order to support the shaped output, /// you will see all method calls preceded and followed by shapewriter push/pop calls. /// For simplicity's sake, I left it like this, but would most likely wrap this in /// a nested lambda call to the shapewriter to call the actual methods. Wasn't sure /// where this is evolving with the micro generator, so might do that next week depending. /// I don't like having the output format tied to the algorithm. Hence trying to create /// the parse tree during and then formatting on that structure after the fact. /// </summary> /// <param name="program"></param> public void Parse(string program) { this.microScanner = new MicroScanner(program); this.peekScanner = new PeekableScanner(this.microScanner); SystemGoal(); }
public void DetectAndIgnoreWhitespaceSpaces() { var program = " "; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("EofSym", token.Name); }
public void DetectAndIgnoreCommentLine() { string program = "-- Some comment 12345\r\n "; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("EofSym", token.Name); Assert.AreEqual("EOF", token.Value); }
public void AlwaysAppendEndOfFileTokenWhileScanning() { string program = "Begin"; var microScanner = new MicroScanner(program); microScanner.ScanAll(); var listOfTokens = microScanner.Output; Assert.AreEqual(2, listOfTokens.Count); Assert.AreEqual("BeginSym", listOfTokens[0].Name); Assert.AreEqual("EofSym", listOfTokens[1].Name); }
public void TurnEmptyProgamIntoEofSymToken() { var program = string.Empty; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("EofSym", token.Name); }
public void ReturnTokenWhenScanIsCalled() { string program = "Begin"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("BeginSym", token.Name); }
public void ReturnLexicalErrorWhenBadCharactersEncountered() { string program = "First<Second"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("Id", token.Name); Assert.AreEqual("First", token.Value); token = microScanner.Scan(); Assert.AreEqual("Lexical Error", token.Name, token.Value); Assert.AreEqual("Bad char value: '<'", token.Value); token = microScanner.Scan(); Assert.AreEqual("Id", token.Name); Assert.AreEqual("Second", token.Value); }
public void DetectSingleEqualAsError() { string program = "="; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("Lexical Error", token.Name); }
public void DetectColonFollwedByAnythingButEqualAsError() { string program = ":a"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("Lexical Error", token.Name); Assert.AreEqual("Bad char value: ':a'", token.Value); }
public void AllowCreationWithProgramAsString() { string program = "Begin End"; var scanner = new MicroScanner(program); Assert.AreEqual(program, scanner.Input); }
public void DetectAndReturnAssignOp() { string program = ":="; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("AssignOp", token.Name); Assert.AreEqual(":=", token.Value); }
public void DetectAndReturnSemiColon() { string program = ";"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("SemiColon", token.Name); }
public void DetectAndReturnRightParen() { string program = ")"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("RParen", token.Name); }
public void DetectAndReturnReadReservedWord() { string program = "Read"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("ReadSym", token.Name); Assert.AreEqual("READ", token.Value); }
public void DetectAndReturnPlusSymbol() { string program = "+"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("PlusOp", token.Name); }
public void DetectAndReturnMinusOp() { string program = "-"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("MinusOp", token.Name); }
public void DetectAndReturnLiteral() { string program = "abcdefghijklmnopqrstuvwxyz0123456789_ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("Id", token.Name); Assert.AreEqual(program, token.Value); }
public void DetectAndReturnComma() { string program = ","; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("Comma", token.Name); }
public void DetectAndReturnWriteReservedWord() { string program = "Write"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("WriteSym", token.Name); Assert.AreEqual("WRITE", token.Value); }
public void DetectAndReturnIntLiteral() { string program = "1234"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("IntLiteral", token.Name); Assert.AreEqual("1234", token.Value); }
public void AllowEmptyProgramAtCreation() { var microScanner = new MicroScanner(string.Empty); Assert.IsNotNull(microScanner); Assert.AreEqual(string.Empty, microScanner.Input); }
public void DetectAndReturnBeginSymbol() { string program = "Begin"; var microScanner = new MicroScanner(program); var token = microScanner.Scan(); Assert.AreEqual("BeginSym", token.Name); Assert.AreEqual("BEGIN", token.Value); }