资源简介
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
相关资源
- C-Minus编译器 编译原理实验
- LL1文法
- 现代编译原理C语言描述-高清-完整目
- TINY扩充语言的语法分析(实现 while、
- 编译原理课程设计词法语法分析器
- 编译原理课程设计整个项目和报告
- 编译原理LL1语法分析器C++版源代码
- 编译原理之算符优先算法-迭代法
- 编译原理词法分析器实验报告含源代
- 编译原理词法分析器C++版源代码
- 现代编译原理-c语言描述虎书
- 合工大编译原理实验报告
- LL1文法消除左递归编译原理mfc实现完
- 南邮编译原理实验
- 编译原理及实践
- 编译原理LL(0)C语言小子集源代码
- 第四次上机作业 语法分析2
- PLO编译器的扩展编译原理课程实践
- 编译原理课程设计C编写的C-编译器
- 编译原理课程设计LR(0)语法分析器
- 西电编译原理大作业 C语言版
- 编译原理 简单函数绘图语言的解释器
- 编译原理之语义分析
- 编译原理 词法分析器
- 编译原理综合性实验 选择部分C语言的
- 编译器前两步
- 编译原理实验语法分析器
- 哈工大编译原理编译器C++
- PL/0语法分析程序
- 编译原理课程设计简单优先文法判定
评论
共有 条评论