编译原理实验,查了半天资料没找到好的,自己在原有代码基础上改了改,没考虑引号内的情况(主要是自己懒)。代码大体上是基于编译原理第三版改的,写法不算特别好,仅供大家参考。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <string>
#include <cstring>
#define _KEY_WORD_END "waiting for your expanding"
typedef struct
{
int typenum;
char * word;
} WORD;
using namespace std;
char input[255];
char token[255]="";
int p_input;
int p_token;
char ch;
char* KEY_WORDS[]={
"main","int","char","if","else","for","while",_KEY_WORD_END};
WORD* scaner();
int main()
{
int over=1;
WORD* oneword=new WORD;
printf("Enter Your words(end with $):");
scanf("%[^$]s",input);
p_input=0;
printf("Your words:\n%s\n",input);
while(over<1000&&over!=-1){
oneword=scaner();
if(oneword->typenum<1000)
printf("(%d,%s)",oneword->typenum,oneword->word);
over=oneword->typenum;
}
printf("\npress # to exit:");
scanf("%[^#]s",input);
return 0;
}
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(){
token[p_token]=ch;
p_token=p_token+