實驗1、 詞法分析程序實驗數組
專業 計算機科學與技術 姓名 劉東 學號 201506110164函數
1、 實驗目的測試
2、 實驗內容和要求spa
3、 實驗方法、步驟及結果測試設計
可執行程序名:cifafenxi.exeblog
|
doip
{ci
scanf("%s\n",input);字符串
i=0;input
while(input[i] !='\0')
{
//printf("char=%c\n",input[i]);
if(input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/' || input[i] == '=') //對字符串中的表達式作分詞,並記錄相應運算符
{
//printf("\nhello\n");
p=(NODE*)malloc(sizeof(NODE));
p->next=NULL;
p->string=(char*)malloc(sizeof(char)*2);
p->string[0]='\0';
strncpy(p->string,&input[i],1);
p->next=yunsuanfu->next;
yunsuanfu->next=p;
// printf("yunsuanfu is %c\n",input[i]);
}
else if(ispunct(input[i]) && input[i] != '~') //對字符串中出現界符的地方作分詞,並記錄相應界符
{
//ch=(char*)malloc(sizeof(NODE));
p=(NODE*)malloc(sizeof(NODE));
p->next=NULL;
p->string=(char*)malloc(sizeof(char)*2);
p->string[0]='\0';
strncpy(p->string,&input[i],1);
p->next=jiefu->next;
jiefu->next=p;
}
i++;
}
ch=strtok(input,delim);
do
{
if(input[0] =='~')
break;
q=head;
p=(NODE*)malloc(sizeof(NODE));
p->next=NULL;
p->string=(char*)malloc(sizeof(input));
p->string[0]='\0';
strcat(p->string,ch); //鏈接先後字符串,合成新的字符串
while(q->next !=NULL)
q=q->next;
p->next=q->next;
q->next=p;
}while(ch=strtok(NULL,delim));
}while(input[0] !='~');
if(strspn(p->string,biaowords)) //使用strspn()來對字符串中是否含有biaowords數組中的字符,如有則爲標識符
{
q->string=p->string;
q->next=biaoshi->next;
biaoshi->next=q;
}
通常必須配運行結果截圖,結果是否符合預期及其分析。
(截圖需根據實際,截取有表明性的測試例子)
實驗結果與預期基本吻合,可是在界符那裏會出現除界符之外其餘的字符,我認爲出現這一緣由是由於在複製字符串的時候多了複製了幾位,但修改後得出的結論並非這樣。
4、 實驗總結
本次實驗中我學會了如何經過C來寫鏈接多個任意長度的字符串並返回該字符串。本身動手寫了一個小型的分詞模塊,感受對功能設計的手段豐富了。其實後來我知道了這個詞法分析程序其實並不用作這麼多,但我真的經過此次的實驗嘗試了不少之前沒有想過的設計。
主要的設計問題有:
一、如何將各個字符串鏈接起來,使它變成一個新串。
二、如何區分標識符,界符和運算符
三、怎麼輸出結果
解決方法:
一、我使用動態數組來存儲可變長度的字符串,每次輸入一個字符竄後都會計算這個字符串的空間大小,並加上以前所有的空間大小來建立一個新的字符串,並使用strcmp()函數來複制先輸入的字符串。
二、我使用strspn()函數來匹配字符串中哪些是標識符。此前我對整個字符串作了一個分詞。
三、我是使用鏈表來記錄每個類別(如標識符、運算符、界符等)他們裏面分別有哪些字符串。