private void TranscriptSentence(StringWriter writer, 手順定義 methodInfo, IPrototypeExpression expr)
        {
            string code = "";

            if (methodInfo is 外部手順定義)
            {
                var attrs = (methodInfo as 外部手順定義).MethodInfo.GetCustomAttributes(typeof(翻訳Attribute), false);
                if (attrs.Length > 0)
                {
                    code = (attrs[0] as 翻訳Attribute).Code;
                }
            }
            else if (methodInfo is Procedure)
            {
                var procedure = methodInfo as Procedure;
                code = procedure.GetAnnotationParam("翻訳");
                string funcName;
                if (code == null && funcNameList.TryGetValue(procedure, out funcName))
                {
                    code = funcName + "()";
                }
            }
            foreach (var item in methodInfo.Complements)
            {
                var pc = item as 実補語定義;

                if (pc != null)
                {
                    IPhrase phrase;
                    expr.TryGetPhrase(pc.Particle, out phrase);
                    code = code.Replace("【" + pc.ParameterName + "】", GenerateString(phrase));
                }
            }
            writer.Write(code);
        }
        private void GSDynamicCall(IStatement statement, StringWriter writer)
        {
            var  st         = statement as DynamicCallExpression;
            手順定義 methodInfo = st.Overloads[0];

            foreach (var method in st.Overloads)
            {
                if (method is Procedure)
                {
                    methodInfo = method;
                    break;
                }
            }
            TranscriptSentence(writer, methodInfo, st.Expression);
        }