public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
            {
                IOperandTerm[] terms = popTerms(line);
                if (!checkArgumentType(line, exm, terms))
                    return null;
                IOperandTerm term = null;
                if (terms.Length == 0)
                {
                    term = new SingleTerm(0);
                    if (!nullable)
                    {
                        if (line.Function.IsExtended())
                            warn("省略できない引数が省略されています。Emueraは0を補います", line, 1, false);
                        else
                            warn("省略できない引数が省略されています。Emueraは0を補いますがeramakerの動作は不定です", line, 1, false);
                    }
                }
                else
                {
                    term = terms[0];
                }

                if (line.FunctionCode == FunctionCode.REPEAT)
                {
                    if ((term is SingleTerm) && (term.GetIntValue(null) <= 0L))
                    {
                        warn("0回以下のREPEATです。(eramakerではエラーになります)", line, 0, true);
                    }
                    VariableToken count = GlobalStatic.VariableData.GetSystemVariableToken("COUNT");
                    VariableTerm repCount = new VariableTerm(count, new IOperandTerm[] { new SingleTerm(0) });
                    repCount.Restructure(exm);
                    return new SpForNextArgment(repCount, new SingleTerm(0), term, new SingleTerm(1));
                }
                ExpressionArgument ret = new ExpressionArgument(term);
                if (term is SingleTerm)
                {
                    Int64 i = term.GetIntValue(null);
                    ret.ConstInt = i;
                    ret.IsConst = true;
                    if (line.FunctionCode == FunctionCode.CLEARLINE)
                    {
                        if (i <= 0L)
                            warn("引数に0以下の値が渡されています(この行は何もしません)", line, 1, false);
                    }
                    else if (line.FunctionCode == FunctionCode.FONTSTYLE)
                    {
                        if (i < 0L)
                            warn("引数に負の値が渡されています(結果は不定です)", line, 1, false);
                    }
                }
                return ret;
            }
            public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
            {
                StringStream st = line.PopArgumentPrimitive();
                Argument ret = null;
                if (st.EOS)
                {
                    if(!nullable)
                    {
                        warn("引数が設定されていません", line, 2, false);
                        return null;
                    }
                    //if (line.FunctionCode == FunctionCode.PRINTFORML)
                    //	warn("PRINTFORMLの後ろに空白がありません(eramaker:\'PRINTFORML\'を表示)", line, 0, true);
                    ret = new ExpressionArgument(new SingleTerm(""));

                    ret.ConstStr = "";
                    ret.IsConst = true;
                    return ret;
                }
                StrFormWord sfwt = LexicalAnalyzer.AnalyseFormattedString(st, FormStrEndWith.EoL, false);
                IOperandTerm term = ExpressionParser.ToStrFormTerm(sfwt);
                term = term.Restructure(exm);
                ret = new ExpressionArgument(term);
                if(term is SingleTerm)
                {
                    ret.ConstStr = term.GetStrValue(exm);
                    ret.IsConst = true;
                }
                return ret;
            }
 public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
 {
     IOperandTerm[] terms = popTerms(line);
     if (!checkArgumentType(line, exm, terms))
         return null;
     if (terms.Length == 0)
     {
         ExpressionArgument ret = new ExpressionArgument(null);
         ret.ConstStr = "";
         ret.ConstInt = 0;
         ret.IsConst = true;
         return ret;
     }
     return new ExpressionArgument(terms[0]);
 }
 public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
 {
     StringStream st = line.PopArgumentPrimitive();
         string rowStr = null;
     if (st.EOS)
     {
         if (!nullable)
         {
             warn("引数が設定されていません", line, 2, false);
             return null;
         }
         rowStr = "";
         //1756 処理変更のために完全に見分けが付かなくなってしまった
         //if (line.FunctionCode == FunctionCode.PRINTL)
         //	warn("PRINTLの後ろに空白がありません(eramaker:\'PRINTL\'を表示)", line, 0, true);
     }
     else
         rowStr = st.Substring();
     if (line.FunctionCode == FunctionCode.SETCOLORBYNAME || line.FunctionCode == FunctionCode.SETBGCOLORBYNAME)
     {
         Color c = Color.FromName(rowStr);
         if (rowStr != "BLACK" && (c.R == 0 && c.G == 0 && c.B == 0))
             warn(line.Function.Name + "関数で指定された色名\"" +  rowStr + "\"は無効な色名です", line, 2, false);
     }
     Argument ret = new ExpressionArgument(new SingleTerm(rowStr));
     ret.ConstStr = rowStr;
     ret.IsConst = true;
     return ret;
 }
            public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
            {
                IOperandTerm[] terms = popTerms(line);
                if (!checkArgumentType(line, exm, terms))
                    return null;
                IOperandTerm term = null;
                ExpressionArgument ret;
                if (terms.Length == 0)
                {
                    ret = new ExpressionArgument(term);
                    return ret;
                }
                else
                {
                    term = terms[0];
                    ret = new ExpressionArgument(term);
                }

                if (term is SingleTerm)
                {
                    Int64 i = term.GetIntValue(null);
                    if (line.FunctionCode == FunctionCode.ONEINPUT)
                    {
                        if (i < 0)
                        {
                            warn("ONEINPUTの引数にONEINPUTが受け取れない負の数数が指定されています(引数を無効とします)", line, 1, false);
                            ret = new ExpressionArgument(null);
                            return ret;
                        }
                        else if (i > 9)
                        {
                            warn("ONEINPUTの引数にONEINPUTが受け取れない2桁以上の数数が指定されています(最初の桁を引数と見なします)", line, 1, false);
                            i = Int64.Parse(i.ToString().Remove(1));
                        }
                    }
                    ret.ConstInt = i;
                    ret.IsConst = true;
                }
                return ret;
            }
 public override Argument CreateArgument(InstructionLine line, ExpressionMediator exm)
 {
     StringStream st = line.PopArgumentPrimitive();
     Argument ret = null;
     if (st.EOS)
     {
         ret = new ExpressionArgument(null);
         return ret;
     }
     StrFormWord sfwt = LexicalAnalyzer.AnalyseFormattedString(st, FormStrEndWith.EoL, false);
     IOperandTerm term = ExpressionParser.ToStrFormTerm(sfwt);
     term = term.Restructure(exm);
     ret = new ExpressionArgument(term);
     if (term is SingleTerm)
     {
         ret.ConstStr = term.GetStrValue(exm);
         if (line.FunctionCode == FunctionCode.ONEINPUTS)
         {
             if (string.IsNullOrEmpty(ret.ConstStr))
             {
                 warn("引数が空文字列なため、引数は無視されます", line, 1, false);
                 ret = new ExpressionArgument(null);
                 return ret;
             }
             else if (ret.ConstStr.Length > 1)
             {
                 warn("ONEINPUTSの引数に2文字以上の文字列が渡されています(2文字目以降は無視されます)", line, 1, false);
                 ret.ConstStr = ret.ConstStr.Remove(1);
             }
         }
         ret.IsConst = true;
     }
     return ret;
 }