求C语言编译原理语法分析程序

求C语言编译原理语法分析程序,第1张

#include <iostream>

using namespace std

#define m 45

#define n 100

#define t 10

int main()

{

FILE *fp

char filename[20],c[n]

printf("Type the file name which you want to open:")

scanf("%s",&filename)

fp=fopen(filename,"r+")/*以r-只读方式打开指定文件*/

if((fp=fopen(filename,"r"))==NULL) /*文件不存在输出错误*/

{cout<<"文件不存在!"<<endlexit(-1)}

cout<<"文件中内容如下:"<<endl

for(int j=0!feof(fp)j++){

c[j]=fgetc(fp)//从流中读取字符

}

char keyword[m][t]={"include","int","string","cout","cin","auto","break","case","char","class","const",

"continue","default","delete","do","double","else","enum","extern","float","for","friend","if","inline",

"int","long","new","operator","private","protected","public","register","return","short","sizeof","static",

"struct","switch","template","this","typedef","union","virtual","void","while"}//关键字数组

char a[t],*p=c,*q=a,*s=a

bool w=0,r=0

int i=0

for(i=0i<10i++)a[i]=NULL//初始化临时数组

while (*p !=NULL){

q=s=a

if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')||*p=='_'){//识别标识符

*q=*pp++q++

while ((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')||(*p>='0'&&*p<='9')||*p=='_'){

*q=*pp++q++

}

for(i=0i<mi++)if(strcmp(keyword[i],a)==0){r=1break}

if(r==1){cout<<"关键字为:"r=0}

else cout<<"标识符为:"

while(s!=q){

cout<<*s

s++

}

cout<<endl

for(i=0i<ti++)a[i]=NULL

}

else if(*p=='\''){//识辩盯缺别字符常量

p++

while(*p!='\''){

*q=*p

p++

q++

}

cout<<"字符常量为:"

while(s!=q){

cout<<*s

s++

}

cout<<endl

for(i=0i<ti++)a[i]=NULL

p++

}

else if(*p=='\"'){//识别字符串常量

p++

while(*p!='\"'){

*q=*p

p++

q++

}

cout<<"字符串常量为:"

while(s!=q){

cout<携辩<*s

s++

}

cout<<endl

for(i=0i<ti++)a[i]=NULL

p++

}

else if(*p=='+'||*p=='-'||*p=='*'||*p=='/'||*p=='='||*p=='%'||*p=='/'){//识别运算符

cout<<"运算符为:"<<*p

cout<<endl

p++

}

else if(*p==''||*p==','){//识别分解符

cout<<"分界符为:"<<*p

cout<<则升endl

p++

}

else if(*p>='0'&&*p<='9'){

s=q=a

*q=*pp++q++

while(*p>='0'&&*p<='9'||*p=='.'){

*q=*pp++q++

}

while(s!=q){

if(*s=='.'){w=1break}//识别实型常量

s++

}

s=a

if(w ==1){

cout<<"实型常量为:"

while(s!=q){

cout<<*s

s++

}

for(i=0i<ti++)a[i]=NULL

}

else {

cout<<"整型常量为:"

while(s!=q){//识别整型常量

cout<<*s

s++

}

for(i=0i<ti++)a[i]=NULL

}

cout<<endl

}

else p++

}

return 0

}

很简单的东西,你自己学学就会了。

输入输出是针对你的程序来说的。当你需要数据模铅时,你就构造一个输入流(对应服务器、文件系统或别的数谈早据源就是输出流),将数据“输入到你的程序”。当你需要输出数据时(如保存程序结果),你就旦侍好构造一个输出流。

参考以下程序:

import java.io.*

public class In

{

public static void main(String [] args)throws Exception

{

BufferedReader br=new BufferedReader(new InputStreamReader(System.in))

String s=br.readLine()//IOException

if(s.trim().equals("5"))

System.out.println("正确!")

else

System.out.println("错误!")

br.close()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12390013.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存