游戏开发论坛

 找回密码
 立即注册
搜索
查看: 37332|回复: 19

编译器写了一部分,大家帮忙看看(面向过程)

[复制链接]

4

主题

14

帖子

124

积分

灌水组

积分
124
发表于 2024-7-15 17:24:02 | 显示全部楼层 |阅读模式
编译器写了一部分,大家帮忙看看(面向过程)
QQ 1286236708
compiler.zip (18.17 KB, 下载次数: 137)


4

主题

14

帖子

124

积分

灌水组

积分
124
 楼主| 发表于 2024-7-26 14:55:15 | 显示全部楼层
“to C#”的转换器已经全部写好了(包括C#的支持类库)
(这是高级语言转高级语言的转换器,而不是编译器)

PROJECTS CSLib.zip (602.27 KB, 下载次数: 152)

4

主题

14

帖子

124

积分

灌水组

积分
124
 楼主| 发表于 2024-7-30 20:14:41 | 显示全部楼层
大家好 最近决定重构:
compiler编译出来的字节码原本是在vm里运行的,操纵内存地址
现在是编译成中间代码,在“解释器”里运行(解释器支持变量名)

然后to C#的转换器就不需要了,
改为了“商朝字母”(我发明的字,不支持unicode,有6百多字)
直接转换成C#

4

主题

14

帖子

124

积分

灌水组

积分
124
 楼主| 发表于 2024-8-4 13:10:11 | 显示全部楼层
大家好 这两天又觉得,
(支持变量名的)“解释器”的实现太过繁琐了,
所以还是在vm里运行(操纵内存地址)

----但是语法要改得简单,比如说:
if b
do f()
endif
do g()
改成
if b goto _f;
goto _f_end;
_f:
do f()
_f_end:
do g()
再比如说:
x = a + b + c +d
改成
t=a+b
s=t+c
x=s+d
再比如
ret a + b
ret f(x)
改成
t=a+b
ret t
t=f(x)
ret t

4

主题

14

帖子

124

积分

灌水组

积分
124
 楼主| 发表于 2024-8-10 19:33:31 | 显示全部楼层
大家好,这么“简化”代码受不受得了?
答案是 yes

实际的代码里,很少用到 a+b+c
一般就 a+b 就可以了

至于 g(f(x))倒是比较常用,
但是函数嵌套会降低可读性

至于 if b goto label
Basic就是这样的

0

主题

29

帖子

251

积分

禁止发言

积分
251
发表于 2024-9-4 17:18:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

29

帖子

251

积分

禁止发言

积分
251
发表于 2024-9-4 18:20:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

29

帖子

251

积分

禁止发言

积分
251
发表于 2024-10-20 13:06:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

29

帖子

251

积分

禁止发言

积分
251
发表于 2024-11-3 04:21:02 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

0

主题

29

帖子

251

积分

禁止发言

积分
251
发表于 2024-11-3 04:30:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-1 06:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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