极度深寒拉莫斯:帮帮忙,我写的C词法不知道怎么写下去了 ...

来源:百度文库 编辑:中科新闻网 时间:2024/04/29 00:40:12
要求:
1;从磁盘文件上读一个C源程序,翻译成一个由单词内部码表示的C程序
2.把C单词分成
(1)保留字 0 编号
(2)分隔符 1 编号
(3)运算符 2 编号
(4)标识符 3 标识符名表地址
(5)常量
整型...4 0 dizhi
浮点...4 1 dizhi
字符...4 2 dizhi
字符串...4 3 dizhi
我只分了类,不知道下面该怎么办?而且程序有错误 ...我只想按这个思路...
/*如果是数字或小数点*/
if(currentchar>=0&¤tchar<=9||currentchar=='.'){
ch0=¤tchar;
arr[0]=currentchar;
while((currentchar=fgetc)>=0&&(currentchar=fgetc)<=9||(currentchar=fgetc)=='.'){
ch1=¤tchar;/*ch1指向的是保留字或标识符的最后一个字母*/
arr[i++]=currentchar;/*while结束时候arr保存的是数字,包括小数点(如果有)*/
currentchar=fgetc(in);/*while结束时候保存的是下一个开始字符*/
}
for(j=0;j<i;j++){
if(arr[j]='.')
fprintf(out,"%d,%d,%s\n",4,1,arr);
else
fprintf(out,"%d,%d,%s\n",4,3,arr);
}
ch0=ch1;
}
}

首先,你应该写出各种词法规则,如:
整形:
S->ST
T->0|1|2|3|4|5|6|7|8|9
上面这个整形定义没有对开始为0的禁止;比如:0000,是合法整形;
浮点形:这个比较麻烦:
S->T.T
T->TF
F->0|1|2|3|4|5|6|7|8|9
变量是以下词法:
S->TF
T->a|b|……|z|A|B|……|Z
F->_|N|T
N->0|1|2|3|4|5|6|7|8|9
你按照这些词法先写出判断是否为该词的程序,然后可以进行以下分类:
变量:是否为关键字,是否为普通变量;这种判断可以根据你保留的关键字表判断;
大学毕业设计曾经写过一个编译器;不过你如果想写编译器,这种做法不太好,最好还是根据C语言的语法写程序;先变成伪代码,然后再考虑连接为执行程序的事;没有必要这么早考虑代码实现;
先弄明白它的词法吧,至于C语言的词法,很多地方都可以弄到;

翻译成内部码表示的C程序?

翻译之后的C程序用什么来表示? 单词内部码?这是什么?

不明白,你这样做,就跟在编译C程序一样.

我们写的C程序就是文本形式, 我们用的软件(TC或者什么)的编译器通过我们输入的文本,进行编译执行