• 大小: 74KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-04
  • 语言: 其他
  • 标签:

资源简介

lex和yacc实现代码 lex和yacc实现代码 lex和yacc实现代码

资源截图

代码片段和文件信息

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define layer_ID 15//标识%%
#define HEADER_BEGIN 16//标识%{%}
#define HEADER_END 17//
#define BEGIN 0
#define ERROR -11
#define EPSLONG -1
using namespace std;
//定义结点结构
struct Node
{
unsigned int value;
unsigned int state;
};
//定义一组常量
ifstream ifile;
ofstream ofile;
int lineno=0;
vector > nfa;
vector > dfa;
hash_map id2reTable;//存储定义段中标识名到正则式的映射
hash_map nfaTer2Action;//存储NFA终态到action表头对应内容。
hash_map dfaTer2Action;//存储DFA终态到action表头对应内容,其中内容在Nfa2Dfa()时填充
vector actionTable;//存储action内对应内容
vector nfaIsTer;
map< setint > dfanodetable;
vector dfaIsTer;//标记dfa中哪些是终结态。


//定义一些函数
int checkSpecsign(char c);
void compleRe(string &re);
void produceNfa(const string & revector > &tnfavector &isTerint index);
void modifyTer(vector &is_tunsigned int stateint value);
void joinNfa(vector > &nfa1const vector > &nfa2);
void joinIster(vector &is_t1const vector &is_t2);
void Nfa2Dfa();
void Eclosure(set &T);
set move(const set &Iint value);
int dfaIsTerminated(set &I);//返回终态对应动作,如果是非终态返回-1
void minidfa();
void genAnalysisCode();//生成词法分析部分的代码
bool cmpList(const list &l1const list &l2);

void main()
{
string s;
cout<<“Please input the inputfile name!“< cin>>s;
ifile.open(s.c_str()ios::in);
cout<<“Analysing source......“< ofile.open(“yylex.cpp“ios::out);
if(!ifile.good())
{
cerr<<“Open the file error!“< return;
}
char c=ifile.get();
int state=checkSpecsign(c);
//判断开头是不是%{
if(state!=HEADER_BEGIN)
{
cout<<“The input file has no correct formationPlease try again!\n“;
return;
}
//判断到%}或到文件尾为止进行扫描
while(!ifile.eof()&&state!=HEADER_END)
{
c=ifile.get();
if(c==‘\t‘) continue;//跳过\t字符不输出。
if(c==‘%‘) {state=checkSpecsign(c);continue;}//当接受到%时,注意判断是不是特殊符号
if(c==‘\n‘) lineno++;//让行号自增,用以判断错误行号。
ofile.put(c);
}
//以上完成定义段中%{ %}之间的扫描
//以下开始对定义好的关键字的正规表达式的扫描,并将其存储到表中
ifile.get();
pair pi;
state=BEGIN;

while(!ifile.eof()&&state!=layer_ID)//此处的处理有问题,需要做进一步调整。
{
c=ifile.get();
if(c==‘%‘)
{
state=checkSpecsign(c);
if(state==ERROR)//用户自定义的标识符不可以含有此特殊字符%。
{
cerr<<“There is an error in line “< return;
}
continue;//跳过下面的正常串的处理,因为已经到终结。
}
else
{
ifile.unget();//如果不是特殊字符%,把当前字符放回流中。
}
string idre;
ifile>>id>>re;
pi.first=id;
pi.second=re;
id2reTable.insert(pi);
lineno++;
ifile.get();
}
//以上是对定义段的扫描
//以下是对规则段的扫描解析
state=BEGIN;
actionTable.push_back(“begin“);//使action表从1号单元开始,便于处理。
ifile.get();
while(!ifile.eof()&&state!=layer_ID)
{
c=ifile.get();
if(c==‘%‘)
{
state=check

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      46080  2009-04-19 21:56  编译原理课程设计实验报告\编译原理实验报告.doc

     文件      77824  2002-03-10 23:54  编译原理课程设计实验报告\编译实验Lex部分\Debug\vc60.pdb

     文件      21266  2006-04-16 13:19  编译原理课程设计实验报告\编译实验Lex部分\Lex.cpp

     文件       3365  2007-05-01 15:12  编译原理课程设计实验报告\编译实验Lex部分\Lex.dsp

     文件        531  2007-05-01 22:52  编译原理课程设计实验报告\编译实验Lex部分\Lex.dsw

     文件      41984  2002-03-10 23:55  编译原理课程设计实验报告\编译实验Lex部分\Lex.ncb

     文件      48640  2002-03-10 23:55  编译原理课程设计实验报告\编译实验Lex部分\Lex.opt

     文件       1307  2002-03-10 23:54  编译原理课程设计实验报告\编译实验Lex部分\Lex.plg

     文件       2264  2006-04-16 12:02  编译原理课程设计实验报告\编译实验Lex部分\test.txt

     文件      76619  2006-04-16 13:18  编译原理课程设计实验报告\编译实验Lex部分\yylex.cpp

     文件        961  2006-04-16 11:35  编译原理课程设计实验报告\编译实验Lex部分\yytab.h

     文件        607  2009-04-19 21:57  编译原理课程设计实验报告\编译实验Lex部分\说明.txt

     文件        872  2006-05-18 21:09  编译原理课程设计实验报告\编译实验Yacc部分\example 1\CMinus.l

     文件       1805  2006-05-22 18:49  编译原理课程设计实验报告\编译实验Yacc部分\example 1\cminus.yy

     文件       1412  2006-05-18 18:24  编译原理课程设计实验报告\编译实验Yacc部分\example 1\signal_table.txt

     文件        195  2006-05-22 18:50  编译原理课程设计实验报告\编译实验Yacc部分\example 1\test.txt

     文件      49185  2006-05-18 21:09  编译原理课程设计实验报告\编译实验Yacc部分\example 1\yylex.cpp

     文件      15491  2006-05-22 18:49  编译原理课程设计实验报告\编译实验Yacc部分\example 1\yyparse.cpp

     文件        997  2006-05-18 18:24  编译原理课程设计实验报告\编译实验Yacc部分\example 1\yytab.h

     文件        171  2006-05-22 18:56  编译原理课程设计实验报告\编译实验Yacc部分\example 1\说明.txt

     文件        390  2006-05-22 18:56  编译原理课程设计实验报告\编译实验Yacc部分\example 2\ambigious.l

     文件        198  2006-05-22 19:13  编译原理课程设计实验报告\编译实验Yacc部分\example 2\ambigious.yy

     文件        403  2006-05-22 18:56  编译原理课程设计实验报告\编译实验Yacc部分\example 2\signal_table.txt

     文件         29  2006-05-22 19:13  编译原理课程设计实验报告\编译实验Yacc部分\example 2\test.txt

     文件       2041  2006-05-22 19:13  编译原理课程设计实验报告\编译实验Yacc部分\example 2\yylex.cpp

     文件       4723  2006-05-22 19:09  编译原理课程设计实验报告\编译实验Yacc部分\example 2\yyparse.cpp

     文件        178  2006-05-22 18:56  编译原理课程设计实验报告\编译实验Yacc部分\example 2\yytab.h

     文件        160  2006-05-22 19:17  编译原理课程设计实验报告\编译实验Yacc部分\example 2\说明.txt

     文件      35292  2006-05-22 18:09  编译原理课程设计实验报告\编译实验Yacc部分\Yacc.cpp

     文件        203  2006-05-22 19:19  编译原理课程设计实验报告\编译实验Yacc部分\说明.txt

............此处省略11个文件信息

评论

共有 条评论

相关资源