游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: takaku

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

[复制链接]

0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-11-15 16:22:52 | 显示全部楼层
请大家注意:
后续的版本“Simulang+”
将支持这样的语法糖:state, diff (状态与微分)
global
    state s : T
    diff d : T
endglobal
相当于:
s_current : T
s_next : T

d_old : T
d_current : T

0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-12-2 18:13:50 | 显示全部楼层
大家好
后续版本:Simulang+ 将支持下面的语法糖:

global
    state s : Z
    diff d : Z
endglobal

即,转换成:

global
     s_current : Z
     s_next : Z

    d_old : Z
    d_current : Z
endglobal

其中,
state 是状态(即积分)
diff 是差分(即微分)

0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-12-4 16:30:16 | 显示全部楼层
Simulang-Full.rar (286.66 KB, 下载次数: 4)

库函数全部包装好了
(把所有的中断包装成了库函数)

注意!

运行需要 DirectX.dll DirectDraw, Sound, Input.dll


0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-12-5 14:35:45 | 显示全部楼层
PS 除了注意DirectX.dll
还需要注意:

箭头 ctrl + g 表示赋值
属于 ctrl + t 表示类型的定义

除法 ctrl + d
不等于 ctrl + e
大于等于 ctrl + k
小于等于 ctrl + l

0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-12-5 15:03:50 | 显示全部楼层
还有就是,
ctrl + a b c 都会插入非法的字符,显示为空格,编译会出错
(比如 输入 ctrl + d 除法号,打错了按成了 ctrl + f 这样会导致编译提示错误
此外,
new file open file 不会提示是否放弃当前文件,请大家记得保存

6

主题

91

帖子

613

积分

高级会员

Rank: 4

积分
613
QQ
发表于 2024-12-17 01:18:52 | 显示全部楼层
编译器后端有现成的工具,这个东西叫代码生成器,英文名codegen,这个工具是把汇编,各种自动定义的中间代码,或者vm代码,直接生成x86或者arm的二进制可执行程序或者函数库,最终生成的代码是机器码,连汇编这个环节都可以跳过了,代码生成器本身用C语言编写的,是一个复杂的函数库。

0

主题

25

帖子

193

积分

注册会员

Rank: 2

积分
193
发表于 2024-12-23 15:43:18 | 显示全部楼层
Re 楼上的亲
我的代码是在我自定义的VM里执行的
所以不是把vm代码转换成x86机器码
是把我的语言转换成我的汇编,再调用汇编器库,转换成byte code of my VM.

6

主题

91

帖子

613

积分

高级会员

Rank: 4

积分
613
QQ
发表于 2025-1-6 16:55:44 | 显示全部楼层
crystal2012 发表于 2024-12-23 15:43
Re 楼上的亲
我的代码是在我自定义的VM里执行的
所以不是把vm代码转换成x86机器码

中间代码的意义是什么呢?编译器的本质就是把复杂的表达式和函数语句最终拆解成简单的指令,按照CPU的工作模式去执行,解释器则是状态机,是可以随时跟用户交互的状态机,解释器本身也可以直接解析复杂的表达式和语句,现在有一种技术叫 WebAssembly,也就是说因为脚本执行的太慢了,现在web也在用机器码的技术来解决执行效率问题,所以,中间代码仅仅是为了解析和语法分析方便而设计的,毫无实际的意义。最终是执行,和状态机。

6

主题

91

帖子

613

积分

高级会员

Rank: 4

积分
613
QQ
发表于 2025-1-6 23:02:10 | 显示全部楼层
crystal2012 发表于 2024-12-23 15:43
Re 楼上的亲
我的代码是在我自定义的VM里执行的
所以不是把vm代码转换成x86机器码

你所谓的VM,这个无论怎么设计,最终代码的执行,也是VM编写的C程序,转化成C函数最终去执行,所以本质最终都是依靠C编译器,或者系统中执行C函数的shell的能力,而代码生成器可以绕过这个环节,直接生成机器码。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-22 21:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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