资源简介
DO-WHILE循环语句的翻译程序设计(LL(1)法、输出四元式)
代码片段和文件信息
#include
#include
#include“lexical_analysis.h“
using std::cerr ;
using std::endl;
using std::cin;
using std::getline;
using std::cout ;
using std::string ;
//constructor
RelationTie_T::RelationTie_T(int i string s):
type(i)value(s)
{
}
void RelationTie_T::setType (const int i)
{
type=i;
}
void RelationTie_T::setValue (const string& str)
{
value=str;
}
ostream& operator<<(ostream& osconst RelationTie_T& temp)
{
switch(temp.type )
{
case 0:
os<<“operator “ ;
break;
case 1:
os<<“delimiter “;
break;
case 2:
os<<“number “;
break;
case 3:
os<<“keyword “;
break;
case 4:
os<<“identifier “;
break;
default :
break;
}
os< return os;
}
//constructor ::initializing the member variables of the class
Lex_Analysis_T::Lex_Analysis_T(const char* lhs const char* rhs)
{
fileName.open(lhs fstream::out|fstream::in );//添加fstream::out后才可以自动创建文件
objName.open (rhs fstream::out);
if(!fileName)
{
cerr<<“error:unable to open the file:“
< return;
}
if(!objName)
{
cerr<<“error:unable to open the file:“
< return ;
}
//int i=0;
}
/*void Lex_Analysis_T::inputSourFile ()
{
string str;
if(!fileName)
{
cerr<<“文件无法写入“< return ;
}
while(cin>>str)
{
fileName<
}
fileName.clear();
}*/
void Lex_Analysis_T::readOneLine ()
{
getline(fileName line);
}
void Lex_Analysis_T::scan()
{
RelationTie_T rt;
int i=0;
char ch;
while(i!=line.size () )
{
ch=line[i];
switch(charType(ch) )
{
case OPERATOR:
temp.push_back (ch);
if(line[i+1]==‘=‘||line[i+1]==‘+‘
||line[i+1]==‘-‘||line[i+1]==‘<‘||line[i+1]==‘>‘)
{
ch=line[++i];
temp.push_back (ch);
}
else
{
}
rt.setType (0);
rt.setValue (temp);
vec.push_back (rt);
++i;
temp=““;
break;
case DLIMITER:
temp.push_back (ch);
rt.setType (1);
rt.setValue (temp);
vec.push_back (rt);
++i;
temp=““;
break;
case NUMBER:
{
const string s(line.begin()+iline.end () );
if(isUnsignedNumber(s) )
{
rt.setType (2);
rt.setValue (temp);
vec.push_back (rt);
i+=temp.length ();
temp=““;
}
}
break;
case LETTER:
{
const string s(line.begin ()+i line.end () );
this->makeIdentifier (s);
if(isKeyword(temp) )
rt.setType (3);
else
rt.setType (4);
i+=temp.length ();//i此时必须向前移动temp.length()个长度才可避免重复扫描以致错
rt.setValue (temp);
vec.push_back (rt);
temp=““;
}
break;
default://when the scan finds char ‘_‘it return NONE
if(ch==‘_‘)
temp.push_back (ch);
++i;
break;
}//switch
}//while
}
bool Lex_Analysis_T::isKeyword (const string& str)
{
int i=0;
while(i!=23)
{
if(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 549 2009-10-23 18:07 0120710340819 宋伟\词法分析程序.dsw
文件 1494016 2010-01-08 13:50 0120710340819 宋伟\词法分析程序.ncb
文件 690 2009-11-21 11:03 0120710340819 宋伟\词法分析程序.plg
文件 1165 2010-01-07 13:27 0120710340819 宋伟\main.cpp
文件 2185 2009-11-21 10:51 0120710340819 宋伟\sh.txt
文件 53760 2009-11-21 23:04 0120710340819 宋伟\词法分析程序.opt
文件 69 2010-01-07 16:16 0120710340819 宋伟\txt1.txt
文件 61 2010-01-08 13:50 0120710340819 宋伟\txt2.txt
文件 4492 2009-10-23 20:49 0120710340819 宋伟\词法分析程序.dsp
文件 259 2010-01-07 15:23 0120710340819 宋伟\se.txt
文件 1313792 2009-11-14 18:01 0120710340819 宋伟\ncb
文件 901 2010-01-08 12:29 0120710340819 宋伟\词法分析程序.sln
..A..H. 15872 2010-01-08 13:50 0120710340819 宋伟\词法分析程序.suo
文件 5198 2010-01-07 13:27 0120710340819 宋伟\lexical_analysis.cpp
文件 2191 2009-11-21 11:03 0120710340819 宋伟\lexical_analysis.h
文件 5911 2010-01-07 22:30 0120710340819 宋伟\词法分析程序.vcproj
文件 901 2009-11-21 11:06 0120710340819 宋伟\Solution1.sln
..A..H. 13312 2009-11-21 11:07 0120710340819 宋伟\Solution1.suo
文件 1427 2010-01-08 13:50 0120710340819 宋伟\词法分析程序.vcproj.PC-200910291328.Administrator.user
文件 2600 2010-01-08 13:21 0120710340819 宋伟\Syntax_Analysis.h
文件 8380 2010-01-08 13:41 0120710340819 宋伟\Syntax_Analysis.cpp
文件 1761 2010-01-07 22:30 0120710340819 宋伟\ClassDiagram1.cd
文件 111 2010-01-10 20:29 0120710340819 宋伟\README.TXT.txt
文件 2444288 2009-11-19 22:56 0120710340819 宋伟\Solution1.ncb
文件 140288 2009-11-21 11:03 0120710340819 宋伟\Debug\vc60.idb
文件 135168 2009-11-21 11:03 0120710340819 宋伟\Debug\vc60.pdb
文件 406 2010-01-08 12:29 0120710340819 宋伟\Debug\词法分析程序.exe.em
文件 0 2009-11-15 17:34 0120710340819 宋伟\Debug\sor.txt
文件 0 2009-11-19 21:54 0120710340819 宋伟\Debug\obj.txt
文件 2534080 2009-11-21 11:03 0120710340819 宋伟\Debug\词法分析程序.pch
............此处省略17个文件信息
相关资源
- IF-ELSE条件语句的翻译程序设计LL1法、
- 翻译程序设计输出四元式
- DO-WHILE简单优先法输出三地址
- WHILE循环语句的翻译程序设计递归下降
- 编译原理FOR循环语句的翻译程序设计
- 赋值语句的翻译程序设计递归下降法
- 编译课设While循环LL(1)法,输出四元
- 基于LR方法的WHILE循环语句的编译系统
- DO-WHILE循环语句的翻译程序设计(简单
- WHILE循环语句的翻译程序设计LL1法、输
- IF-ELSE条件语句的翻译程序设计LL1法、
- IF-ELSE条件语句的翻译程序设计递归下
- FOR循环语句的翻译程序设计(LL法、输
- IF-ELSE条件语句的翻译程序设计简单优
- IF-ELSE条件语句的翻译程序设计递归下
- WHILE循环语句的翻译程序设计递归下降
- IF-ELSE条件语句的翻译程序设计(LL(
- 基于LL(1)法的条件语句语法语义分
评论
共有 条评论