资源简介
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语言编译器
- 编译原理实验-词法分析(c语言代码)
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- 赋值语句翻译c语言实现四元式
- 编译原理用C++消除左递归
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 简单函数绘图语言的解释器
- Lex和Yacc从入门到精通.pdf
- 简易词法分析器——基于C语言
- LL(1)文法的实现-mfc-编译原理学习
- 词法分析代码内有报告
- 编译原理LL1文法的mfc实现含消除左递
- 编译原理词法分析实验
- pl/0语言的编译器
- C++实现编译原理自动机、LL1文法、及
- 编译原理语义分析程序 c++实现
- 编译原理 课程设计 DAG 报告+源码C++版
- 编译原理课程设计----语法分析器(
- 编译原理简单的编译器源码
- C语言实现一个编译器-编译原理南开大
- 编译原理课程实验报告词法分析器及
评论
共有 条评论