- 注册时间
- 2007-8-16
- 最后登录
- 1970-1-1
|
这个构思很早就有了,但是一直没有公布,主要是遇到了一些问题自己不能解决,
也没有找到相关的知识,所以写出来大家出出主意。
首先用TXT文本写出一个可以正常运行的Basic程序,当然,转换过来的也可以,不过必须没有语法错误,所有变量必须声明!
修改步骤
一:行号(把所有的行号转化为lava行号)
1 基本行号
把第一个空格前的数字加一个前缀g,剩下的行号就是把换行符后面的数字加上前缀g,这样所有出现在每行第一个行号都可以变为lava行号。
例如:10 END=>g10:exit(0);
2 goto后的行号
goto 后有空格,把空格后面的数字加前缀g.
3 then后的行号
这个比较麻烦,会出现两种情况,(1)then 后紧接行号,这个和goto一样处理,(2)then 后面的 在“:”于“:”之间的纯数字加前缀g.
4 else 后的行号
同then.
5 gosub后的行号
后面讨论.
6 on ... goto ...
这个比较复杂,要拆开。应该写成if(...=1)goto XXXX;....;if(...=n)goto XXXX;
同样后面的数字也要加前缀g.
7 on ... gosub ...
后面再做处理。
注意:行号后面都要加,空格+冒号。
二:gosub函数
为什么是函数呢?这里可以把gosub子程序当作函数来处理。
处理方法:
1 gosub子程序函数化:
把gosub 后面从行号地方开始到return写成一个函数,具体方法就是把开始的行号写成函数名s+行号,例如:20 cls=>void s20()。后面的return去掉把这段程序写到{}里。
2 gosub 语句
写为 void +空格+s+行号+();
3 on ... goto ...
写为if(...=1)s行号1();...;if(...=n)s行号n();
三:变量声明
整形变量x%对应int x;
浮点对应long x;注:以后的浮点计算要用模拟函数来计算,如果不涉及浮点,可以把计算手动简化。
字符串x$=>x[255]
四:简单的语句
1 PRINT "a","b";"c";"d"
=>printf("a\nbcd\n");
PRINT "x=";x;"+y";y;a$
=>printf("x=%d+%d"%s,x,y,*a);
2 INKEY$=>getchar();
3 peek(199)=>Inkey();
4 很多语句都比较简单,这里省略。
五:复杂语句
1表达式,等号换为双等号,AND=>&&,OR=>||,NOT=>!,
<> => !=,分别作相应的转换。
例:a=(c+d)*(a=b AND NOT e) => a=(c+d)*(a==b && !e);
2.....
其他的我已经构思完毕,处于保密不能公布。
但有一个问题一直没有弄明白,
文件读取,bas的文件读取非常混乱,每个变量都都不一样,非常的复杂,
请问有没有好的方法呢? |
|