資源簡介
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?“?< 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?<?“;
for?(size_t?j=0;?j cout?< cout?<‘\t‘;
cout?<?“;
for?(size_t?j=0;?j cout?< cout?<}
void?readcfg::print_gramma(const?size_t?i?const?size_t?dpos)
{
cout?<?“;
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
評論
共有 條評論