谁有用TC开发basic语言的程序,提供代码或思路的都感谢!
记得有本书上有这方面的例子,可是我看到的书是盗版的,而且时间久了不但看不清而且错误很多,我想学学开发语言的思路,希望指点。 问题点数:20、回复次数:15Top
1 楼freefalcon(心宇—消失中...)回复于 2004-05-04 10:20:10 得分 5
什么意思?
要做BASIC编译器吗?首先您得学习编译原理吧Top
2 楼xhggg(xh)回复于 2004-05-04 10:36:31 得分 0
书上写的很简单,分为两个部分
1为表达式词法分析
2为解释程序
但有些没有写全,我在网上也没有搜索到相关内容。
不是想做编译程序,而是解释程序,就是读一行执行一行的,语句不多只有10几个,就像basicA或GwBasic一样,只不过比这两个还要简单,也没有IDE。
程序我也输入完了,不少错误的部分也改完了,但执行起来还是不对。
问题可能出在词法分析上,而且PRINT命令还不完整。基本就是这样。Top
3 楼mme(dog)回复于 2004-05-04 15:06:50 得分 0
以前有人做过而且贴出来的,但是现在找不到了
有篇文章有介绍,说有个好像是荷兰的家伙,用10多20行C代码就做了个basic的编译器,挺过瘾的。Top
4 楼julyclyde(Java初学(大学不教只好自己学))回复于 2004-05-04 15:49:42 得分 0
www.cstc.net.cn
20行代码就做basic编译器是绝对不可能的。大概是front-end之类的东西吧?Top
5 楼great801225(白眉)回复于 2004-05-04 16:03:56 得分 0
先看一看程序解译和编译原理,这个对你会很有用的!不要勿略算法原理。Top
6 楼cngdzhang()回复于 2004-05-04 16:06:01 得分 10
看
梁肇新的<<编程高手箴言>> P165
有一个比较完整的
Top
7 楼xhggg(xh)回复于 2004-05-09 09:56:44 得分 0
我看了一点<<编程高手箴言>> ,在书店看的,不清楚print语句部分是否完整。
里面的程序就是我提到的Turbo C大全上面的
请问谁有这本书的光盘,我想要里面的代码?哪里能下载这个光盘?谢谢了Top
8 楼xiaonian_3654(你猜猜(我要打光棍,小乔嫁不了))回复于 2004-05-09 10:00:36 得分 0
我有一个1536个字节的Basic解释器!
不过不是我写的,代码特别难懂,IOCCC上的获奖程序Top
9 楼xhggg(xh)回复于 2004-05-09 10:07:31 得分 0
谢谢你
我想要一份啊?
xhggg@21cn.com
Top
10 楼xhggg(xh)回复于 2004-05-09 10:42:48 得分 0
TO:
xiaonian_3654(你猜猜)
Top
11 楼conglingkaishi(请不要给我分)回复于 2004-05-09 10:53:51 得分 0
你指的是编译器还是编辑器?差距可大喽。编译器的话,你要学词法分析等编译原理知识;编辑器的话,调用别人的编译器就可以了,你要做的就是读,或者你做专业一点,来个语法高亮显示。Top
12 楼xhggg(xh)回复于 2004-05-09 11:12:00 得分 0
TO:
conglingkaishi(从零开始)
不是编译器或编辑器,而是解释器,小basic不需要ide,程序完成后,在命令行中打入名称,参数为你要解释的basic原程序,解释器就会一行一行的解释执行,如:
C:\>copy con a.bas
print "This is a s_basic prog!"
input "enter a number:",x
a=x*100
print a
end
F6
C:\>sbasic a.bas
Tis is a s_basic prog!
enter a number:5
500
C:\>Top
13 楼conglingkaishi(请不要给我分)回复于 2004-05-10 08:05:53 得分 0
恩?人家说要在TC下开发BASIC程序的例子,请问您这是不是DOS的SHELL?还是直接的DOS系统使用?Top
14 楼xhggg(xh)回复于 2004-05-10 09:39:41 得分 0
现在的问题是 print 语句无法计算表达试的值,输出字符串或变量没问题,如:
C:\>type a.bas
input a
print a
print a+10
C:\>sbasic a.bas
?65
65
C:\>
函数如下:
void print()
{
int answer;
int len=0,spaces;
char last_delim;
do {
get_token();
if(tok==EOL || tok==FINISHED) break;
if(token_type==QUOTE) {
printf(token);
len += strlen(token);
get_token();
}
else {
putback();
get_exp(&answer);
get_token();
len += printf("%d",answer);
}
last_delim= *token;
if(*token==';') {
spaces=8-(len % 8);
len += spaces;
while(spaces) {
printf(" ");
spaces--;
}
}
else if(*token==','){
spaces=1-(len % 1);
len += spaces;
while(spaces) {
printf("");
spaces--;
}
}
else if(tok!=EOL && tok!=FINISHED) serror(0);
}while (*token==';' || *token==',');
if(tok==EOL || tok==FINISHED) {
if(last_delim != ';' && last_delim!=',') printf("\n");
}
else serror(0);
}
Top
15 楼yswift(眼睛)回复于 2004-05-10 13:26:04 得分 5
看看 lua 的原码, 他完全是用ANSI C实现.
www.lua.orgTop




