游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7805|回复: 6

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

[复制链接]

4

主题

14

帖子

124

积分

灌水组

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


4

主题

14

帖子

124

积分

灌水组

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

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

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

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 4 天前 | 显示全部楼层
大家好
我打算放弃*自己*写编译器

VM和ASM早(4年前)就已经写好

以后花钱雇人写,100万日元)
(调用ASM库)

暂时先用我的VM的汇编码

0

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 4 天前 | 显示全部楼层
我又打算,继续写

因为:
看了编译原理教材,
都是语法“树”

但是我的语言没有“树”
(因为比如 x=a+b+c => t=a+b; x=t+c)

既然连树都没有,那么就简单多了,
也不需要看编译原理书了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-9-8 11:20

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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