Example #1
0
        public void ParserExpCollection()
        {
            string sourceCode =
                "10 A = 1 + 1 - 2                       \n" +
                "20 A = A + 1 * 7                       \n" +
                "30 A = 1 + A / 8 - ( 11 + 2 )          \n" +
                "40 A = -(A + A) * C                    \n" +
                "50 A = A - C * 1 + B                   \n" +
                "60 A = \"TT\" + \"FF\"                 \n" +
                "70 A = 7 + B : B = 1 + 9               \n" +
                "80 A = 1 + 1 + 2 + A:B = 11 + 9";

            Tokenizer tokenizer = new Tokenizer(sourceCode);
            Parser parser = new Parser(tokenizer);

            parser.Parsing();

            // check statement
            List<Statement> statements = parser.STATEMENTS;

            if (statements.Count != 10)
                throw new Exception("statement count incorrect.");

            //TODO 
        }
Example #2
0
        /// <summary>
        /// print tokenizer 
        /// </summary>
        /// <param name="tokenizer"></param>
        protected void printTokens(Tokenizer tok)
        {
            tok.Reset();

            int lineNum = 1;
            Token t = tok.GetToken();
            // parse to tokens 
            while (t.m_type != Token.FILE_END)
            {
                // end of line 
                if (t.m_type == Token.EOL)
                {
                    System.Console.Write("\n");
                    lineNum++;
                }
                // error handler 
                else if (t.m_type == Token.ERROR)
                {
                    throw new Exception("Error token in line " + lineNum);
                }
                else
                {
                    if (t.m_type == Token.INT)
                        System.Console.Write(t.m_intVal + " ");
                    else if (t.m_type == Token.FLOAT)
                        System.Console.Write(t.m_floatVal + " ");
                    else if (t.m_type == Token.SYMBOL)
                        System.Console.Write(t.m_strVal + " ");
                    else
                        System.Console.Write(t.m_type.ToString() + " ");
                }

                t = tok.GetToken();
            }
        }
Example #3
0
        static void Main(string[] args)
        {
			string path = null;
			if (args.Length > 0) 
				path = args [0];
			else 
				path = "../../../../Bas/_tank.bas";
            // print the file path 
            System.Console.WriteLine("Run file: " + path);

            // read the source
            string sourceCode = System.IO.File.ReadAllText(path);

            // lex  
            Tokenizer tok = new Tokenizer(sourceCode);
            // parser 
            Parser parser = new Parser(tok);
            // runtime
            Runtime rt = new Runtime(parser);
            rt.SetAPI(new DebugAPI());

            rt.Run();

            // wait for key press 
            System.Console.ReadKey();
        }
Example #4
0
        public void ShowTokens()
        {
            string path = "../../../../Bas/_tank.bas";
            // read the source
            string sourceCode = System.IO.File.ReadAllText(path);

            // tokenizer 
            Tokenizer tok = new Tokenizer(sourceCode);

            printTokens(tok);
        }
Example #5
0
        /// <summary>
        /// run the program 
        /// </summary>
        /// <param name="code"></param>
        static public DebugAPI RunProgram( string code )
        {
            Tokenizer tokenizer = new Tokenizer(code);
            Parser parser = new Parser(tokenizer);
            Runtime rt = new Runtime(parser);

            DebugAPI api = new DebugAPI();
            rt.SetAPI(api);

            rt.Run();

            while (!rt.Step()) ;

            return api;
        }
Example #6
0
        public void Tokenizer()
        {
            string sourceCode =
            "testSymbol #1 123 17.0 \"hjb\" \r\n"   +
            "+-*/^"                                 +
            "=>< >=<=<>"                            +
            "AND OR NOT"                            +
            ";,:()"                                 +
            "LET DIM READ DATA RESTORE GOTO "       +
            "IF THEN ELSE FOR NEXT "                +
            "WHILE WEND TO STEP "                   +
            "DEF FN GOSUB RETURN ON "               +
            "REM this is comment \r\n"              +             // REM will be skip , replace with a EOL
            "PRINT OPEN CLOSE FIELD "               +
            "GET LSET PUT RSET WRITE "              +
            "INPUT INKEY$ "                         +
            ""                                      +    //TODO 
            "@";

            int[] typeList = new int[] 
            {
            Token.SYMBOL, Token.FILE_NUM, Token.INT, Token.FLOAT, Token.STRING, Token.EOL,
            Token.PLUS, Token.MINUS, Token.MUL, Token.DIV, Token.POWER,
            Token.EQUAL, Token.GTR, Token.LT, Token.GTE, Token.LTE, Token.NEG,
            Token.AND, Token.OR, Token.NOT,
            Token.SEMI, Token.COMMA, Token.COLON, Token.LEFT_PAREN, Token.RIGHT_PAREN,
            Token.LET, Token.DIM, Token.READ, Token.DATA, Token.RESTORE, Token.GOTO,
            Token.IF, Token.THEN, Token.ELSE, Token.FOR, Token.NEXT,
            Token.WHILE, Token.WEND, Token.TO, Token.STEP,
            Token.DEF, Token.FN, Token.GOSUB, Token.RETURN, Token.ON, 
            Token.EOL,
            Token.PRINT, Token.OPEN, Token.CLOSE, Token.FIELD,
            Token.GET, Token.LSET, Token.PUT, Token.RSET, Token.WRITE,
            Token.INPUT, Token.INKEY,
            //TODO 
            Token.ERROR, Token.FILE_END
            };

            Tokenizer tokenizer = new Tokenizer( sourceCode );

            for (int i = 0; i < typeList.Length; i++ )
            {
                Token tok = tokenizer.GetToken();

                if (tok.m_type != typeList[i])
                    throw new Exception("Token type incorrect. Must be " + typeList[i].ToString());
            }
        }
Example #7
0
        public void ParserIf()
        {
            string sourceCode =
                @"10 IF A>1 THEN PRINT C
                  20 IF C=2 THEN PRINT 11 ELSE PRINT 22
                  30 IF B<=1 GOTO 13
                  40 IF E>0 GOTO 11 ELSE 70
                  50 IF F < 6 AND G > 8 THEN PRINT theStr:C=17 ELSE 70";

            Tokenizer tokenizer = new Tokenizer(sourceCode);
            Parser parser = new Parser(tokenizer);

            parser.Parsing();

            // check statement
            List<Statement> statements = parser.STATEMENTS;

            if (statements.Count != 5)
                throw new Exception("statement count incorrect.");
            
            //TODO 

        }
Example #8
0
 /// <summary>
 /// constructor 
 /// </summary>
 /// <param name="tokenizer"></param>
 public Parser( Tokenizer tokenizer, int k = 10 )
 {
     m_tokenizer = tokenizer;
     m_tokenBuff = new Token[k];
 }