📄 test.l
字号:
%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct item{
char word[14];
int n;
}item;
item keyword[20]={'\0'},ident[120]={'\0'},integer[50]={'\0'},operator[20]={'\0'},other[20]={'\0'},symbol[10]={'\0'};
void tally(item * p,char * w)
{
item * q=NULL;
for(q=p;q->word[0]!='\0';q++)
{
if(strcmp(q->word,w)==0)
{
q->n++;
break;
}
}
if(q->word[0]=='\0')
{
strcpy(q->word,w);
q->n=1;
}
}
void print(item * p)
{
item * q=NULL;
char c1='A';char c2='a';
if(p==keyword||p==ident)
{
while(c2<=122)
{
for(q=p;q->word[0]!='\0';q++)
{
if(q->word[0]==c2||q->word[0]==c1)
printf("\t\t%-16s\t\t%3d time(s)\n",q->word,q->n);
}
c1++;
c2++;
}
}
else
{
for(q=p;q->word[0]!='\0';q++)
printf("\t\t%-16s\t\t%3d time(s)\n",q->word,q->n);
}
return;
}
%}
IDENT [A-Za-z][A-Za-z0-9]*
DIGIT [0-9]
KEYWORD IF|if|THEN|then|WHILE|while|DO|do|READ|read|WRITE|write|CALL|call|BEGIN|begin|END|end|CONST|const|VAR|var|PROCEDURE|procedure|ODD|odd
%%
{KEYWORD} {tally(keyword,yytext);}
{IDENT} {tally(ident,yytext);}
{DIGIT}+ {tally(integer,yytext);}
"+"|"-"|"*"|"/"|"="|">"|"<"|">""="|"<""="|"#" {tally(operator,yytext);}
";"|","|":" {tally(symbol,yytext);}
"{"[^}\n]*"}" /* eat up one-line comments */
[ \t\n]+ /* eat up whitespace */
. {tally(other,yytext);}
%%
int yywrap()
{
return 1;
}
void main()
{
char FILENAME[30];
FILE * fp;
printf("Please input the filename:\n");
scanf("%s",FILENAME);
fp=fopen(FILENAME,"r");
if(fp==NULL)
printf("Can't open the default file!\n");
else
yyin=fp;
yylex();
printf("Keyword:\n");
print(keyword);
printf("Ident:\n");
print(ident);
printf("Integer:\n");
print(integer);
printf("Operator:\n");
print(operator);
printf("Symbol:\n");
print(symbol);
printf("Other:\n");
print(other);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -