示例#1
0
    protected override BNode InnerClone(Dictionary <Value, Value> originalValueForClonedValue)
    {
        GotoNode gotoNode = CreateInstance <GotoNode>();

        gotoNode.position = CloneValue(originalValueForClonedValue, position);
        return(gotoNode);
    }
示例#2
0
    protected override BNode InnerClone(Dictionary <Value, Value> originalValueForClonedValue)
    {
        GotoNode cloned = CreateInstance <GotoNode>();

        cloned.destPos = destPos;
        return(cloned);
    }
示例#3
0
 public override void VisitGotoNode(GotoNode gt)
 {
     TACodeContainer.PushNode(new TacGotoNode()
     {
         IsUtility   = false,
         TargetLabel = "l" + gt.Label
     });
 }
示例#4
0
 public override void Visit(GotoNode node)
 {
     WriteIndent();
     ProgramBuilder.Append("goto ");
     ProgramBuilder.Append(node.Label);
     ProgramBuilder.Append(";");
     NewLine();
 }
示例#5
0
 public override void VisitGotoNode(GotoNode g) => GenCommand("", "goto", g.Label.Num.ToString(), "", "");
示例#6
0
 public virtual XzaarExpression Visit(GotoNode @goto)
 {
     return(null);
 }
示例#7
0
 public virtual void VisitGotoNode(GotoNode g)
 {
 }
 public override void VisitGotoNode(GotoNode g)
 {
     PreVisit(g);
     g.Label.Visit(this);
     PostVisit(g);
 }
 public override void VisitGotoNode(GotoNode g) => GenCommand("", "goto", g.Label.Num.ToString(CultureInfo.InvariantCulture), "", "");
示例#10
0
 public override void VisitGotoNode(GotoNode g)
 {
     Text += IndentStr() + "goto " + g.Id.Name;
 }
 public override void VisitGotoNode(GotoNode g)
 {
     Text += IndentStr() + "goto ";
     g.Label.Visit(this);
     Text += ";";
 }
示例#12
0
 public virtual void Visit(GotoNode node)
 {
 }
示例#13
0
 public override void Visit(GotoNode node)
 {
     OnEnter(node);
     base.Visit(node);
     OnExit(node);
 }
示例#14
0
 public virtual GotoNode Visit(GotoNode node)
 {
     return(node);
 }
示例#15
0
    protected override void Update()
    {
        if (Unit == null || Operation == null)
        {
            return;
        }

        if (underlay.sprite != null)
        {
            float target_image_alpha    = 0;
            float target_underlay_alpha = 1;

            if (this.IsPointedAt())
            {
                target_image_alpha    = 1;
                target_underlay_alpha = 0.1f;
            }

            Image.color = Image.color.AlphaChangedTo(
                Mathf.Lerp(Image.color.a, target_image_alpha, Time.deltaTime * 5));
            underlay.color = underlay.color.AlphaChangedTo(
                Mathf.Lerp(underlay.color.a, target_underlay_alpha, Time.deltaTime * 5));
        }

        description_text.gameObject.SetActive(this.IsPointedAt());

        SelectionOverlay.gameObject.SetActive(IsSelected);

        InputNode.gameObject.SetActive(Operation.TakesInput);
        OutputNode.gameObject.SetActive(Operation.HasOutput);
        GotoNode.gameObject.SetActive(Operation.TakesGoto);


        if (IsInProgramInterface)
        {
            if (InputNode.VariableTile != null)
            {
                Operation.Input.PrimaryVariableName = InputNode.VariableTile.Variable.Name;
            }
            if (OutputNode.VariableTile != null)
            {
                Operation.Output.PrimaryVariableName = OutputNode.VariableTile.Variable.Name;
            }
            if (GotoNode.GotoOperationTile != null)
            {
                Operation.Goto = GotoNode.GotoOperationTile.Operation;
            }
        }
        else if (IsInOperationMenu && IsSelected)
        {
            bool is_complete = false;
            if (operation.TakesGoto)
            {
                is_complete = GotoNode.GotoOperationTile != null;
            }
            else if ((!operation.TakesInput || InputNode.VariableTile != null) &&
                     (!operation.HasOutput || OutputNode.VariableTile != null))
            {
                is_complete = true;
            }

            if (is_complete)
            {
                Operation operation = Operation.Instantiate();
                if (operation.TakesInput && InputNode.VariableTile != null)
                {
                    operation.Input.PrimaryVariableName = InputNode.VariableTile.Variable.Name;
                }
                if (operation.HasOutput && OutputNode.VariableTile != null)
                {
                    operation.Output.PrimaryVariableName = OutputNode.VariableTile.Variable.Name;
                }
                if (operation.TakesGoto && GotoNode.GotoOperationTile != null)
                {
                    operation.Goto = GotoNode.GotoOperationTile.Operation;
                }

                Unit.Program.Add(operation);
                if (Input.GetKey(KeyCode.LeftShift))
                {
                    if (Unit.Program.Next == null)
                    {
                        Unit.Program.Next = operation;
                    }
                }
                else
                {
                    Unit.Program.Next = operation;

                    if (operation is Task)
                    {
                        Unit.Task = null;
                        operation.Execute(Unit);
                    }
                }

                InputNode.VariableName     = null;
                InputNode.IsSelected       = false;
                OutputNode.VariableName    = null;
                OutputNode.IsSelected      = false;
                GotoNode.GotoOperationTile = null;
                GotoNode.IsSelected        = false;
                IsSelected = false;
            }
        }

        if (!InputUtility.DidDragOccur &&
            this.IsPointedAt() &&
            !InputNode.IsPointedAt() && !OutputNode.IsPointedAt() && !GotoNode.IsPointedAt() &&
            this.UseMouseLeftRelease())
        {
            if (IsInOperationMenu)
            {
                IsSelected = true;
            }
            else if (IsInProgramInterface)
            {
                Unit.Program.Next = Operation;
                Operation.Execute(Unit);
            }
        }

        if (InputUtility.WasMouseRightReleased)
        {
            if (IsSelected)
            {
                IsSelected = false;
            }
        }

        if (IsSelected)
        {
            if (Operation.TakesInput && InputNode.VariableTile == null && !Operation.TakesGoto)
            {
                if (!InputNode.IsSelected)
                {
                    InputNode.IsSelected = true;
                }
            }
            else if (Operation.HasOutput && OutputNode.VariableTile == null)
            {
                if (!OutputNode.IsSelected)
                {
                    OutputNode.IsSelected = true;
                }
            }
            else if (Operation.TakesGoto && GotoNode.GotoOperationTile == null)
            {
                if (!GotoNode.IsSelected)
                {
                    GotoNode.IsSelected = true;
                }
            }
        }

        base.Update();
    }
示例#16
0
 public override void VisitGotoNode(GotoNode gt)
 {
     Text += gt.ToString();
 }
示例#17
0
        public ITreeNode Program()
        {
            ITreeNode programNode = new ErrorNode();

            switch (curTokenType)
            {
                case TokenType.BEGINBL:
                    Match(ref matchToken, TokenType.BEGINBL);
                    ITreeNode someStatement = Program();
                    BlockNode block = new BlockNode();
                    block.addStatement(someStatement);
                    while (curTokenType != TokenType.ENDBL)
                    {
                        someStatement = Program();
                        block.addStatement(someStatement);
                    }
                    Match(ref matchToken, TokenType.ENDBL);
                    programNode = block;
                    break;
                case TokenType.LABEL:
                    Match(ref matchToken, TokenType.LABEL);
                    LabelNode labeledBlock = new LabelNode(matchToken.getValue());
                    ITreeNode labeledStatement;
                    do
                    {
                        labeledStatement = Program();
                        labeledBlock.addStatement(labeledStatement);
                    }
                    while (curTokenType != TokenType.EOF);
                    programNode = labeledBlock;
                    break;
                case TokenType.INTDEC:
                    Match(ref matchToken, TokenType.INTDEC);
                    Match(ref matchToken, TokenType.ID);
                    programNode = new IdentifierDeclarationNode(IdentifierType.INT, matchToken.getValue());
                    Match(ref matchToken, TokenType.EOS);
                    break;
                case TokenType.BOOLDEC:
                    Match(ref matchToken, TokenType.BOOLDEC);
                    Match(ref matchToken, TokenType.ID);
                    programNode = new IdentifierDeclarationNode(IdentifierType.BOOL, matchToken.getValue());
                    Match(ref matchToken, TokenType.EOS);
                    break;
                case TokenType.FOR:
                    Match(ref matchToken, TokenType.FOR);
                    Match(ref matchToken, TokenType.LPAREN);
                    AssignmentNode init = (AssignmentNode)Program();
                    AssignmentNode step = (AssignmentNode)Program();
                    BooleanExpressionNode condition = (BooleanExpressionNode)BooleanExpression();
                    Match(ref matchToken, TokenType.RPAREN);
                    BlockNode forBody = (BlockNode)Program();
                    programNode = new ForNode(init, step, condition, forBody);
                    break;
                /*case TokenType.FUN:
                    Match(ref matchToken, TokenType.FUN);
                    IdentifierNode id = (IdentifierNode)Factor();
                    programNode = new FunctionNode(id);
                    Match(ref matchToken, TokenType.EOS);
                    break;*/
                case TokenType.GOTO:
                    Match(ref matchToken, TokenType.GOTO);
                    Match(ref matchToken, TokenType.ID);
                    IdentifierNode gotoLabel = new IdentifierNode(matchToken.getValue(), IdentifierType.LABEL);
                    programNode = new GotoNode(gotoLabel);
                    Match(ref matchToken, TokenType.EOS);
                    break;
                case TokenType.ID:
                    Match(ref matchToken, TokenType.ID);
                    IdentifierNode assignId = new IdentifierNode(matchToken.getValue(), IdentifierType.UNKNOWN);
                    Match(ref matchToken, TokenType.ASSIGN);
                    BooleanExpressionNode assignValue = (BooleanExpressionNode)BooleanExpression();
                    programNode = new AssignmentNode(assignId, assignValue);
                    Match(ref matchToken, TokenType.EOS);
                    break;
                case TokenType.IF:
                    Match(ref matchToken, TokenType.IF);
                    ITreeNode thenBranch;
                    ITreeNode elseBranch;

                    Match(ref matchToken, TokenType.LPAREN);
                    BooleanExpressionNode ifCondition = (BooleanExpressionNode)BooleanExpression();
                    Match(ref matchToken, TokenType.RPAREN);
                    Match(ref matchToken, TokenType.THEN);
                    thenBranch = (BlockNode)Program();
                    if (curTokenType == TokenType.ELSE)
                    {
                        Match(ref matchToken, TokenType.ELSE);
                        elseBranch = (BlockNode)Program();
                    }
                    else
                    {
                        elseBranch = new BlankNode();
                    }
                    programNode = new IfNode(ifCondition, thenBranch, elseBranch);
                    break;
                /*case TokenType.LET:
                    Match(ref matchToken, TokenType.LET);
                    IdentifierNode shortId = (IdentifierNode)Factor();
                    Match(ref matchToken, TokenType.ASSIGN);
                    BooleanExpressionNode subst = (BooleanExpressionNode)BooleanExpression();
                    Match(ref matchToken, TokenType.IN);
                    BooleanExpressionNode target = (BooleanExpressionNode)BooleanExpression();
                    programNode = new LetNode(shortId, subst, target);
                    Match(ref matchToken, TokenType.EOS);
                    break;*/
                case TokenType.PRINT:
                    Match(ref matchToken, TokenType.PRINT);
                    Match(ref matchToken, TokenType.LPAREN);
                    BooleanExpressionNode printArgument = (BooleanExpressionNode)BooleanExpression();
                    Match(ref matchToken, TokenType.RPAREN);
                    programNode = new PrintNode(printArgument);
                    Match(ref matchToken, TokenType.EOS);
                    break;
                case TokenType.WHILE:
                    Match(ref matchToken, TokenType.WHILE);
                    Match(ref matchToken, TokenType.LPAREN);
                    BooleanExpressionNode whileCondition = (BooleanExpressionNode)BooleanExpression();
                    Match(ref matchToken, TokenType.RPAREN);
                    BlockNode whileBody = (BlockNode)Program();
                    programNode = new WhileNode(whileCondition, whileBody);
                    break;
                case TokenType.EOF:
                    programNode = new BlankNode();
                    break;
                default:
                    Expect(TokenType.UNKNOWN, lookAheadToken);
                    break;
            }
            return programNode;
        }