⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pl1.l

📁 是用flex分析pl0源代码的程序
💻 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 + -