脚本代码编辑器该怎么做?

runerback 2016-03-11 07:42:05
加精
有一款游戏的任务编辑器,里面可以用Lua写脚本,但它的代码编辑器并不好用,比如我写个变量,再次用到它的时候就没有其他提示,比如自动完成,自动验证这个变量是不是对的,因为可以随手写一个全局变量所以我不知道该怎么处理,比如在条件判断语句中进行验证等等,还有就是语法的错误提示,控件做的太别扭,那个错误提示框一直浮在边上,后看了下它的C++.Net后台代码发现是用一个间隔很小的Timer不停的验证不停的提示,导致一旦检测到错误,在改这段错误代码的时候明显感觉界面卡顿,红色波浪线的一行代码写完界面才更新。然而这些都能忍,最让人无法接受的是它不支持中文之前问的对话程序确实太超出范围了,但这个脚本代码编辑器我应该做得出来吧,求个整体上大致的思路。不包含编译调试等超出我能力范围的功能,只需要存取原版任务文件(xml)中代码部分的节点,这个也无需考虑。

我想用wpf来做,这样在界面样式控制上简单一些,但其他的就不是很清楚了,比如自动缩进,变量识别,基本语法和lua特殊语法的判断,颜色控制,错误提示等等。原来那个编辑器在代码超过100多行以后就已经感觉没法控制了,但vs里写C#就没这种感觉。

只求思路不要代码。。
...全文
4940 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
runerback 2016-06-29
  • 打赏
  • 举报
回复
最后问一个问题 循环嵌套的BFN定义要怎么放在Lex中? 比如:

prefixexp ::= var | functioncall | `(´ exp `)´
functioncall ::=  prefixexp args | prefixexp `:´ Name args
prefixexp 里面有functioncall ,而functioncall 里面有prefixexp ,该怎么处理?
runerback 2016-04-12
  • 打赏
  • 举报
回复
引用 15 楼 jennyvenus 的回复:
分析肯定要传进去,自动完成就不用了,可以在dll外面用代码做。
那怎么实现方法、变量的识别,比如说在vs编辑器里面,可以记下这个类里面声明过的方法名、变量名,这个要怎么处理,还有一行代码的结束要怎么判断,每次都传整个文件内容到lex里面不好吧,还是说这些都已经不是Lex需要做的东西,它只需要验证语法错误?挺混乱的。。
用户 昵称 2016-04-12
  • 打赏
  • 举报
回复
分析肯定要传进去,自动完成就不用了,可以在dll外面用代码做。
runerback 2016-04-12
  • 打赏
  • 举报
回复
Yacc和Lex终于配置好了,用的Flex和Bison,但是有个疑问就是,输入字符串再输出字符串怎么完成词法分析、自动完成等功能啊,要一边写代码一边传到Lex里面再传出来整个替换掉吗?
用户 昵称 2016-04-12
  • 打赏
  • 举报
回复
你说的lex,那个语法什么分析的不懂,光从scintilla这个控件来说,他要支持语法高亮,不需要lex支持,你需要编写语法高亮的函数。 假设语法高亮不是问题了,现在就是在什么时候弹出自动完成窗口了 假设按"."弹出自动完成的窗口,那么下一步就是弹出什么内容,一般就两种方法,就是增量分析,比如回车时分析刚才输入的行,但是这些不全面,往往有错 另一种就是直接分析整个文件,其实分析函数写好了,分析起来也不慢。
travie 2016-03-22
  • 打赏
  • 举报
回复
网上下载开源Notepad++代码,自己写一个Notepad++ Plugin DLL,你的需求都能解决。 我写过一个打印机驱动脚本插件,可以自行检查错误,关键词高亮等。
runerback 2016-03-18
  • 打赏
  • 举报
回复
我现在只做过C#的项目,lua做项目该怎么做,用 Lua for windows行么..
runerback 2016-03-18
  • 打赏
  • 举报
回复
最近又重修又上班还要写作业还要加班赶进度,累得慌看了下Yacc,但我现在不知道怎么把别的东西放进自己的项目中。。 另外我是想自己写着试试,并不是别人给的任务要在规定时间完成
勤奋的小游侠 2016-03-16
  • 打赏
  • 举报
回复
lua 代码编辑器有很多,你现在用的是哪一个? babelua 这个控件现在是比较好的一款,它直接用vs的编辑器。和你用c#的习惯差不多。 还有其它的 decoda luastudio luaedit 老实说,按你现在的情况,说明你其实还没有足够的精力来做编辑器这种基础工具的。 先换个现成的编辑器,把你的开发任务完成,等有空余时间再考虑做一个独立的lua编辑器吧。 如果你一定要现在就自己写一个,可以上github上面搜一下,上面有几个开源的lua项目,你在这个基础上面修改会快一些。
用户 昵称 2016-03-16
  • 打赏
  • 举报
回复
无他,基本上就是用scintilla这个控件,变量内容提示,自动完成都可以实现,他目前的scite支持相当复杂的东西,能调试python,一般人很难直接看懂那个架构,利用scintilla这个控件的开源软件有notepad++,听说也支持scite的所有功能。 如果有精力,也可以自己实现。
wanghui0380 2016-03-12
  • 打赏
  • 举报
回复
关键字高亮这类可以搞,不过你要提示语法错误,那么就不是简单的事情了,他需要实时去进行词法分析,看能否正确转换成语法树。 提示:BNF,Yacc
runerback 2016-03-12
  • 打赏
  • 举报
回复
引用 2 楼 shingoscar 的回复:
反正想想就是个很复杂的项目
确实比想象中复杂太多,看来只有慢慢磨了
runerback 2016-03-12
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
既然你要写 Lua 代码编辑器,当然最好是用 Lua 写一个啦。
真的假的
threenewbee 2016-03-12
  • 打赏
  • 举报
回复
简单的只要语法高亮的话,用richtext重绘
Poopaye 2016-03-11
  • 打赏
  • 举报
回复
https://babelua.codeplex.com/SourceControl/latest https://github.com/pkulchenko/ZeroBraneStudio/ 找到2个开源的项目你自己研究下吧 反正想想就是个很复杂的项目
  • 打赏
  • 举报
回复
既然你要写 Lua 代码编辑器,当然最好是用 Lua 写一个啦。你看的那个编辑器的那些垃圾机制(轮询“监控”),嘲笑它都不愿脏了自己的屏幕。 但是要自己写,而且用Lua写,还是要下一些苦功夫的。

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧