游戏开发论坛

 找回密码
 立即注册
搜索
楼主: Miu.C

用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正式

[复制链接]

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-6-22 10:47:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

去括号,就这么简单..............去了括号就按运算符优先级,然后从左到右

直到不能去括号为止。

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2008-6-22 11:51:00 | 显示全部楼层

Re: 用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

?没懂
你是如何检测一个表达式的合法性的?
比如2++3合法不?2--3合法不?
然后就是-号是怎么处理的?
你的范式呢?用的语法范式是?用的LL还是LR还是递归下降?

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-6-22 11:58:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

我没有检测,都是按照表达式正确的来算的。

2++3不合法,不合法的结果体现在程序运行不正确。

什么-号?你是指算数的那个减号?变成那就把这个符号左右两个元素相减啊?

范式...........我还没学那么深。只是按照自己的想法做的,所以时不时有些表达式解析不正确,唉,惭愧。
解析不正确就简化表达式好了。

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2008-6-22 12:09:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正


...是这样的。
脚本本身做为一种语言。人为的编写它难免出错。比如拼写错误。语法错误。等等。
你是检查完语法正确性后再执行?
你如何保证它的正确性?
从编译原理来说。解释或编译一个语言有如下步骤:
词法分析-》语法分析-》语意分析-》中间代码生成(可无)-》中间代码优化-》目标码生成(或者执行)
你的流程呢?。。说说吧。。呵呵
//-------------
表达式的问题。
比如我输入一个表达式。如果这个表达式是正确,那么请你给出答案。如果错误。请提示。
在任何的语言中表达式都是作为一个非常重要的部分。恩。有很多关键技术
先保证正确性吧。。你总不能限制用户的表达式吧?。。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-6-22 12:24:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

没有检查,或者说,检查的部分很少
比如include的文件是否存在?不存在就给个错误提示框等等。
没有语法,词法什么的检查
生成中间代码之前有一段初级的检查,要确定每一块函数/过程,不过也就是做这么点而已。

至于有些语句根本不存在等等错误,那要运行了(也就是解释了)才知道。

至于更深层的错误,看运行结果吧,不正确那就是出错了。然后自己在代码中插入messagebox或者Console来调试。

的确,表达式解析最核心了,我在这里用了不少功夫,但是依然很难解决。


少量语法分析-------->中间代码生成(主要工作也就是给各种循环分支结构加上层次标记)------->解释执行

我这里........只要不包含字符串处理的表达式一般都能正确解析,包含字符串处理的每个表达式只能有一层函数。比如可以int1:=left(str1,10);但是不能str2:=left(str1,len(str1)-2);因为它包含两层了。
...............

21

主题

136

帖子

165

积分

注册会员

Rank: 2

积分
165
发表于 2008-6-22 12:30:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

。。。。。你的语法是你自己规定的?
总得有规范吧?
字符集呢?

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-6-22 12:35:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

自己规定的,您要是觉得不好用也可以自己修改。
规范.........怎么说呢,以前写过一个规范,但是老是变动,变动,现在都没心情写什么规范了。

字符集?嗯.......也没时间写。

看来文档&教材要跟进才行。

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-6-22 12:36:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

可以建立两个栈,一个存操作数,一个存运算符。

解析时,如果当前是操作数,则将之压入操作数栈,如果是运算符,则先查看运算符栈的栈顶元素的优先级是否比
当前运算符的优先级高,如果是,则栈顶运算符出栈,同时操作数栈的两个栈顶元素出栈进行相关运算,再将运算结果重新入栈。之后再将当前运算符入栈。

括号的处理:遇到左括号则将它压入运算符栈,遇到右括号,则将运算符和对应的操作数一个个弹出作相应运算再将结果存入操作数栈。运算符栈弹出左括号时,则跟右括号相互匹配,表示括号内的运算已经完成。

------------------------------------------------
解释:
假设表达式中不存在括号,且只有+-×/这些二元运算符,则
由于二元运算符是写在第二个操作数前面的,故刚遇到它时无法进行运算,所以先将它压栈。等得到第二个操作数时,就可以对两个操作数进行运算,最后又将结果入栈。
由于栈是先进后出的,这样只要保证运算符栈里面靠栈底的元素优先级较低,就可以确保运算是按正确的优先级进行的。
当表达式中混入括号后,只要将括号内的东西看成一个子表达式并优先对它求值,直到遇到右括号为止,子表达式的求值结束,将结果存入操作数栈中。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2008-6-22 12:39:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

"可以建立两个栈,一个存操作数,一个存运算符。"

这个在编译原理里看过了,有一大章讲这个东西,但我还是.........替换字符串内容。

5

主题

972

帖子

975

积分

高级会员

Rank: 4

积分
975
发表于 2008-6-22 12:46:00 | 显示全部楼层

Re:用脚本来控制自己的游戏怎么样?Afflatus Script Engine 正

这个只要了解栈这个数据结构就可以做啦……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-21 22:33

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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