Ejemplo n.º 1
0
        /// <summary>
        ///   与えられたコードをインタータイプ宣言のために共通コードモデルとして生成します
        /// </summary>
        /// <param name = "language">対象言語</param>
        /// <param name = "code">コード断片</param>
        /// <returns></returns>
        public static List <UnifiedExpression> CreateIntertype(
            string language, string code)
        {
            XElement ast;
            var      actual = new List <UnifiedExpression>();

            switch (language)
            {
            case "Java":
                //classBodyとしてパースするために中括弧を補う
                code = "{ " + code + " }";
                ast  = JavaCodeToXml.Instance.Generate(code, p => p.classBody());
                var classBody = JavaProgramGeneratorHelper.CreateClassBody(ast);
                foreach (var e in classBody)
                {
                    var method = e as UnifiedFunctionDefinition;
                    var field  = e as UnifiedVariableDefinitionList;
                    if (field != null)
                    {
                        actual.Add(field);
                    }
                    if (method != null)
                    {
                        actual.Add(method);
                    }
                }
                break;

            case "JavaScript":
                ast = JavaScriptCodeToXml.Instance.Generate(code, p => p.program());
                var program = JavaScriptProgramGeneratorHelper.CreateProgram(ast);
                actual.AddRange(program.Body);
                break;

            case "C":
                throw new NotImplementedException();

            case "CSharp":
                throw new NotImplementedException();

            case "Python":
                throw new NotImplementedException();

            default:             //Ruby, VB // TODO Ruby言語の対応
                throw new InvalidOperationException("対応していない言語が指定されました");
            }
            return(actual);
        }
Ejemplo n.º 2
0
        public override UnifiedProgram GenerateWithoutNormalizing(string code)
        {
            var ast = JavaScriptCodeToXml.Instance.Generate(code, true);

            return(JavaScriptProgramGeneratorHelper.CreateProgram(ast));
        }