博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Magpie脚本解析器
阅读量:6607 次
发布时间:2019-06-24

本文共 2373 字,大约阅读时间需要 7 分钟。

Magpie程序语言

脚本解析器是脚本解析器的后续版本。

关于Monkey语言的功能,请参看我的另一篇文章:。

Monkey脚本解析器现在已经不再维护。所有的后续开发都会放在Magpie中。

Magpie语言包含了Monkey语言的所有功能,同时进行了如下扩展/更改:

  • 增加了类似Java8的可选类型(Optional)支持
  • Hash的key如果是字符串类型,则可以不需要带双引号。
  • 如果for循环中只有一个语句,则可以写成如下形式:for i in xxx => 语句
  • 增加了类似于C#的linq处理(80%)
  • 修复了一些小的bug

主页

开源不易,如果你喜欢此项目,请麻烦使用你的金手指帮忙star一下,谢谢!

您的支持,是对我的鼓励!

举例

下面是Magpie语言的一个使用linq例子:

class Linq {    static fn TestSimpleLinq() {        //Prepare Data Source        let ingredients = [            {Name: "Sugar",  Calories: 500},            {Name: "Egg",    Calories: 100},            {Name: "Milk",   Calories: 150},            {Name: "Flour",  Calories: 50},            {Name: "Butter", Calories: 200},        ]	//Query Data Source        ingredient = from i in ingredients where i.Calories >= 150 orderby i.Name select i        //Display        for item in ingredient => println(item)    }    static fn TestFileLinq() {        //Read Data Source from file.        file = newFile("./examples/linqSample.csv", "r")        //Query Data Source        result = from field in file where int(field[1]) > 300000 select field[0]        //Display        for item in result => printf("item = %s\n", item)        //Close file        file.close()    }    static fn TestComplexLinq() {        //Prepare Data Source        stringList = [            "A penny saved is a penny earned.",            "The early bird catches the worm.",            "The pen is mightier than the sword."         ]        //Query Data Source        earlyBirdQuery =            from sentence in stringList            let words = sentence.split(" ")            from word in words            let w = word.lower()            where w[0] == "a" || w[0] == "e" ||                  w[0] == "i" || w[0] == "o" ||                  w[0] == "u"            select word        //Display        for v in earlyBirdQuery => printf("'%s' starts with a vowel\n", v)    }}Linq.TestSimpleLinq()println("======================================")Linq.TestFileLinq()println("======================================")Linq.TestComplexLinq()//Test Optionalfn safeDivision?(a, b) {    if (b == 0){        return optional.empty();    } else {        return optional.of(a/b);    }}op = safeDivision?(10, 2)if (op.isPresent()) {    println(op)    let val = op.get()    printf("safeDivision?(10, 2)=%d\n", int(val))}复制代码

许可证

MIT

转载于:https://juejin.im/post/5c85e82f5188257ec70531fa

你可能感兴趣的文章
eclipse 的小技巧
查看>>
频率域滤波
查看>>
图片存储类型的种类、特点、区别
查看>>
GETTING UP AND RUNNING WITH NODE.JS, EXPRESS, JADE, AND MONGODB
查看>>
求二叉树第K层节点的个数
查看>>
MySQLs数据库建外键时自动跑到缩影处,真奇怪
查看>>
static关键字
查看>>
js 合并多个对象 Object.assign
查看>>
Java 反射机制
查看>>
Unity 碰撞检测中碰撞器与触发器的区别
查看>>
Elasticsearch配置文件说明
查看>>
初识java
查看>>
temporary Object and destructor
查看>>
xcode - 移动手势
查看>>
细说浏览器特性检测(1)-jQuery1.4添加部分
查看>>
古中国数学家的计算力真是惊人
查看>>
Java基础-算术运算符(Arithmetic Operators)
查看>>
C#编程(四十七)----------集合接口和类型
查看>>
【转】关于大型网站技术演进的思考(十二)--网站静态化处理—缓存(4)
查看>>
积跬步,聚小流------Bootstrap学习记录(1)
查看>>