Exemplo n.º 1
0
        public override Result VisitMnemonic_inst([NotNull] testParser.Mnemonic_instContext context)
        {
            // 命令語
            var instRet = Visit(context.inst());

            if (!instRet.Success)
            {
                return(instRet);
            }

            //オペランド
            var operands = new List <IOperand>();

            foreach (var item in context.operand())
            {
                var ret = Visit(item);
                if (!ret.Success)
                {
                    return(ret);
                }
                operands.Add(ret.Tag as IOperand);
            }

            var inst = instRet.Tag as Instruction;

            //まずは入力検証
            {
                //命令後に対する引数の数
                if (inst.Attribute.AcceptArgNum != operands.Count)
                {
                    return(Result.CreateError("引数の数が不正"));
                }

                //デバイスの種別(これは仕様がよくわからない)

                //オペランドの種類
            }

            //命令後実行
            {
                if (inst.Attribute.Dir == Direction.In)
                {
                    _plc.PushInputState(inst.Attribute.Func(_plc, operands));
                }
                if (inst.Attribute.Dir == Direction.Out)
                {
                    if (_plc.CanOutput())
                    {
                        inst.Attribute.Func(_plc, operands);
                    }
                    _plc.ClearInputState();
                }
            }
            return(Result.CreateSuccess(null));
        }
Exemplo n.º 2
0
 /// <summary>
 /// Exit a parse tree produced by the <c>mnemonic_inst</c>
 /// labeled alternative in <see cref="testParser.mnemonic"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitMnemonic_inst([NotNull] testParser.Mnemonic_instContext context)
 {
 }
Exemplo n.º 3
0
 /// <summary>
 /// Visit a parse tree produced by the <c>mnemonic_inst</c>
 /// labeled alternative in <see cref="testParser.mnemonic"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitMnemonic_inst([NotNull] testParser.Mnemonic_instContext context)
 {
     return(VisitChildren(context));
 }