吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4834|回复: 9
收起左侧

[其他原创] 【原创源码】 C#编写一款自己的脚本语言.第三章

[复制链接]
moodlee 发表于 2016-3-3 18:01
本帖最后由 moodlee 于 2016-3-3 19:35 编辑

第三章 三月
听说三月是花开的季节,迎春花烂漫,桃花朵朵开,还有腊梅雏菊郁金香。
我突然有一种冲动:
我想邀请她,与她一步一步漫步在花丛、河畔。
我想凝视她,看那淡淡的微笑揉进明月的余晖。
——————————
这次,我们直接抽象成:A?B?C?D
——————————
你是否这样想:
"A?B?C?D".Split('?')---(注意哦,这里,我们是通过String来处理的)
——————————
那我们的功夫可就白费了!
嘘,我要告诉你一个秘密:其实,?是一个函数!
看:?(x,y)
——————————
你说,String愿意和?(x,y)合作吗?
不知道你有没有明白我说的,嘻嘻。
——————————
那,她愿意和我做朋友吗?


免费评分

参与人数 1热心值 +1 收起 理由
Cizel + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| moodlee 发表于 2016-3-3 22:08
这边对 ?(x,y)举个例子:
A?B可以这样理解:
A?B=?(A,B)
——————————
1+2=+(1,2)=3
3^2=^(3,2)=9
...
说明书 发表于 2016-3-3 18:30
[C#] 纯文本查看 复制代码
  public  dynamic EvalOut(string str)
        {
            var cp = new CompilerParameters();
             cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.ReferencedAssemblies.Add("system.core.dll");
            cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;
            var code = new StringBuilder();
            code.Append("using System; using System.Data;  using System.Xml; using System.Linq;");
            code.Append("namespace HFA{public class _Evaluator{public object EvalOut(){");
            var cc = str.Contains("return ") ? str : string.Format("return {0};", str);
            code.Append(cc + "}}}");
           var cr = new CSharpCodeProvider().CompileAssemblyFromSource(cp, code.ToString());
                if (cr.Errors.HasErrors)
                {
                    var error = new StringBuilder();
                    foreach (CompilerError err in cr.Errors) error.AppendFormat("{0}", err.ErrorText);
                    throw new Exception("输入不正确:" + error.ToString());
                }
                var x = cr.CompiledAssembly.CreateInstance("HFA._Evaluator");
                return x.GetType().GetMethod("EvalOut").Invoke(x, null);
        }

纯C#代码,动态求值

免费评分

参与人数 2热心值 +2 收起 理由
饺子不过好吃 + 1 我很赞同!
LzSkyline + 1 有技术含量

查看全部评分

 楼主| moodlee 发表于 2016-3-3 18:02
xglys 发表于 2016-3-3 18:25
不错   和我以前上学时候 在青鸟学的流程 差不多
华小子 发表于 2016-3-3 18:37 来自手机
厉害。。
cowboys2010 发表于 2016-3-3 19:08
努力学习,谢谢楼主。
朝云行雨 发表于 2016-3-3 19:17
感谢楼主的分享!
lixinmingo 发表于 2016-3-4 10:31
支持楼主,期待更新!
Mrack 发表于 2016-3-4 18:34
文采飞扬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-6-17 10:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表