设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1362|回复: 22
打印 上一主题 下一主题

[胡扯] 捣鼓了个简单的解释语言

[复制链接]

Lv4.逐梦者

梦石
0
星屑
9712
在线时间
3226 小时
注册时间
2011-3-24
帖子
739

开拓者

跳转到指定楼层
1
发表于 2016-12-20 13:53:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Mr.Jin 于 2016-12-21 12:30 编辑

HamannScript(v0.1).zip (221.79 KB, 下载次数: 65)
(打不开的话就装个java吧…)

打算给自己游戏作剧情脚本用的,东拼西凑找资料就做了这么个东西出来
语法很简单,功能很有限,
看看能不能引出这方面的高人来指点指点啦

增添一个jar档,要是上面的打不开就试试这个了,不过必须装java了
jar.zip (68.67 KB, 下载次数: 45)
>>→Lanza Games 2020←<<
Lanza Schneider
浪子心,孤星梦永远流浪……
~不会放弃,我的精力永远充沛~
>>>>>Lanza Adventure<<<<<
>>>>>Lanza的新年派对!<<<<<
>>>>>Lanza的口袋心脏病!<<<<<

Lv1.梦旅人

梦石
0
星屑
50
在线时间
8 小时
注册时间
2016-12-20
帖子
6
2
发表于 2016-12-20 17:16:59 | 只看该作者
这是啥语言?

点评

自创的  发表于 2016-12-20 21:08
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
129
在线时间
124 小时
注册时间
2011-9-12
帖子
76
3
发表于 2016-12-21 00:21:34 | 只看该作者
于是这世界上有这么多语言,能做成嵌入式的也不少,还有很多现成的库啊解释器啊啥的。
现在搞自创语言的都是对编程语言有极大兴趣的真大神了吧,大部分工业用都用现成了……
感觉还是用个啥Lua啊Ruby啊交易语言(Py)啊括号神教(口胡)之类的比较好

点评

其实按照实现来说,变量没有单独的数据空间又进行赋值都属于绑定。。比如Ruby,a = 4; a = 5 完全可以实现为绑定两个不同数据。 a = a.next 当然也是  发表于 2016-12-22 09:00
咳咳,因为我的实现远远落后于设计。。最新的设计中,let是绑定,set是赋值,ref是引用变量。其中还包含动态变量和静态变量。  发表于 2016-12-22 08:55
Orz那个ICM我伏地膜……不过,为啥没有绑定语句反而先加赋值语句啊,这样不是一股AutoLISP的气息么……  发表于 2016-12-22 08:38
(println "Hello World!") 快来入我大Chill神教  发表于 2016-12-21 22:53
本帳號已經作廢。新ID是「湖中神劍」。
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
4
发表于 2016-12-21 00:38:19 | 只看该作者
本帖最后由 寒冷魔王 于 2016-12-21 22:32 编辑

额,居然要求32bit JRE,,我的电脑上是64位的。。。没法测试。。

表示这种东西基于JVM的没啥优势,除非宿主也是基于JVM的。。

要用在自己做的游戏?请问你的游戏是基于什么的?

如果是基于Java的话,配合起来倒是可以。。
用C++的话,建议改用C++写这个解释器。

与宿主使用相同的环境(编译环境(C++啥的)或者运行环境(JVM啥的)),能方便互相调用。
尤其是脚本语言这种,源码级调用宿主提供的接口是最好的。
二进制接口也不是不可以,但是还是源码级调用最好。

如果宿主和解释器使用同一编译/运行环境,解释器能够最大限度地利用宿主提供的东西(详见lua, RGSS),这样提供的对外接口才能比较方便的使用。


另,如果是打算在RGSS上跑解释器,要么用Ruby写(效率会很坑,不如直接用Ruby),要么生成个dll调用(建议大部分游戏逻辑也写在dll里面,不然传递效率也是个问题),要么把RGSS黑了重造一个。。哦对,还可以直接在Ruby上JIT生成机器码跑,,不过这个工程量可大了。。

嘛,总之加油吧

===================================
@Mr.Jin  水区禁止连帖我就在这里写了(然而晴兰大大就在评论区,表示十分害怕,大大别批评我 >_<)

看了一下源码(Procyon反编译的),表示LZ很厉害啊,Lexer、Parser啥的写得中规中矩的,可以感觉出来LZ熟练等级很高。。
→_→然而我没写过这种类型的Parser所以没怎么看。

表示,Interpreter部分太少了吧!Hamann一共1800+,Interpreter竟然才几十行。。。。

看得出来这个是直接跑在AST上的。当然直接跑AST上不是不行,不过如果LZ愿意的话不如做个Instruction Compiler?

感觉单纯的Parser不是很好玩(写起来麻烦又没啥太大成就感。。),Java版Parser可以考虑ANTLR(虽然没用过)。

我觉得好玩的地方在编译部分(生成字节码或者机器码),运行部分(扩展程序功能什么的),(当然其他的我也没做过>_<我只能说这么些了)最近在做静态优化,把运行期检查提前到编译期什么的,还是挺好玩的。

>_< 嘛,我只是个beginner,就随口说说。LZ加油。。

点评

可以的,现代编译器(解释器)parser占很小一部分,那些部分请加油~  发表于 2016-12-22 08:57
为了方便把所有类写到同个文件里了 以后拆开分不同的包了  发表于 2016-12-21 23:29
耦合有点高了,不过去耦也挺麻烦的_(:зゝ∠)_  发表于 2016-12-21 22:51
这里的AST因为是公用的,提取出来一部分,Parser一部分,DataBase相关及Interpreter一部分  发表于 2016-12-21 22:49
我反编译的缘故,顺序比较乱。。(按名称排列的class),,建议把Parser和Interpreter分开,(放在两个包里?Java不熟)  发表于 2016-12-21 22:47
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
7 小时
注册时间
2016-12-20
帖子
9
5
发表于 2016-12-24 23:29:19 | 只看该作者
JVM上面成熟的语言很多了,Xtend,Kotlin,Scala之类的,自创无意义。(当初自己也造了个轮子,发现然并卵,现在还是直接用Xtend(这货坑的要命,要不是我蠢看不懂Kotlin的文档))

点评

那还是以学习为目的啦  发表于 2016-12-25 17:57
Kotlin 简直好玩 见过一个用Kotlin写游戏引擎的 然后定义了一堆DSL简直甜到掉牙  发表于 2016-12-25 00:00
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-30 23:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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