⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x.cpp

📁 词法分析器实现简单的词法分析词法分析 器实现简单的词法分析
💻 CPP
字号:
#include <stdio.h>
#include <string.h>
#include <process.h>
#define MAX 50
void main()
{
FILE *intxt,*outtxt;      //存放输入字符串和输出单词串的文件
char a[MAX];       //a数组存放单词符号
char dchar;     //dchar存放当前输入字符
int i=0;        //a数组的一个指针
     //以读方式打开输入文件
if((intxt=fopen("输入.txt","r"))==NULL)
{
 printf("can not open file\n");
 exit(0);
}
//以写方式打开输出文件
if((outtxt=fopen("输出.txt","w"))==NULL)
{
 printf("cannout open out\n");
    exit(1);
}
//去掉开头空格
dchar=fgetc(intxt);
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
int ch;

while(dchar!='#')   //以#符号结束
{
//常数部分判断
if((dchar>='a'&&dchar<='z')||(dchar>='A'&&dchar<='Z')||(dchar>='0'&&dchar<='9')||dchar=='('||dchar==')'||dchar=='{'||dchar=='}'||dchar=='>'||dchar=='<'||dchar==';'||dchar==':'||dchar=='+'||dchar=='-'||dchar=='*'||dchar=='/'||dchar=='='||dchar=='!='||dchar=='>='||(ch=dchar)=='<='||dchar==','||dchar=='['||dchar==']')
{
i=0;//清空a字符数组
if(dchar>='0'&&dchar<='9')
{
 a[i++]=dchar;
    dchar=fgetc(intxt);//再读入下一个字符
    while(dchar>='0'&&dchar<='9')
 {
    a[i++]=dchar;
    dchar=fgetc(intxt);
 }
    if(dchar!='.')//如果当前读入的符号不为小数点,则常数读完毕,输出此常数
 {
    a[i++]='\0';
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",29,'"',a,'"',")");//格式化输出到目标文件,29代表种别码, arr为内码值,规定用数字本身代表
 }
    else//当前字符为小数点则继续向下读入
 {
    a[i++]=dchar;
    dchar=fgetc(intxt);
    while(dchar>='0'&&dchar<='9')
 {
    a[i++]=dchar;
    dchar=fgetc(intxt);
 }
    a[i++]='\0';
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",29,'"',a,'"',")");
 }
    while(dchar==' ')
 { 
 dchar=fgetc(intxt);
 }
}
//判断标识符和关键字部分
if((dchar>='a'&&dchar<='z')||(dchar>='A'&&dchar<='Z'))
{
i=0;//清空a字符数组
    while((dchar>='a'&&dchar<='z')||(dchar>='0'&&dchar<='9')||(dchar>='A'&&dchar<='Z'))
 {
    a[i++]=dchar;
    dchar=fgetc(intxt);
 }
//把字符数组a和关键字表比较,判断单词串是关键字还是标识符
    a[i++]='\0';
    if(strcmp(a,"main")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",1,'"',a,'"',")");
    else if(strcmp(a,"if")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",2,'"',a,'"',")");
    else if(strcmp(a,"else")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",3,'"',a,'"',")");
    else if(strcmp(a,"int")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",4,'"',a,'"',")");
	else if(strcmp(a,"return")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",5,'"',a,'"',")");
	else if(strcmp(a,"void")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",6,'"',a,'"',")");
	else if(strcmp(a,"while")==0)
    fprintf(outtxt,"%s%d,%c%s%c%s\n","(",7,'"',a,'"',")");
 else
 fprintf(outtxt,"%s%d,%c%s%c%s\n","(",28,'"',a,'"',")");
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
//判断标识符 包括:= + - * / < <= > >= ==,!= ; : , { } [ ] ( ) 
if(dchar=='+')
{
    fprintf(outtxt,"%s%d,%c%c%c%s\n","(",9,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='-')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",10,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='*')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",11,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='/')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",12,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='=')
{
 i=0;
 a[i++]=dchar;
 dchar=fgetc(intxt);
 if(dchar=='=')
 {
  a[i++]=dchar;
  a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",17,'"',a,'"',")");
     dchar=fgetc(intxt);
 }
 else
 { a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",8,'"',a,'"',")");
    }
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='<')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",13,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='>')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",15,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='{')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",22,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='}')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",23,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='[')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",24,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar==']')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",25,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='(')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",26,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar==')')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",27,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar==':')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",20,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar==';')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",19,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar==',')
{
 fprintf(outtxt,"%s%d,%c%c%c%s\n","(",21,'"',dchar,'"',")");
    dchar=fgetc(intxt);
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}

if(dchar=='>')
{
 i=0;
 a[i++]=dchar;
 dchar=fgetc(intxt);
 if(dchar=='=')
 {
  a[i++]=dchar;
  a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",16,'"',a,'"',")");
     dchar=fgetc(intxt);
 }
 else
 { a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",15,'"',a,'"',")");   
    }
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='<')
{
 i=0;
 a[i++]=dchar;
 dchar=fgetc(intxt);
 if(dchar=='=')
 {
  a[i++]=dchar;
  a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",14,'"',a,'"',")");
     dchar=fgetc(intxt);
 }
 else
 { a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",13,'"',a,'"',")");
    }
}
while(dchar==' ')
{ 
 dchar=fgetc(intxt);
}
if(dchar=='!')
{
 i=0;
 a[i++]=dchar;
 dchar=fgetc(intxt);
 if(dchar=='=')
 {
  a[i++]=dchar;
  a[i++]='\0';
  fprintf(outtxt,"%s%d,%c%s%c%s\n","(",18,'"',a,'"',")");
     dchar=fgetc(intxt);
 }
}
}//结束开头while语句
}
printf("请在 输入.txt文件中输入,并且以#结束输入,在输出.txt文件中查看词法分析结果\n");
fclose(intxt);//关闭文件退出
fclose(outtxt);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -