免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

C語言scaner函數 r scan函數

在調試C程序時出現'scaner' : undeclared identifier怎么修改

scaner改為scanf

目前創新互聯已為1000+的企業提供了網站建設、域名、雅安服務器托管、網站托管維護、企業網站設計、大竹網站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協力一起成長,共同發展。

如果是自己定義的函數,需要有具體的代碼。

編譯原理實驗“C語言”檢查某段C源程序中,標識符的使用是否正確,即是否先聲明后使用,或

#include "stdio.h" /*定義I/O庫所用的某些宏和變量*/

#include "string.h" /*定義字符串庫函數*/

#include "conio.h" /*提供有關屏幕窗口操作函數*/

#include "ctype.h" /*分類函數*/

char prog[80]=,

token[8]; /*存放構成單詞符號的字符串*/

char ch;

int syn, /*存放單詞字符的種別碼*/

n,

sum, /*存放整數型單詞*/

m,p; /*p是緩沖區prog的指針,m是token的指針*/

char *rwtab[6]=;

void scaner(){

m=0;

sum=0;

for(n=0;n8;n++)

token[n]='\0';

ch=prog[p++];

while(ch==' ')

ch=prog[p++];

if(isalpha(ch)) /*ch為字母字符*/{

while(isalpha(ch)||isdigit(ch)) /*ch 為字母字符或者數字字符*/{

token[m++]=ch;

ch=prog[p++];}

token[m++]='\0';

ch=prog[p--];

syn=10;

for(n=0;n6;n++)

if(strcmp(token,rwtab[n])==0) /*字符串的比較*/{

syn=n+1;

break;}}

else

if(isdigit(ch)) /*ch是數字字符*/{

while(isdigit(ch)) /*ch是數字字符*/{

sum=sum*10+ch-'0';

ch=prog[p++];}

ch=prog[p--];

syn=11;}

else

switch(ch){

case'':m=0;token[m++]=ch;ch=prog[p++];

if(ch==''){

syn=21;

token[m++]=ch;}

else if(ch=='='){

syn=22;

token[m++]=ch;}

else{

syn=20;

ch=prog[p--];}

break;

case'':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=24;

token[m++]=ch;}

else{

syn=23;

ch=prog[p--];}

break;

case':':m=0;token[m++]=ch;ch=prog[p++];

if(ch=='='){

syn=18;

token[m++]=ch;}

else{

syn=17;

ch=prog[p--];}

break;

case'+':syn=13;token[0]=ch;break;

case'-':syn=14;token[0]=ch;break;

case'*':syn=15;token[0]=ch;break;

case'/':syn=16;token[0]=ch;break;

case'=':syn=25;token[0]=ch;break;

case';':syn=26;token[0]=ch;break;

case'(':syn=27;token[0]=ch;break;

case')':syn=28;token[0]=ch;break;

case'#':syn=0;token[0]=ch;break;

default:syn=-1;}}

main()

{

printf("\n\nThe significance of the figures:\n"

"1.figures 1 to 6 said Keyword\n"

"2.figures 10 and 11 said Other indicators\n"

"3.figures 13 to 28 said Operators\n");

p=0;

printf("\nplease input string:\n");

do {

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

do{

scaner();

switch(syn){

case 11: printf("(%d,%d)\n",syn,sum);break;

case -1: printf("\n ERROR;\n");break;

default: printf("(%d,%s)\n",syn,token);

}

}while(syn!=0);

getch();

}

程序測試結果

對源程序begin x:=9: if x9 then x:=2*x+1/3; end #的源文件,經過詞法分析后輸出如下圖5-1所示:

具體的你在修改修改吧

做一個簡單的詞法分析器, 一:要求能識別C程序中的部分關鍵字 int, char ,float if,else main, prin

時間:2012-10-30 晚

要求:輸入一串字符串,對其進行詞法分析,并且按照(種別,字符串/數字)格式進行輸出

種別編碼:

符號 種別 符號 種別 符號 種別

begin 1 + 13 = 22

if 2 - 14 23

then 3 * 15 = 24

while 4 / 16 = 25

do 5 : 17 ; 26

end 6 := 18 ( 27

l(l|d)* 10 20 ) 28

數字① 11 21 # 0

①數字的詞法正規式如下:( +|-|ε ) dd*(.dd* | ε)( e ( +|-|ε ) dd*|ε)

ps:輸入的字符串以“#”結尾

運行環境:VC++6.0

說明:搜索網上的資源,大部分的“數字”部分都是dd*形式,但這次試驗要求的是①形式,因而在數字部分做了很大努力。與dd*形式的不同有三個地方——ch是數字時,ch是+后接著是數字形式,ch是-后接著是數字形式。然而由于水平有限,時間較短,每個“加號”或“減號”后必須要在輸入數字正負符號,否則會默認“+”“-”為正負符號而不是“加號”“減號”。希望能有簡單方法解決這個問題。

源代碼:

#include stdio.h //定義I/O庫所用的某些宏和變量

#include string.h //定義字符串庫函數

#include math.h //定義數學運算符號庫函數

char prog[80],token[8]; //prog:緩沖區;token:一個有意義的字符串

char ch; //ch:當前處理的字符

int syn,p,m,n,f,e;

//syn:類別;p,m,n:計數變量;f,標記數字正負;e,10的次方數

double sum; //sum,數字

char *rwtab[6]={"begin","if","then","while","do","end"};

//基本字表置初值

void main(void) //主函數

{

void scaner(void); //聲明函數

p=0;

printf("\n請輸入字符串:\n");

do{ //輸入的字符放入緩沖區

ch=getchar();

prog[p++]=ch;

}while(ch!='#');

p=0;

do{ //分析詞法并輸出結果

scaner();

switch(syn)

{

case 11:printf("(%2d,%16g)\n",syn,sum);break;

case -1:printf("輸入錯誤\n");break;

default:printf("(%2d,%16s)\n",syn,token);

}

}while(syn!=0);

}

void scaner(void)

{

for(n=0;n8;n++) //token初始化

token[n]=NULL;

ch=prog[p++];

while(ch==' ') //如果取消空字符(目前空字符只包括空格)

ch=prog[p++];

if((ch='a'ch='z')||(ch='A'ch='Z'))

//如果ch是字母字符

{

m=0;

while((ch='a'ch='z')||(ch='A'ch='Z')||(ch='0'ch='9'))

//如果ch是字母字符或數字字符

{

token[m++]=ch;

ch=prog[p++]; //讀下一個字符

}

token[m++]='\0';

p--;

syn=10;

for(n=0;n6;n++)

if(strcmp(token,rwtab[n])==0)

{

syn=n+1; //給出syn值

break;

}

}

else if(ch='0'ch='9') //數字(1)

{

sum=0;

while(ch='0'ch='9')

{

sum=sum*10+ch-'0';

ch=prog[p++];

}

if(ch=='.') //有小數點

{

e=-1;

ch=prog[p++];

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

sum=sum+(ch-'0')*pow(10,e--);

ch=prog[p++];

}

}

}

if(ch=='e'||ch=='E') //有e

{

e=0,f=1;

ch=prog[p++];

if(ch=='+')

{

f=1;

ch=prog[p++];

}

else if(ch=='-')

{

f=-1;

ch=prog[p++];

}

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

e=e*10+ch-'0';

ch=prog[p++];

}

}

e=e*f;

sum=sum*pow(10,e);

}

p--;

syn=11;

}

else switch(ch)

{

case '':

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch=='') //

{

syn=21;

token[m++]=ch;

}

else if(ch=='=') //=

{

syn=22;

token[m++]=ch;

}

else //

{

syn=20;

p--;

}

break;

case '':

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch=='=') //=

{

syn=24;

token[m++]=ch;

}

else //

{

syn=23;

p--;

}

break;

case ':':

m=0;

token[m++]=ch;

ch=prog[p++];

if(ch=='=') //:=

{

syn=18;

token[m++]=ch;

}

else //:

{

syn=17;

p--;

}

break;

case '+':

ch=prog[p++];

if(ch='0'ch='9') //數字(2)

{

sum=0;

while(ch='0'ch='9')

{

sum=sum*10+ch-'0';

ch=prog[p++];

}

if(ch=='.') //有小數點

{

e=-1;

ch=prog[p++];

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

sum=sum+(ch-'0')*pow(10,e--);

ch=prog[p++];

}

}

}

if(ch=='e'||ch=='E') //有e

{

e=0,f=1;

ch=prog[p++];

if(ch=='+')

{

f=1;

ch=prog[p++];

}

else if(ch=='-')

{

f=-1;

ch=prog[p++];

}

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

e=e*10+ch-'0';

ch=prog[p++];

}

}

e=e*f;

sum=sum*pow(10,e);

}

p--;

syn=11;

}

else //+

{

syn=13;

p--;

ch=prog[p-1];

token[0]=ch;

}

break;

case '-':

ch=prog[p++];

if(ch='0'ch='9') //數字(3)

{

sum=0;

while(ch='0'ch='9')

{

sum=sum*10+ch-'0';

ch=prog[p++];

}

if(ch=='.') //有小數點

{

e=-1;

ch=prog[p++];

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

sum=sum+(ch-'0')*pow(10,e--);

ch=prog[p++];

}

}

}

if(ch=='e'||ch=='E') //有e

{

e=0,f=1;

ch=prog[p++];

if(ch=='+')

{

f=1;

ch=prog[p++];

}

else if(ch=='-')

{

f=-1;

ch=prog[p++];

}

if(ch='0'ch='9')

{

while(ch='0'ch='9')

{

e=e*10+ch-'0';

ch=prog[p++];

}

}

e=e*f;

sum=sum*pow(10,e);

}

sum=-sum;

p--;

syn=11;

}

else //-

{

syn=13;

p--;

ch=prog[p-1];

token[0]=ch;

}

break;

case '*': syn=15;token[0]=ch;break;

case '/': syn=16;token[0]=ch;break;

case '=': syn=25;token[0]=ch;break;

case ';': syn=26;token[0]=ch;break;

case '(': syn=27;token[0]=ch;break;

case ')': syn=28;token[0]=ch;break;

case '#': syn=0;token[0]=ch;break;

default: syn=-1;

}

}

試試吧

急(高懸賞 幫個忙) 求編譯原理課程設計---c語言實現c-的語法分析,在線等

新建一個文本文檔在你工程目錄下,名字起為"輸入.txt",里面的內容可以為

begin a:=1+7*(6+3);b:=1end#

輸出是在"輸出.txt"中查看,以下為輸出情況:

詞法分析結果如下:

(1, begin)

(10, a)

(18, :=)

(11, 1)

(13, +)

(11, 7)

(15, *)

(27, ()

(11, 6)

(13, +)

(11, 3)

(28, ))

(26, ;)

(10, b)

(18, :=)

(11, 1)

(6, end)

(0, #)

語法分析結果如下:(以四元式形式輸出)

( +, 6, 3, t1)

( *, 7, t1, t2)

( +, 1, t2, t3)

( =, t3, __, a)

( =, 1, __, b)

//提供一個編譯原理的語義分析程序 你可以直接復制 用TC進行調試

#include "stdio.h"

#include "string.h"

#include malloc.h

#include conio.h

#include "stdlib.h"

char prog[100],token[8],ch;

char *rwtab[6]={"begin","if","then","while","do","end"};

int syn,p,m,n,sum,q;

int kk;

//四元式表的結構如下:

struct

{

char result1[8];

char ag11[8];

char op1[8];

char ag21[8];

}quad[20];

char *factor();

char *expression();

int yucu();

char *term();

int statement();

int lrparser();

char *newtemp();

void scaner();

void emit(char *result,char *ag1,char *op,char *ag2);

void main()

{

FILE *fp1,*fp2;

if((fp1=fopen("輸入.txt","rt"))==NULL)

{

printf("Cannot open 輸入.txt\n");

getch();

exit(1);

}

if((fp2=fopen("輸出.txt","wt+"))==NULL)

{

printf("Cannot create 輸出.txt FILE.strike any key exit");

getch();

exit(1);

}

int j;

q=p=kk=0;

p=0;

//printf("Please Input a String(end with '#'):\n");

while(ch!='#')

{

ch = fgetc(fp1);

if(ch == EOF)

{

printf("文件為空,請檢查后再嘗試!");

return ;

}

prog[p++]=ch;

}

if(prog[p]=='#')

{

printf("輸入的待分析的串不是以'#'結尾,請修改之后再嘗試!\n");

return;

}

p=0;

char buffer1[200] = {0};

sprintf(buffer1,"詞法分析結果如下:\n");

fputs(buffer1,fp2);

//printf("詞法分析結果如下:\n");

do

{

scaner();

switch(syn)

{

case 11:

//printf("(%d,%d)\n",syn,sum);

sprintf(buffer1,"(%d, %d) \n",syn,sum);

fputs(buffer1,fp2);

break;

default:

//printf("(%d,%s)\n",syn,token);

sprintf(buffer1,"(%d, %s)\n",syn,token);

fputs(buffer1,fp2);

break;

}

}while(syn!=0);

printf("\n");

p=0;

char buffer[200]={0};

sprintf(buffer,"語法分析結果如下:(以四元式形式輸出)\n");

fputs(buffer,fp2);

//printf("語法分析結果如下:(以四元式形式輸出)\n");

scaner();//掃描函數

lrparser();

if(q19)

printf(" to long sentense!\n");

else

{

for (j=0;jq;j++)

{

//printf("( %s, %s, %s, %s) \n\n",quad[j].op1,quad[j].ag11,quad[j].ag21,quad[j].result1);

sprintf(buffer,"( %s, %s, %s, %s) \n\n",quad[j].op1,quad[j].ag11,quad[j].ag21,quad[j].result1);

fputs(buffer,fp2);

}

}

printf("已把相應的詞法和語法的結果保存到相應的文件中,請查閱!\n");

fclose(fp1);

fclose(fp2);

}

int lrparser()

{

int schain=0;

kk=0;

if (syn==1) //得到begin

{

scaner();//掃描下個字符

schain=yucu();

if(syn==6)//得到end

{

scaner();//掃描下個字符

if((syn==0)(kk==0)) //得到#

printf("Success!\n");

}

else

{

if(kk!=1)

printf("short of 'end' !\n");

kk=1;

getch();

exit(0);

}

}

else

{

printf("short of 'begin' !\n");

kk=1;

getch();

exit(0);

}

return (schain);

}

int yucu()

{

int schain=0;

schain=statement();

while(syn==26)

{

scaner();

schain=statement();

}

return (schain);

}

int statement()

{

char tt[8],eplace[8];

int schain=0;

if (syn==10)

{

strcpy(tt,token); //tt中保存的是第一個字符

scaner();

if(syn==18) //檢測到=號

{

scaner();

strcpy(eplace,expression());

emit(tt,eplace,"=","__");

schain=0;

}

else

{

printf("short of sign ':=' !\n");

kk=1;

getch();

exit(0);

}

return (schain);

}

}

char *expression()

{

char *tp,*ep2,*eplace,*tt;

tp=(char *)malloc(12);

ep2=(char *)malloc(12);

eplace=(char *)malloc(12);

tt=(char *)malloc(12);

strcpy(eplace,term());

while((syn==13)||(syn==14))

{

if (syn==13)

strcpy(tt,"+");

else

strcpy(tt,"-");

scaner();

strcpy(ep2,term());

strcpy(tp,newtemp());

emit(tp,eplace,tt,ep2);

strcpy(eplace,tp);

}

return (eplace);

}

char *term()

{

char *tp,*ep2,*eplace,*tt;

tp=(char *)malloc(12);

ep2=(char *)malloc(12);

eplace=(char *)malloc(12);

tt=(char *)malloc(12);

strcpy(eplace,factor());

while((syn==15)||(syn==16))

{

if (syn==15)

strcpy(tt,"*");

else

strcpy(tt,"/");

scaner();

strcpy(ep2,factor());

strcpy(tp,newtemp());

emit(tp,eplace,tt,ep2);

strcpy(eplace,tp);

}

return (eplace);

}

char *factor()

{

char *fplace;

fplace=(char *)malloc(12);

strcpy(fplace,"");

if(syn==10) //得到字符

{

strcpy(fplace,token);

scaner();

}

else if(syn==11) //得到數字

{

itoa(sum,fplace,10);

scaner();

}

else if(syn==27) //得到)

{

scaner();

fplace=expression();

if(syn==28) //得到(

scaner();

else

{

printf("error on ')' !\n");

kk=1;

getch();

exit(0);

}

}

else

{

printf("error on '(' !\n");

kk=1;

getch();

exit(0);

}

return (fplace);

}

//該函數回送一個新的臨時變量名,臨時變量名產生的順序為T1,T2...

char *newtemp()

{

char *p;

char m[8];

p=(char *)malloc(8);

kk++;

itoa(kk,m,10);

strcpy(p+1,m);

p[0]='t';

return(p); //設置中間變量名放在一個字符數組中,字符數組的第一個字符為t第二個字符為m表示的數值

}

void scaner()

{

sum=0;

///for(m=0;m8;m++)

//token[m++]=NULL;

memset(token,0,8);

m=0;

ch=prog[p++];

while(ch==' ')

ch=prog[p++];

if(((ch='z')(ch='a'))||((ch='Z')(ch='A')))

{

while(((ch='z')(ch='a'))||((ch='Z')(ch='A'))||((ch='0')(ch='9')))

{

token[m++]=ch;

ch=prog[p++];

}

p--;

syn=10;

token[m++]='\0';

for(n=0;n6;n++)

if(strcmp(token,rwtab[n])==0)

{

syn=n+1;

break;

}

}

else if((ch='0')(ch='9'))

{

while((ch='0')(ch='9'))

{

sum=sum*10+ch-'0';

ch=prog[p++];

}

p--;

syn=11;

}

else switch(ch)

{

case '':m=0;

ch=prog[p++];

if(ch=='')

{

syn=21;

}

else if(ch=='=')

{

syn=22;

}

else

{

syn=20;

p--;

}

break;

case '':m=0;

ch=prog[p++];

if(ch=='=')

{

syn=24;

}

else

{

syn=23;

p--;

}

break;

case ':':m=0;

token[m++] = ch;

ch=prog[p++];

if(ch=='=')

{

syn=18;

token[m++] = ch;

}

else

{

syn=17;

p--;

}

break;

case '+': syn=13;token[0] = ch; break;

case '-': syn=14;token[0] = ch; break;

case '*': syn=15;token[0] = ch;break;

case '/': syn=16;token[0] = ch;break;

case '(': syn=27;token[0] = ch;break;

case ')': syn=28;token[0] = ch;break;

case '=': syn=25;token[0] = ch;break;

case ';': syn=26;token[0] = ch;break;

case '#': syn=0;token[0] = ch;break;

default: syn=-1;break;

}

}

//該函數是生成一個三地址語句送到四元式表中

void emit(char *result,char *ag1,char *op,char *ag2)

{

strcpy(quad[q].result1,result);

strcpy(quad[q].ag11,ag1);

strcpy(quad[q].op1,op);

strcpy(quad[q].ag21,ag2);

q++; //統計有多少個四元式

}

編寫一個程序,輸入一個C語言程序,經詞法分析處理,后輸出單詞記號序列。

#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* KEY_WORDS[]={"main","int","char","if","else","for","while",_KEY_WORD_END};

WORD* scaner();

void 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(over1000over!=-1){

oneword=scaner();

if(oneword-typenum1000)

printf("(%d,%s)",oneword-typenum,oneword-word);

over=oneword-typenum;

}

printf("\npress # to exit:");

scanf("%[^#]s",input);

}

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+1;

token[p_token]='\0';

}

int letter(){

if(ch='a'ch='z'||ch='A'ch='Z')return 1;

else return 0;

}

int digit(){

if(ch='0'ch='9')return 1;

else return 0;

}

int reserve(){

int i=0;

while(strcmp(KEY_WORDS[i],_KEY_WORD_END)){

if(!strcmp(KEY_WORDS[i],token)){

return i+1;

}

i=i+1;

}

return 10;

}

void retract(){

p_input=p_input-1;

}

char* dtb(){

return NULL;

}

WORD* scaner(){

WORD* myword=new WORD;

myword-typenum=10;

myword-word="";

p_token=0;

m_getch();

getbc();

if(letter()){

while(letter()||digit()){

concat();

m_getch();

}

retract();

myword-typenum=reserve();

myword-word=token;

return(myword);

}

else if(digit()){

while(digit()){

concat();

m_getch();

}

retract();

myword-typenum=20;

myword-word=token;

return(myword);

}

else switch(ch){

case '=': m_getch();

if (ch=='='){

myword-typenum=39;

myword-word="==";

return(myword);

}

retract();

myword-typenum=21;

myword-word="=";

return(myword);

break;

case '+': myword-typenum=22;

myword-word="+";

return(myword);

break;

case '-': myword-typenum=23;

myword-word="-";

return(myword);

break;

case '*': myword-typenum=24;

myword-word="*";

return(myword);

break;

case '/': myword-typenum=25;

myword-word="/";

return(myword);

break;

case '(': myword-typenum=26;

myword-word="(";

return(myword);

break;

case ')': myword-typenum=27;

myword-word=")";

return(myword);

break;

case '[': myword-typenum=28;

myword-word="[";

return(myword);

break;

case ']': myword-typenum=29;

myword-word="]";

return(myword);

break;

case '{': myword-typenum=30;

myword-word="{";

return(myword);

break;

case '}': myword-typenum=31;

myword-word="}";

return(myword);

break;

case ',': myword-typenum=32;

myword-word=",";

return(myword);

break;

case ':': myword-typenum=33;

myword-word=":";

return(myword);

break;

case ';': myword-typenum=34;

myword-word=";";

return(myword);

break;

case '': m_getch();

if (ch=='='){

myword-typenum=37;

myword-word="=";

return(myword);

}

retract();

myword-typenum=35;

myword-word="";

return(myword);

break;

case '': m_getch();

if (ch=='='){

myword-typenum=38;

myword-word="=";

return(myword);

}

retract();

myword-typenum=36;

myword-word="";

return(myword);

break;

case '!': m_getch();

if (ch=='='){

myword-typenum=40;

myword-word="!=";

return(myword);

}

retract();

myword-typenum=-1;

myword-word="ERROR";

return(myword);

break;

case '\0': myword-typenum=1000;

myword-word="OVER";

return(myword);

break;

default: myword-typenum=-1;

myword-word="ERROR";

return(myword);

}

}

怎樣把圖片轉換成代碼,用于C語言開發的軟件中?

圖片轉換成代碼 -- scaner (掃描儀)就是干這個的。

有的三合一打印機(打印機,fax, 掃描儀三合一)也可以干這個。

數碼相機也干這個。圖片轉換成的格式有 jpg,bmp,tif 等等,許多程序和軟件都能處理。

本文題目:C語言scaner函數 r scan函數
本文地址:http://m.newbst.com/article48/dodhgep.html

成都網站建設公司_創新互聯,為您提供商城網站網站排名網站設計網站內鏈定制網站企業網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

微信小程序開發