?? pl1.l
字號:
IDENT [a-zA-Z][a-zA-Z0-9]*
NUMBER [0-9][0-9]*
%{
#include<map>
#include<iostream>
#include<string>
typedef pair<int,int> Int_Pair;
map <int,int,less<int> >::iterator m1_Iter;
typedef pair<string,int> String_Pair;
map <string,int,less<string> >::iterator m2_Iter;
map <int,int,less<int> > m1;
map <string,int,less<string> > m2;
int jia=0;
int jian=0;
int cheng=0;
int chu=0;
int fuzhi=0;
int dengyu=0;
int xiaoyu=0;
int dayu=0;
int dayudengyu=0;
int xiaoyudengyu=0;
int budengyu=0;
int fenhao=0;
int douhao=0;
int juhao=0;
int zuokuohao=0;
int youkuohao=0;
int ifsym=0;
int thensym=0;
int elsesym=0;
int beginsym=0;
int endsym=0;
int dosym=0;
int callsym=0;
int constsym=0;
int oddsym=0;
int proceduresym=0;
int readsym=0;
int repeatsym=0;
int untilsym=0;
int varsym=0;
int whilesym=0;
int writesym=0;
%}
%%
" " {}
"\t" {}
"\n" {}
"+" {jia++;}
"-" {jian++;}
"*" {cheng++;}
"/" {chu++;}
":=" {fuzhi++;}
"=" {dengyu++;}
"<" {xiaoyu++;}
">" {dayu++;}
">=" {dayudengyu++;}
"<=" {xiaoyudengyu++;}
"#" {budengyu++;}
";" {fenhao++;}
"," {douhao++;}
"." {juhao++;}
"(" {zuokuohao++;}
")" {youkuohao++;}
"if" {ifsym++;}
"then" {thensym++;}
"else" {elsesym++;}
"begin" {beginsym++;}
"end" {endsym++;}
"do" {dosym++;}
"call" {callsym++;}
"const" {constsym++;}
"odd" {oddsym++;}
"procedure" {proceduresym++;}
"read" {readsym++;}
"repeat" {repeatsym++;}
"until" {untilsym++;}
"var" {varsym++;}
"while" {whilesym++;}
"write" {writesym++;}
{NUMBER} { bool y=false;
int i=atoi(yytext);
for (m1_Iter=m1.begin();m1_Iter!=m1.end();m1_Iter++)
if (m1_Iter->first==i)
{
y=true;
m1_Iter->second++;
}
if (y==false)
{
m1.insert(Int_Pair(i,1));
}
}
{IDENT} { bool y=false;
string s=strdup(yytext);
for (m2_Iter=m2.begin();m2_Iter!=m2.end();m2_Iter++)
if (m2_Iter->first==s)
{
y=true;
m2_Iter->second++;
}
if (y==false)
{
m2.insert(String_Pair(s,1));
}
}
%%
int yywrap()
{
cout<<"keyword:"<<endl;
if (jia!=0) cout<<"+ "<<jia<<endl;
if (jian!=0) cout<<"- "<<jian<<endl;
if (cheng!=0) cout<<"* "<<cheng<<endl;
if (chu!=0) cout<<"/ "<<chu<<endl;
if (fuzhi!=0) cout<<":= "<<fuzhi<<endl;
if (dengyu!=0) cout<<"= "<<dengyu<<endl;
if (xiaoyu!=0) cout<<"< "<<xiaoyu<<endl;
if (dayu!=0) cout<<"> "<<dayu<<endl;
if (dayudengyu!=0) cout<<">= "<<dayudengyu<<endl;
if (xiaoyudengyu!=0) cout<<"<= "<<xiaoyudengyu<<endl;
if (budengyu!=0) cout<<"# "<<budengyu<<endl;
if (fenhao!=0) cout<<"; "<<fenhao<<endl;
if (douhao!=0) cout<<", "<<douhao<<endl;
if (juhao!=0) cout<<". "<<juhao<<endl;
if (zuokuohao!=0) cout<<"( "<<zuokuohao<<endl;
if (youkuohao!=0) cout<<") "<<youkuohao<<endl;
if (ifsym!=0) cout<<"if "<<ifsym<<endl;
if (thensym!=0) cout<<"then "<<thensym<<endl;
if (elsesym!=0) cout<<"else "<<elsesym<<endl;
if (beginsym!=0) cout<<"begin "<<beginsym<<endl;
if (endsym!=0) cout<<"end "<<endsym<<endl;
if (dosym!=0) cout<<"do "<<dosym<<endl;
if (callsym!=0) cout<<"call "<<callsym<<endl;
if (constsym!=0) cout<<"const "<<constsym<<endl;
if (oddsym!=0) cout<<"odd "<<oddsym<<endl;
if (proceduresym!=0) cout<<"procedure "<<proceduresym<<endl;
if (readsym!=0) cout<<"read "<<readsym<<endl;
if (repeatsym!=0) cout<<"repeat "<<repeatsym<<endl;
if (untilsym!=0) cout<<"until "<<untilsym<<endl;
if (varsym!=0) cout<<"var "<<varsym<<endl;
if (whilesym!=0) cout<<"while "<<whilesym<<endl;
if (writesym!=0) cout<<"write "<<writesym<<endl;
cout<<"ident:"<<endl;
for (m2_Iter=m2.begin();m2_Iter!=m2.end();m2_Iter++)
{ cout<<m2_Iter->first;
cout<<" ";
cout<<m2_Iter->second;
cout<<endl;
}
cout<<"integer:"<<endl;
for (m1_Iter=m1.begin();m1_Iter!=m1.end();m1_Iter++)
{
cout<<m1_Iter->first;
cout<<" ";
cout<<m1_Iter->second;
cout<<endl;
}
return (1);
}
int main()
{
yylex();
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -