📄 qq.txt
字号:
1.1.1实验目的
设计,编制并调试一个词法分析程序。
1.2实验要求
1. 关键字:begin ;if;then;while;do;end 并为小写。
2. 符号:”+”;”-“;”*”;”/”;”:=”;”:”;”<”;”<=”;”>”;”>=”;”<>”;”=”;”(”;”)”;”;”;”#”。
3. 其他标记 如字符串,以字母开头的标识符。
4. 空格符跳过。
1.3各符号对应种别码
单词符号 种别码 单词符号 种别码 单词符号 种别码 单词符号 种别码
begin 1 标识符 10 + 13 < 20
if 2 数字 11 - 14 <= 21
then 3 ( 27 * 15 > 23
while 4 ) 28 / 16 >= 24
do 5 ; 26 := 17 <> 22
end 6 # 0 : 18 = 25
1.4词法分析程序的功能
输入:所给文法的原程序字符串。
输出:二元数组。
如:
if (a<=0)
then b:=1;
着输出:
(2, if)
(27, ( )
(10, a )
(21, <=)
(28, ) )
(3, then )
(10, b)
(17, :=)
(11, 1)
2.下面为原程序:
#include<stdio.h>
#include<string.h>
char prog[80],token[8]; char ch;
int syn,p,m,n; char *numtab[6]={"begin","if","then","while","do","end"};
int scaner(char prog[]){int m,i,n; for(m=0;m<20;m++) token[m++]=NULL; /*清空token*/
m=0; ch=prog[p++];/*读入字符*/
while(ch==' ') ch=prog[p++]; /*空格处理*/
if((ch>='a')&&(ch<='z'))/*字符串处理*/
{while(((ch>='a')&&(ch<='z'))||((ch>='0')&&(ch<='9'))) {token[m++]=ch;ch=prog[p++];} token[m++]='\0'; n=0; for(i=0;i<6;i++)
if(strcmp(token,numtab[i])==0)/*判断是不是保留字*/
switch(i){ case 0: syn=1;n++;break;
case 1: syn=2;n++;break;
case 2: syn=3;n++;break;
case 3: syn=4;n++;break;
case 4: syn=5;n++;break;
case 5: syn=6;n++;break;}
if(n==0) syn=10;p--;}/*非保留字*/
else if(ch>='0'&&ch<='9')/*判断是否为数字*/
{n=0;while(ch>='0'&&ch<='9') {n=n*10+(ch-'0');ch=prog[p++];}syn=11; p--;}else switch(ch)
{case'<': token[m++]=ch;ch=prog[p++];/*判断小于号*/
if(ch=='>')/*是否为不等于*/
{token[++m]=ch;syn=22;} else if(ch=='=')/*是否为小于等于*/
{token[++m]=ch;syn=21;} else{p--;syn=20;} break;
case'>': token[m]=ch;/*是否为大于*/
ch=prog[p++]; f(ch=='='){token[++m]=ch;syn=24;}/*是否为大于等于*/
else{p--;syn=23;} break;
case'+': token[m]=ch;syn=13;break;/*判断加号*/
case'-': token[m]=ch;syn=14;break;/*判断-号*/
case'*': token[m]=ch;syn=15;break;/*判断”*”号*/
case'/': token[m]=ch;syn=16;break;/*判断\号*/
case':': token[m++]=ch;ch=prog[p++];/*判断:号*/
if(ch=='='){token[++m]=ch;syn=17;} else{p--;syn=18;}break;
case'=': token[m]=ch;syn=25;break;/*判断=号*/
case';': token[m]=ch;syn=26;break;/*判断;号*/
case'(': token[m]=ch;syn=27;break;/*判断(号*/
case')': token[m]=ch;syn=28;break;/*判断)号*/
case'#': syn=0;token[0]='#';break;/*判断#号*/
default: syn=-1;}/*错误说明*/
return syn; return n;}
void main()
{p=0; printf("\n输入程序,以#结束,可以有begin,if,then,while,do,end,:,;,+,-,*,/,<,>,=,<>,(,):\n");
do{ch=getchar();prog[p++]=ch;}while(ch!='#'); p=0;
do{syn=scaner(prog);switch(syn)
case 11: printf ("\n(%2d,%8d)",syn,n);;break;/*输出数字*/
case-1: printf("\n(%2d, error)",syn);break;/*错误提示*/
default: printf("\n(%2d,%8s)",syn,token); }/*字符输出*/
}while(syn!=0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -