public AssignmentStatment(TokensList tokensList)
        {
            children.Add(new VaribleStatment(tokensList));

            Token token = tokensList.GetToken();

            if (token.kind != Constants.ASSIGN_OP)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.ASSIGN_OP + " but took  " + token.kind.ToString());
            }

            token = tokensList.SeeToken();
            if (token.kind == Constants.MATH)
            {
                children.Add(new MathStatment(tokensList));
            }
            else if (token.kind == Constants.BRACKET_L)
            {
                children.Add(new ArrayAssignment(tokensList));
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.MATH + " or " + Constants.BRACKET_L + " but took  " + token.kind.ToString());
            }
        }
        public VaribleDeclarationPart(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.VAR)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.VAR + " but took  " + token.kind.ToString());
            }

            while (true)
            {
                token = tokensList.SeeToken();
                if (token.kind == Constants.IDENTIFIER)
                {
                    children.Add(new VaribleDeclaration(tokensList));
                }
                else
                {
                    break;
                }
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.ENDVAR)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.ENDVAR + " but took  " + token.kind.ToString());
            }
        }
        public MathExpression(TokensList tokensList)
        {
            children.Add(new Factor(tokensList));

            while (true)
            {
                Boolean      isOperator   = false;
                MathOperator mathOperator = new MathOperator(tokensList, ref isOperator);
                if (mathOperator.getTokensList().Count > 0)
                {
                    children.Add(mathOperator);
                }
                if (isOperator)
                {
                    children.Add(new Factor(tokensList));
                }
                else
                {
                    break;
                }
            }
            if (children.Count > 3)
            {
                Token token = tokensList.SeeToken();
                throw new System.Exception("Line " + token.lineNo.ToString() + " too long math expression ");
            }
        }
        public IfStatment(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.IF)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.IF + " but took  " + token.kind.ToString());
            }

            children.Add(new BoolStatment(tokensList));

            token = tokensList.GetToken();
            if (token.kind != Constants.THEN)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.THEN + " but took  " + token.kind.ToString());
            }

            children.Add(new StatmentPart(tokensList));

            token = tokensList.SeeToken();
            if (token.kind == Constants.ELSE)
            {
                token = tokensList.GetToken();
                //children.Add(token);

                children.Add(new StatmentPart(tokensList));
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.ENDIF)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.ENDIF + " but took  " + token.kind.ToString());
            }
        }
        public VaribleDeclaration(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind == Constants.IDENTIFIER)
            {
                children.Add(token);
                Program.identifiers.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.IDENTIFIER + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.COLON)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.COLON + " but took  " + token.kind.ToString());
            }

            children.Add(new Type(tokensList));

            token = tokensList.GetToken();
            if (token.kind != Constants.SEMICOLON)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.SEMICOLON + " but took  " + token.kind.ToString());
            }
        }
        public Prgm(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.PROGRAM)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.PROGRAM + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind == Constants.IDENTIFIER)
            {
                children.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.IDENTIFIER + " but took  " + token.kind.ToString());
            }

            children.Add(new Block(tokensList));

            token = tokensList.GetToken();
            if (token.kind != Constants.ENDPROGRAM)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.POINT + " but took  " + token.kind.ToString());
            }
        }
        public WriteStatment(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.WRITE)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.WRITE + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.FROM)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.FROM + " but took  " + token.kind.ToString());
            }

            token = tokensList.SeeToken();

            if (token.kind == Constants.IDENTIFIER)
            {
                children.Add(new VaribleStatment(tokensList));
            }
            else if (token.kind == Constants.MATH)
            {
                children.Add(new MathStatment(tokensList));
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.IDENTIFIER + " or " + Constants.MATH + " but took  " + token.kind.ToString());
            }
        }
        public RelationalOperator(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind == Constants.EQ_OP)
            {
                children.Add(token);
            }
            else if (token.kind == Constants.NE_OP)
            {
                children.Add(token);
            }
            else if (token.kind == Constants.MORE_OP)
            {
                children.Add(token);
            }
            else if (token.kind == Constants.LESS_OP)
            {
                children.Add(token);
            }
            else if (token.kind == Constants.LE_OP)
            {
                children.Add(token);
            }
            else if (token.kind == Constants.GE_OP)
            {
                children.Add(token);
            }

            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.RELATIONAL_OPERATOR + " but took  " + token.kind.ToString());
            }
        }
        public BoolExpression(TokensList tokensList)
        {
            children.Add(new Factor(tokensList));

            children.Add(new RelationalOperator(tokensList));

            children.Add(new Factor(tokensList));
        }
Beispiel #10
0
        static void Main(string[] args)
        {
            TokensList tokensList = new TokensList("Output.txt");

            try
            {
                Prgm     prgm     = new Prgm(tokensList);
                TreePass treePass = new TreePass(prgm);
            }
            catch (Exception e)
            {
                Console.Write(e);
            }
        }
        public IntegerType(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind == Constants.INTEGER)
            {
                children.Add(token);
                Program.identifiers.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.INTEGER + " but took  " + token.kind.ToString());
            }
        }
Beispiel #12
0
        public Program()
        {
            TokensList tokensList = new TokensList("Output.txt");

            try
            {
                Prgm     prgm     = new Prgm(tokensList);
                TreePass treePass = new TreePass(prgm);
            }
            catch (Exception e)
            {
                Console.Write(e);
                isCorrect = false;
            }
        }
        public VaribleStatment(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind == Constants.IDENTIFIER)
            {
                children.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.IDENTIFIER + " but took  " + token.kind.ToString());
            }

            token = tokensList.SeeToken();
            if (token.kind == Constants.BRACKET_L)
            {
                token = tokensList.GetToken();
                if (token.kind != Constants.BRACKET_L)
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_L + " but took  " + token.kind.ToString());
                }
                else
                {
                    children.Add(token);
                }
                token = tokensList.GetToken();
                if (token.kind == Constants.CONST_INT || token.kind == Constants.IDENTIFIER)
                {
                    children.Add(token);
                }
                else
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.CONST_INT + " or " + Constants.IDENTIFIER + " but took " + token.kind.ToString());
                }

                token = tokensList.GetToken();
                if (token.kind != Constants.BRACKET_R)
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_R + " but took  " + token.kind.ToString());
                }
                else
                {
                    children.Add(token);
                }
            }
        }
        public StatmentPart(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.BEGIN)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BEGIN + " but took  " + token.kind.ToString());
            }

            children.Add(new Statment(tokensList));

            token = tokensList.GetToken();
            if (token.kind != Constants.END)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.END + " but took  " + token.kind.ToString());
            }
        }
        public Type(TokensList tokensList)
        {
            Token token = tokensList.SeeToken();

            if (token.kind == Constants.INTARRAY)
            {
                children.Add(new ArrayType(tokensList));
            }
            else if (token.kind == Constants.INTEGER)
            {
                children.Add(new IntegerType(tokensList));
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.INTEGER + " or " + Constants.INTARRAY + " but took  " + token.kind.ToString());
            }
        }
        public Statment(TokensList tokensList)
        {
            Token token;

            while (true)
            {
                token = tokensList.SeeToken();
                if (token.kind == Constants.IDENTIFIER)
                {
                    children.Add(new AssignmentStatment(tokensList));
                }
                else if (token.kind == Constants.READ)
                {
                    children.Add(new ReadStatment(tokensList));
                }
                else if (token.kind == Constants.WRITE)
                {
                    children.Add(new WriteStatment(tokensList));
                }
                else if (token.kind == Constants.IF)
                {
                    children.Add(new IfStatment(tokensList));
                }
                else if (token.kind == Constants.WHILE)
                {
                    children.Add(new WhileStatment(tokensList));
                }
                else if (token.kind == Constants.MATH)
                {
                    children.Add(new MathStatment(tokensList));
                }
                else
                {
                    break;
                }

                token = tokensList.GetToken();
                if (token.kind != Constants.SEMICOLON)
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.SEMICOLON + " but took  " + token.kind.ToString());
                }
            }
        }
        public ArrayAssignment(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.BRACKET_L)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_L + " but took  " + token.kind.ToString());
            }

            while (true)
            {
                token = tokensList.GetToken();
                if (token.kind == Constants.CONST_INT)
                {
                    children.Add(token);
                }
                else
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.CONST_INT + " but took  " + token.kind.ToString());
                }

                token = tokensList.SeeToken();
                if (token.kind == Constants.COMMA)
                {
                    token = tokensList.GetToken();
                    //children.Add(token);
                }
                else
                {
                    break;
                }
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.BRACKET_R)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_R + " but took  " + token.kind.ToString());
            }
        }
Beispiel #18
0
        public MathExpression(TokensList tokensList)
        {
            children.Add(new Factor(tokensList));

            while (true)
            {
                Boolean      isOperator   = false;
                MathOperator mathOperator = new MathOperator(tokensList, ref isOperator);
                if (mathOperator.getTokensList().Count > 0)
                {
                    children.Add(mathOperator);
                }
                if (isOperator)
                {
                    children.Add(new Factor(tokensList));
                }
                else
                {
                    break;
                }
            }
        }
        public MathStatment(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind != Constants.MATH)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.MATH + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.PARANTHESIS_L)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.PARANTHESIS_L + " but took  " + token.kind.ToString());
            }

            children.Add(new MathExpression(tokensList));

            token = tokensList.GetToken();
            if (token.kind != Constants.PARANTHESIS_R)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.PARANTHESIS_R + " but took  " + token.kind.ToString());
            }
        }
        public ArrayType(TokensList tokensList)
        {
            Token token = tokensList.GetToken();

            if (token.kind == Constants.INTARRAY)
            {
                children.Add(token);
                Program.identifiers.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.INTARRAY + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.BRACKET_L)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_L + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind == Constants.CONST_INT)
            {
                children.Add(token);
                Program.identifiers.Add(token);
            }
            else
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.CONST_INT + " but took  " + token.kind.ToString());
            }

            token = tokensList.GetToken();
            if (token.kind != Constants.BRACKET_R)
            {
                throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.BRACKET_R + " but took  " + token.kind.ToString());
            }
        }
        public MathOperator(TokensList tokensList, ref Boolean isOperator)
        {
            Token token = tokensList.SeeToken();

            if (token.kind == Constants.MINUS || token.kind == Constants.PLUS ||
                token.kind == Constants.MULT || token.kind == Constants.DIV || token.kind == Constants.MOD)
            {
                isOperator = true;
                token      = tokensList.GetToken();
                children.Add(token);
            }

            else
            {
                if (token.kind == Constants.PARANTHESIS_R)
                {
                    isOperator = false;
                }
                else
                {
                    throw new System.Exception("Line " + token.lineNo.ToString() + " : expected " + Constants.MATH_OPERATOR + " but took  " + token.kind.ToString());
                }
            }
        }
Beispiel #22
0
 public TokensList(TokensList tokens)
 {
     tokensList = new List <Token>(tokens.GetTokens());
 }
        public Block(TokensList tokensList)
        {
            children.Add(new VaribleDeclarationPart(tokensList));

            children.Add(new StatmentPart(tokensList));
        }