资源简介

C语言编译器,采用C++实现。 词法分析、语法分析、语法制导翻译全过程。 附上ISO定义的标准C语言文法。 更具体说明见"说明.doc".

资源截图

代码片段和文件信息

#include 
#include 
#include “cfg.h“
#include 

readcfg::readcfg(const string& filename)
{
init_grammar(filename);
init_variable();
}
readcfg::~readcfg()
{
for (size_t i=0; i cfg[i].right.clear();
cfg.clear();
terminal.clear();
nonterminal.clear();
}

void readcfg::init_grammar(const string& filename)
{
ifstream fin;
fin.open(filename.c_str());
if(!fin.is_open())
{
cerr << “Can‘t open “ << filename << endl;
exit(-1);
}

string pre_word cur_word;
//Init the CFG
cfg_node* p_temp = new cfg_node;
fin >> pre_word;
fin >> cur_word;
while (cur_word.size()!=0)
{
if (cur_word==“->“)
{
p_temp->left = pre_word;
pre_word.clear();
pre_word = cur_word;
cur_word.clear();
fin >> cur_word;

while (cur_word.size()!=0 && cur_word!=“->“)
{
if (pre_word!=“->“)
{
p_temp->right.push_back(pre_word);
p_temp->right_int.push_back(get_int(pre_word));
}
pre_word.clear();
pre_word = cur_word;
cur_word.clear();
fin >> cur_word;
}
}
if (cur_word.size()==0)
{
p_temp->right.push_back(pre_word);
}
p_temp->right.push_back(“$“);
cfg.push_back(*p_temp);
p_temp->left.clear();
p_temp->right.clear();
}
delete p_temp;

fin.close();
}

void readcfg::init_variable()
{
set t nt;
//Init the terminal and nonterminal table
for (size_t i=0; i {
nt.insert(cfg[i].left);
}
t.insert(“$“);
for (size_t i=0; i {
for (size_t j=0; j {
if (nt.find(cfg[i].right[j])==nt.end())
{
string* s = new string(cfg[i].right[j]);
t.insert(*s);
delete s;
}
}
}
set::iterator p;
for (size_t i=0; i {
cfg[i].left_int = get_int(cfg[i].left);
cfg[i].right_int.clear();
for (size_t j=0; j {
cfg[i].right_int.push_back(get_int(cfg[i].right[j]));
}
}

for (p=t.begin(); p!=t.end(); p++)
{
int temp=get_int(*p);
terminal.insert(temp);
table_head.push_back(temp);
string_table_head.push_back(*p);
}
for (p=nt.begin(); p!=nt.end(); p++)
{
int temp=get_int(*p);
nonterminal.insert(temp);
table_head.push_back(temp);
string_table_head.push_back(*p);
}
}

bool readcfg::is_terminal(const int x)
{
return terminal.find(x)!=terminal.end();
}

bool readcfg::is_nonterminal(const int x)
{
return nonterminal.find(x)!=nonterminal.end();
}

void readcfg::print_gramma(const size_t i)
{
cout << cfg[i].left << “ -> “;
for (size_t j=0; j cout << cfg[i].right[j] << ‘ ‘;
cout << ‘\t‘;
cout << cfg[i].left_int << “ -> “;
for (size_t j=0; j cout << cfg[i].right_int[j] << ‘ ‘;
cout << endl;
}

void readcfg::print_gramma(const size_t i const size_t dpos)
{
cout << cfg[i].left << “ -> “;
for (size

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-07-14 20:23  Compiler\
     文件       46699  2010-07-08 02:03  Compiler\action_goto_table.txt
     文件        3275  2010-07-08 02:03  Compiler\cfg.cpp
     文件         805  2010-07-08 02:03  Compiler\cfg.h
     文件      137893  2010-07-14 20:01  Compiler\cfg.o
     文件        3334  2010-06-19 12:02  Compiler\cfg.txt
     文件     4166786  2010-07-14 20:01  Compiler\compiler.exe
     文件       39685  2010-05-12 18:36  Compiler\C_Grammar_ISO.pdf
     文件          84  2010-07-08 02:03  Compiler\file.txt
     文件       10862  2010-07-08 02:03  Compiler\grammar.cpp
     文件        1635  2010-07-08 02:03  Compiler\grammar.h
     文件      214881  2010-07-14 20:01  Compiler\grammar.o
     文件       17547  2010-07-08 02:03  Compiler\lr.cpp
     文件        1637  2010-07-08 02:03  Compiler\lr.h
     文件      209914  2010-07-14 20:01  Compiler\lr.o
     文件         978  2010-07-14 20:00  Compiler\main.cpp
     文件        4043  2010-07-14 20:00  Compiler\main.o
     文件         512  2010-07-08 12:43  Compiler\makefile
     文件        2607  2010-07-08 02:03  Compiler\my_cfg.txt
     文件        6975  2010-07-08 02:03  Compiler\scanner.cpp
     文件         514  2010-07-08 02:03  Compiler\scanner.h
     文件       44932  2010-07-14 20:00  Compiler\scanner.o
     文件         206  2010-07-08 02:03  Compiler\test_code.txt
     文件        1403  2010-07-08 02:03  Compiler\token.cpp
     文件         477  2010-07-08 02:03  Compiler\token.h
     文件       41862  2010-07-14 20:00  Compiler\token.o
     文件      256512  2010-07-14 20:22  Compiler\说明.doc

评论

共有 条评论