コード例 #1
0
ファイル: Verifier.cs プロジェクト: Throttle/compiler
        public bool VerifyExpression(SymbolTable symbolTable, Expression expression)
        {
            //
            // Verify expression.
            //

            try
            {
                GetExpressionType(symbolTable, expression);
                return true;
            }
            catch (VerifierException x)
            {
                System.Diagnostics.Debug.WriteLine(x.Message);
                return false;
            }
        }
コード例 #2
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="value"></param>
 public Return(Expression value)
 {
     Value = value;
 }
コード例 #3
0
ファイル: Verifier.cs プロジェクト: Throttle/compiler
        public Type GetExpressionType(SymbolTable symbolTable, Expression expression)
        {
            if (expression is UnaryExpression)
            {
                UnaryExpression unary = (UnaryExpression)expression;
                return FindType(GetExpressionType(symbolTable, unary.Value), unary.UnaryOperatorType);
            }
            else if (expression is BinaryExpression)
            {
                BinaryExpression binary = (BinaryExpression)expression;
                return FindType(GetExpressionType(symbolTable, binary.Left), GetExpressionType(symbolTable, binary.Right), binary.BinaryOperatorType);
            }
            else if (expression is Literal)
            {
                Literal literal = expression as Literal;

                if (literal.LiteralType == LiteralType.Boolean)
                    return new Type(PrimitiveType.Boolean);
                if (literal.LiteralType == LiteralType.Character)
                    return new Type(PrimitiveType.Character);
                if (literal.LiteralType == LiteralType.Integer)
                    return new Type(PrimitiveType.Integer);
                if (literal.LiteralType == LiteralType.Real)
                    return new Type(PrimitiveType.Real);
                if (literal.LiteralType == LiteralType.String)
                    return new Type(PrimitiveType.Void);
            }
            else if (expression is Name)
            {
                return ((Variable)symbolTable.Find(((Name)expression).Value, SymbolType.Variable).SyntaxObject).Type;
            }
            else if (expression is Call)
            {
                return ((Call)expression).Type;
            }
            return null;
        }
コード例 #4
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public For(Body body, Assignment counter, Expression condition, Assignment initializer)
 {
     Body = body; Counter = counter; Condition = condition; Initializer = initializer;
 }
コード例 #5
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public If(Body elseBody, Body ifBody, Expression condition)
 {
     ElseBody = elseBody; IfBody = ifBody; Condition = condition;
 }
コード例 #6
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public Do(Expression condition, Body body)
 {
     Body = body;
     Condition = condition;
 }
コード例 #7
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 /// <summary>
 /// Creates a expression element object.
 /// </summary>
 public Element(Expression expression)
 {
     ElementType = ElementType.Expression;
     Expression = expression;
 }
コード例 #8
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public While(Body body, Expression condition)
 {
     Body = body;
     Condition = condition;
 }
コード例 #9
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="value"></param>
 public Continue(Expression value)
 {
     Value = value;
 }
コード例 #10
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public UnaryExpression(Expression indexer, Expression value, UnaryOperatorType unaryOperatorType)
 {
     Value = value; Indexer = indexer; UnaryOperatorType = unaryOperatorType;
 }
コード例 #11
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 /// <summary>
 /// Конструктор
 /// </summary>
 /// <param name="value"></param>
 public Break(Expression value)
 {
     Value = value;
 }
コード例 #12
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public BinaryExpression(Expression right, Expression left, BinaryOperatorType binaryOperatorType)
 {
     Right = right; Left = left; BinaryOperatorType = binaryOperatorType;
 }
コード例 #13
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 public Assignment(Expression value, Expression index, string name)
 {
     Value = value; Name = name; Index = index;
 }
コード例 #14
0
ファイル: Syntax.cs プロジェクト: Throttle/compiler
 /// <summary>
 /// конструктор
 /// </summary>
 public Argument(Expression value, PassMethod passMethod)
 {
     Value = value; PassMethod = passMethod;
 }