一、金湖X51 Forth编译器的安装 金湖X51 Forth编译器是用很早的VB6.0开发的软件,因此需要通过安装程序将VB6.0运行是需要的控件安装到现在的Windows系统中。 由于本软件使用的那些控件版本很老,安装过程中如果出现提示时,请选择保留现有的控件。 (1)由于以后还要往安装目录中增加库,为了方便找到,首先建一个金湖X51 Forth编译器的安装目录,比如: “D:\ 金湖X51” (2)金湖X51 Forth编译器的安装程序为“附件01_金湖X51_安装程序_241120.rar”,将其解压后的文件见下图: (3)双击运行“setup.exe”文件,出现以下开始安装界面。 (4)选择确定,出现安装目录选择界面: (5)选择“更改目录”,更改到刚才新建的目录,更改后的结果见下图: (6)单击计算机图标按钮将软件安装到指定的“D:\ 金湖X51”目录中。在安装时会出现下面的软件组选择界面: 选择继续进行软件安装,安装成功后出现提示界面: 选择确定完成安装。 (6)安装后“金湖X51”目录中新增了两个文件:
\
(7)以后双击“金湖x51_V31.exe”文件就可以运行程序了,并且软件运行中缺省的文件目录就是该目录,下图是金湖X51运行时的主界面。 在主界面中,屏幕分为上下两个部分,上面是输出信息部分,计算机输出给使用者看的信息显示在“文字”框里。 下面的部分是输入信息部分,当使用者按“编译”按钮选择选择Forth源程序后,被编译的程序会出现在“文字”框里。 (8)“金湖X51 Forth编译器”是“南湖 Word and Door计算机”的缩减版,仅仅保留了“南湖计算机”的Forth源程序编译功能。其中“Word and Door”的含义是通过Forth语言的一个个“词”和一扇扇计算机的“门”,我们将进入一个全新的“计算机世界”。 下图是“南湖计算机的主界面”: 除了Forth语言编译功能外,还有交互式的“虚拟计算机”的功能,可以执行用户的各种命令。
二、金湖X51 Forth编译器的测试 (9)本文“附件02_Forth_测试程序.RAR”压缩包中有一些测试程序。建议首先编译测试第一个范例程序“Forth_Demo_01.wdf”。 Forth源程序文件是文本文件,可以用记事本或者写字板等程序进行编辑,笔者推荐使用“附件03_NotePad++”作为源程序编辑器:首先一个Forth项目的源程序是由多个文本程序组成,NPP正好也是多文件编辑器。其次NPP有行号和缩进提示,适合计算机语言程序编辑,最后NPP有自动补充完整词的功能,可以减少程序关键字的错误。 下图是 “Forth_Demo_01.wdf” 范例程序,第一次出现后面做逐行解读: (10)与其他包括C语言在内的高级计算机语言不同,Forth计算机语言除了程序中的每个“词(Word)”之间用“空格”分开外(当然一个词不允许跨两行程序),允许程序员自己定义和创造各种语言特征、语法关键字和语法规则,并且Forth词允许用任何一种文字符号,包括在程序中混用中文和英文。Forth语言这个特征保证了它像人类语言一样是鲜活的和不断发展的。比如随着免签国家的增多,来中国旅游的外国人越来越多,英语语言也在发展,你大可以问老外“我的城市 City 不 City ?”。下面是百度的翻译 可惜了,它太守规矩了。事实上: 结论:一个优秀的计算机语言应该是像人类语言一样可以与时俱进的发展的,而不是死守陈规一成不变的,所以上一篇文章说“Forth是一种哲理”。 (11)第3行中“WD-Forth 语言”是“南湖计算机”使用的Forth语言的一个分支,是笔者在“标准Forth”中加入了C++的语法(比如很明显的双斜杆行注释“词”)、BASIC的语法、多年使用Forth的经验和计算机教学理念开发的,所以取名“我的Forth语言”。 但是WD-Forth语言是开放的,南湖计算机允许读者使用“我的Forth语言”创造一个属于“你的”Forth语言。比如你只要在第18行前加一行程序: CW_: 加 + ;_CW 就可以将第18行程序修改为: 111 222 100 * 加 .I 从此以后的程序就可以用汉字“加”来代替“+”,如此等等,就衍生出一种“你的Forth语言”了。 (12)第10行程序“New_Program”只有一个Forth字(在早期的Forth中文书中也将“Word”等同于一个“字”,笔者以后的文章中“Forth字”和“Forth词”一个意思),表示将编译器复位,重新开始编译一个新的“Forth”项目。如果没有这一行程序,编译还没有结束,还可以在前面编译的基础上接着编译后面的程序。 (13)第11行程序“RealFunctionOff”表示关闭浮点数功能,将后面程序中出现的数字串当做整数来处理。WD-Forth支持64位的浮点数功能。 (14)第12行程序“CaseSensitiveOn”表示打开“大小写敏感”功能,后面的程序中对于英文字母要像C语言一样区分大小写。当然程序中也可以随时关闭“大小写敏感”功能,后面的程序中对于英文字母要像BASIC语言一样不区分大小写。 (15)第14行程序“Root_Only”表示对后面的程序只检查“根目录”的Forth字典,这时编译器只根据“根目录”字典里的“词”来翻译后面程序中的每一个字,了解程序员究竟想要计算机干什么,然后正确地编译出对应的机器码来让计算机CPU执行,完成程序员的“意志”。 WD-Forth初始时有5个词汇(字典): 词汇( 1): Root:用来存放基本的Forth词,比如“+”、“-”等。 词汇( 2): Assembler:用来存放南湖虚拟计算机的虚拟指令集的词,比如“VM_Add”、“VM_Sub”等。 词汇( 3): Task:用来存放程序员自己定义的Forth词,比如上面提到的“加”。 词汇( 4): TM_ASM:用来存放编译器目标机的实际指令集,比如对于“金湖X51”编译器,就存放8051指令集的词“SETB”、“JNB”等。 词汇( 5): Meta:用来存放编译器为目标机建立起来的“元宇宙”的词,这些词实现对目标机的操作,比如词“Flash_Clear”将目标机的Flash的内容全部清干净。 (16)第15行程序“Task Definitions”表示将后面的程序新定义的“词”放到“Task词汇”中去,并且把“Task词汇”也加入到编译器的搜索词汇中,加入后就有两个词汇要搜索了,“Root”和“Task”。 (17)第18行程序“111 222 100 * + .I”是计算整数算术表达式“111+222*100”的值,并将整数结果显示出来。其中“.I”是显示堆栈顶上的整数的字。下面是运行的结果: 从图中上面的输出信息框可以看到计算结果是正确答案“22311”。 (18)第23行程序“ExitLoad”是表示退出当前文件的编译,忽略该程序文件以后得内容。
三、定制“你的”Forth语言 (19)下面是第2个范例“Forth_Demo_02.wdf”的程序: (20)第18行程序“CW_: 加 + ;_CW”表示在“Task词汇”中增加一个条目,用户程序里面的词“加”应该翻译为南湖计算机指令集里面的“+”指令。 按照Forth规则编译器先搜索“当前定义词汇”(Task词汇),然后再搜索“根目录”词汇(Root词汇),这行程序的意思就是告诉编译器从此以后用户程序里面的中文字“加”的意思就是将堆栈顶上的两个整数相加,结果放回堆栈顶,请编译器将这个操作编译为机器码给南湖计算机去执行。 第19行和第20行程序也是这个意思。 (21)第24行程序“111 222 1000 乘 加 显示整数”是计算整数算术表达式“111+222*1000”的值,并将整数结果显示出来。下面是运行的结果: 从图中上面的输出信息框可以看到计算结果是正确答案“222111”。 (22)当然“你的Forth”也可以和“我的Forth”开个玩笑。下面是第3个范例“Forth_Demo_03.wdf”的程序: (23)比起第2个范例,增加了第23行程序“CW_: 111 666 ;_CW”。 这行程序在“Task词汇”中增加一个条目,用户程序里面的词“111”应该翻译为南湖计算机指令集里面的整数“666”指令。 按照Forth规则编译器先搜索“当前定义词汇”(Task词汇),然后再搜索“根目录”词汇(Root词汇),如果搜索不到,就试图将这个Forth字转换为一个“数字”。 因此这行程序的意思就是告诉编译器从此以后用户程序里面的中文字“111”的意思不是“一百一十一”,而是一种“欺骗”或者“加密”,其实程序员的意思是这个词的意思是数字“六百六十六”,请编译器按照“六百六十六”这个数,将它压入堆栈去给南湖计算机去执行。 (24)因此第26行程序“111 222 1000 乘 加 显示整数”不再是计算整数算术表达式“111+222*1000”的值,并将整数结果显示出来,而是计算整数算术表达式“666+222*1000”的值,并将整数结果显示出来。 (25)“你的Forth”的运行结果来了: 如你所愿,结果等于“222666”。 对此,我只能说:这个不是“金湖X51编译器”和“我的Forth”的BUG,是“你的Forth”太狡猾了。 (26)所以Forth是“极客”武器库中顶级的武器,我对学生说“如果你碰到有什么程序解决不了的问题,请用Forth语言。如果你碰到连Forth 语言也解决不了的问题,请你自己再造一个你的Forth语言。”
忠告:越锋利的刀越容易伤到自己的手,好好玩Forth,不要把自己玩翻掉。
|