Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        public void DetectAndIgnoreWhitespaceSpaces()
        {
            var program = " ";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("EofSym", token.Name);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
        public void TurnEmptyProgamIntoEofSymToken()
        {
            var program = string.Empty;
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("EofSym", token.Name);
        }
Ejemplo n.º 6
0
        public void ReturnTokenWhenScanIsCalled()
        {
            string program = "Begin";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("BeginSym", token.Name);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        public void DetectSingleEqualAsError()
        {
            string program = "=";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("Lexical Error", token.Name);
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
 public void AllowCreationWithProgramAsString()
 {
     string program = "Begin End";
     var scanner = new MicroScanner(program);
     Assert.AreEqual(program, scanner.Input);
 }
Ejemplo n.º 11
0
        public void DetectAndReturnAssignOp()
        {
            string program = ":=";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("AssignOp", token.Name);
            Assert.AreEqual(":=", token.Value);
        }
Ejemplo n.º 12
0
        public void DetectAndReturnSemiColon()
        {
            string program = ";";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("SemiColon", token.Name);
        }
Ejemplo n.º 13
0
        public void DetectAndReturnRightParen()
        {
            string program = ")";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("RParen", token.Name);
        }
Ejemplo n.º 14
0
        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);
        }
Ejemplo n.º 15
0
        public void DetectAndReturnPlusSymbol()
        {
            string program = "+";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("PlusOp", token.Name);
        }
Ejemplo n.º 16
0
        public void DetectAndReturnMinusOp()
        {
            string program = "-";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("MinusOp", token.Name);
        }
Ejemplo n.º 17
0
        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);
        }
Ejemplo n.º 18
0
        public void DetectAndReturnComma()
        {
            string program = ",";
            var microScanner = new MicroScanner(program);

            var token = microScanner.Scan();
            Assert.AreEqual("Comma", token.Name);
        }
Ejemplo n.º 19
0
        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);
        }
Ejemplo n.º 20
0
        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);
        }
Ejemplo n.º 21
0
 public void AllowEmptyProgramAtCreation()
 {
     var microScanner = new MicroScanner(string.Empty);
     Assert.IsNotNull(microScanner);
     Assert.AreEqual(string.Empty, microScanner.Input);
 }
Ejemplo n.º 22
0
        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);
        }