VB编译器计划重启(唠叨篇)

1 篇文章 0 订阅

       为vb写编译器的想法其实早就产生过,13年底就在阿珊的VB群里提过,马上被人带偏话题。在其他两三个群里也不了了之。

        今年6月1日终于决定自己写编译器。凌晨就在嘿嘿菌的群里讨论,看看有没有同好者。几个爱讨论的讨论起来还是挺热闹的。6月2日下午有人看到聊天记录又问起我要做编译器的事,乘机又顺便传销了一下,本想拉拢一些苦力过来帮忙。可惜大多数朋友都不看好。特别我说要用vb6写vb编译器,说VB不支持这不支持那云云。

        世界上c系列的编译器太多了,没必要做。做也无法超越别人。而vb是一个被微软遗弃的孩子。


        我的核心思想是,我要做一个能编译vb工程的编译器。他有vb6原有的语法支持和特点(如:开发简单,容错性高),又能解决vb6最蛋疼的问题(如多线程、标准dll、内联汇编、提高执行效率、unicode支持等)。而我开发目标是能编译原有VB6工程创建的工程。所以最终目的还有一个,就是写完后,能编译自身。

         我想等我做出一定功能了,也估计有人愿意进坑的。

        然后就开始漫长的长征之旅。计划一年左右写出来。
        第四天,又去阿珊的VB群里找人,大家都在精神上支持我。有了这股力量,我觉得我没必要再去其他群找人了。


         之后一段日子里,晚上就在嘿嘿菌的群直播写编译器。群友参与进来一边分析一边写一边讲解和讨论。司仪菌最热心,经常深夜单独陪我。

         前期虽然已经很注意向后兼容,代码还是重构了好几次。有点慢,进度还不错。

为写PE文件。实现了PE头的编写,添加了代码区、数据区、导入表、RVA与RAW地址转换、导出表。

资源区是个比较复杂的逻辑,加上又要工作,一停就停了快半年。没办法,要糊口。(因为没去外地工作,收入不稳定)


        12月1日晚,被司仪菌催,开始继续编写vb编译器。先复习了之前的代码。因为也没先看PE资源方面,就准备实现一个窗体和消息循环。在写的时候发现用汇编写。一些结构体变量之类的,用汇编写(我用vb封装过一个汇编类)很累人,最后用处也不大。就准备先解析编译  只有API调用和 一个mian函数的工程(其实就一个模块)。

            开始有几天在群聊,慢慢都去睡觉了,最后就剩下我和司仪。2日凌晨四点左右司仪从麦克风那边传来呼噜声——告诉我他是真爱。九点我编译第一个exe成功了。


Attribute VB_Name = "Module1"
Option Explicit

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function CloseWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function CopyFile Lib "kernel32" Alias "CopyFileW" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long
Private Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Private Declare Function MessageBox Lib "user32" Alias "MessageBoxW" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

'第一个编译器
'只能识别一个变量,且是long
'       大小写都敏感,改了就不行
Sub Main()
    Dim k&
    k = GetForegroundWindow()
    CloseWindow k

    mouse_event &H8001, 65535, 65535, 0, 0
    CopyFile "I:\asp空间.txt", "I:\xx22.txt", 0

    Beep 2000, 500
    MessageBox 0, "Hello World", "我的VB编译器", 0
End Sub

      之前都是手动DIY可执行程序,这个是第一个编译,虽然有无数的问题。他是一个里程碑。

      3日,实现了第一个可导出的标准dll,虽然还是烂得可以,但很高兴。


      4日,群里遇到了编程王者,通过举例对比等修辞手法谈vb过时,vb烂。(其中还介绍个vb编译器visia compiler,让我代码从这里抄好了)我被说得无言以对。要我没进度,或要他早说几个月,我就放弃了。司仪菌眼尖,看出visia compiler是个c语法的。讨论吸引了YY菌的注意,他提了很多意见。我表示对COM不熟,他就主动承担的给我讲解COM的任务。

      9日,10日YY菌讲解标准dll实现vb里的COM。两次讲到快天明。发现真如嘿嘿菌所说,YY是个大宝库。虽然我消化,但对COM认识很多,消化完代码就差不多了。然并没时间,估计得等个很多天。


       剩下大块都很费时间了。

       PE头解析: 资源,异常处理;

       解释部分有:代码的整体解析分块

       基础编译部分:基本语句汇编化,异常处理,

       低级封装:基础函数、COM、active、控件、类模块、Form类模块等等。

       高级封装:高级函数


        15日做代码整体解析,支持新功能前,发现需要预先把新语法规则设定好。

于是写了篇征集贴 http://tieba.baidu.com/p/4214619038 ,看看大家需要些什么,语法怎么定。

        帮人做项目,超时别人不用了,快完成,别人不要了,亏死了。

        再看看讨论帖,觉得题目有问题,一定是题目的问题。


        停了两天电,21日,初步实现EXE图标和资源。

       

        休息了几天。30日,已修补了资源和图标的bug,发现还有未知问题...异常处理的实现真不懂诶。先去找找异常处理的基础文章,看看能不能手工DIY实现一个异常处理了。









             






               




       

      

       



这个标题,相信大家已经期待很久了。。 经过一个寒假的努力,终于完成了梦寐以求的小机专用的BBasic编译器。 配合我的小机版连接器,完全可以在小机上生成BIN文件,从而实现梦寐以求的小机编程。 再加上尘曲写的那个小机LibMaker,天狼星的MapEditor,可以完整地构成了小机专用的开发环境。 现在说明开发包里各程序的的操作方法: Name: BBCompiler.cvm Function: 编译你所写的源程序 Usage: 1.用小机上的记事本写下自己的源程序,并将其改名为“Base.txt”,无需更改目录。 2.打开cvm虚拟机,运行BBCompiler.cvm。你将看到选择界面,此时按确认键开始编译,编译完成,将在A盘Source目录下生成Test.Txt为汇编文件。 3.编译过程中若出现错误,请用电子图书打开A盘Source目录下的Reports.Txt,根据提示修改程序中的错误。 需要注意的: 1. 修改了出现在原编译器上的Put,Seek语句不支持逗号后接常量的Bug. 2.数组的各下维间必须用逗号来分隔。 3.由于生成了Temp文件,以致无法正确定位行号,各位请原谅。 4.字符串常量是直接保存到汇编文件中的,不会改变其大小写,因此你可以放心地插入汇编。 5.支持了十六进制,八进制,二进制常数,表示法为&H001(十六进制数),&O44(八进制),&B00101(二进制)。 6.支持两种流程控制语句,break(跳出该层循环)和continue(继续本次循环)。 7.一行语句总字节大小不得超过256B。 8.除INPUT语句外,(我想这个在彩屏机上也没有意义),其他语句均支持。 Name: BBLinker.cvm Function: 连接汇编码 Usage: 请看我以前的帖子,这里不再赘述。 需要注意的: 请看我以前的帖子,这里不再赘述。 Name: LibMaker.cvm Function: 创建资源文件 Usage: 1.在A盘根目录下创建一个文件夹,名字可以随意取。 2.将资源图片(*.Bmp)全部拷贝到该文件夹下,并按资源ID顺序重命名(如:1,2,3..)。 3.启动cvm虚拟机,运行LibMaker.cvm。 4.按提示输入文件夹名和资源图片数,开始生成资源文件。 5.生成完毕,将在该文件夹下创建一个与该文件夹同名的Lib文件,这就是你要的资源文件了。 需要注意的: 若不知道如何输入请参看我以前的帖子。 在此图示一下操作步骤: 编译->连接->将A:\Source目录下的Test.Bin改为你想取的名字->拷贝到BBasic文件夹下[创 建资源文件->拷贝到BBasic文件夹下]->启动BB虚拟机,调试程序。 其中[]中的内容可省略。 如果还有不懂的请跟帖或在QQ上问我。 注意一下: 1.程序均为cvm语言编写,cvm虚拟机请自行下载并安装。 2.未经原作者同意,不可随意对源码进行篡改或转载,也不允许对程序本身进行任何反向操作。 3.如有Bug请通知原作者本人。 谢谢合作。 小机编译器,连接器,LibMaker均在此,请自行下载并解压到小机根目录下以安装 下载信息 [文件大小:18.3 KB 下载次数:294] 点击浏览该文件:bbtools.rar 再此希望大家能够支持我。 谢谢。 Copyright(C)BBK club All rights reserved 2011
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值