Beispiel #1
0
 public InterpreterAstContext(LanguageData language, OperatorHandler operatorHandler = null) : base(language)
 {
     OperatorHandler = operatorHandler ?? new OperatorHandler(language.Grammar.CaseSensitive);
     base.DefaultIdentifierNodeType = typeof(IdentifierNode);
     base.DefaultLiteralNodeType    = typeof(LiteralValueNode);
     base.DefaultNodeType           = null;
 }
Beispiel #2
0
        public override void Initialize(AstContext context, ParseTreeNode treeNode)
        {
            base.Initialize(context, treeNode);
            var nodes = treeNode.GetMappedChildNodes();

            Target = AddChild(NodeUseType.ValueWrite, "To", nodes[0]);
            //Get Op and baseOp if it is combined assignment
            AssignmentOp = nodes[1].FindTokenAndGetText();
            if (string.IsNullOrEmpty(AssignmentOp))
            {
                AssignmentOp = "=";
            }

            BinaryExpressionType = CustomExpressionTypes.NotAnExpression;
            //There maybe an "=" sign in the middle, or not - if it is marked as punctuation; so we just take the last node in child list
            Expression = AddChild(NodeUseType.ValueRead, "Expr", nodes[nodes.Count - 1]);
            AsString   = AssignmentOp + " (assignment)";
            // TODO: this is not always correct: in Pascal the assignment operator is :=.
            IsAugmented = AssignmentOp.Length > 1;
            if (IsAugmented)
            {
                var ictxt = context as InterpreterAstContext;
                if (ictxt == null)
                {
                    throw new InvalidCastException();
                }
                ExpressionType       = ictxt.OperatorHandler.GetOperatorExpressionType(AssignmentOp);
                BinaryExpressionType = OperatorHandler.GetBinaryOperatorForAugmented(ExpressionType);
                Target.UseType       = NodeUseType.ValueReadWrite;
            }
        }
Beispiel #3
0
        public override void Initialize(AstContext context, ParseTreeNode treeNode)
        {
            base.Initialize(context, treeNode);
            var nodes = treeNode.GetMappedChildNodes();

            OpSymbol       = nodes[0].FindTokenAndGetText();
            Argument       = AddChild("Arg", nodes[1]);
            AsString       = OpSymbol + "(unary op)";
            ExpressionType = OperatorHandler.GetUnaryOperatorExpressionType(OpSymbol);
        }