主要想保存一下实验代码
1.待分析的简单语言的词法
(1)关键字:begin , if , then , while , do , end
所有关键字都小写
(2)运算符和界符
(3)标识符(ID)整数型常数(NUM)通过正规式定义
(4)空格
2.各个单词符号对应的种别码
3.词法分析程序的功能
输入:所给文法的源程序字符串
输出:二元组构成的序列
要求:从输入文件中读取字符串,并把结果输出到文件中,其中,要求整数型常数要转化为二进制
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define _KEY_WORD_END "waiting for your expanding"
typedef struct{
int typenum;
char *word;
}WORD;
char input[255]; //输入换缓冲区
char token[255]="";//单词缓冲区
int p_input; //输入换缓冲区指针
int p_token; //单词缓冲区指针
char ch; //当前读入字符
char * rwtab[]={
"begin","if","then","while","do","end",_KEY_WORD_END};
void main(){
//从文件中读取数据
FILE *pFile1 = fopen("data.txt","r"); //获取文件指针
fseek(pFile1,0,SEEK_END); //把指针移动到文件的结尾 ,获取文件长度
int len=ftell(pFile1); //获取文件长度
rewind(pFile1);
int over=1;
fread(input,1,len,pFile1); //读文件
FILE *pFile2 = fopen("data1.txt", "wt+");
WORD * oneword = new WORD;
p_input=0;
printf("Your words:\n%s\n",input);
while(over<1000&&over!=-1){
//对源程序进行分析,直至结束符
oneword = scaner(); //获得一个新单词
if(oneword->typenum<1000)
{
fprintf(pFile2, "(%d,%s)\n",oneword->typenum,oneword->word);//打印种别码和单词自身的值
over = oneword->typenum;
}
}
printf("\npress # to exit:"); //按#退出程序
fclose(pFile1);
fclose(pFile2);
}
char m_getch(){
ch = input[p_input];
p_input=p_input+1;
return(ch);
}
//去掉空白字符
void getbc(){
while(ch == ' '||ch==10){
ch = input[p_input];
p_input =p_input+1;
}
}
//拼接单词
void concat(){
<