‘壹’ 编译原理中语法分析的一道问题
LALR我做着做着觉得不对,但SLR还是没问题的,这道题工程量非常庞大,想必以后也一定有人问,我就简要的带过吧,我归纳的解题步骤是:
构造LR(0)项目集规范族
求出FOLLOW集
根据规则圈出sj和rj对应的产生式
算出goto数
构造分析表
‘贰’ 计算机科学与技术,大二了,我该学些什么呢,现在只会写几行代码
我不是大神,事实上我还是大一呢。我已经学了C,正在学C++,我也是一头雾水。再好多看些相关书籍。我给你推荐些。我只看了一点就受益无穷。求采纳。
计算机经典教材
目录
1 前言
2 Mathematics (数学)
3 Data Structures & Algorithms (数据结构、算法)
4 Compiler (编译原理)
5 Operating System (操作系统)
6 Database (数据库)
7 C (C 语言)
8 C++ (C++ 语言)
9 Object-Oriented (面向对象)
10 Software Engineering (软件工程)
11 UNIX Programming (UNIX编程)
12 UNIX Administration (UNIX系统管理)
13 Networks (网络)
14 Windows Programming (Windows 编程)
15 Other (其它)
前言
推荐原则:
宁缺勿滥,决不混进糟粕 (好书不一定对所有人都合适,但对于它的目标读者群来说,一定是好书)。
选书原则:
有国外的,不看国产的
有原版的,不看翻译的
看大师的作品
看书原则:
不要看C、C++、java……今天听说C好,就跑去学C。明天听说java好,就跑去学java,最后你什么也学不到。因为不管什么语言,永远不要忘记语言的本质。语言只是一种工具,它的作用就是完成你的工作。不管把
C 的语法学得如何透彻,也不管把 C 的
trick用的如何精妙,这都不能表示你会编程。要学会如何分析问题,如何设计程序,如何用一种具体的语言来实现。如果你只会做最后一步,你只是一个编码者(coder),还不是一个程序员(programmer)。做一个programmer,不要做coder。总之,不要为了学语言而去学语言(除非你是个语言学家)。
不要放弃对基础知识的学习。所谓基础知识,一般都有一个特点,那就是:它们可能看起来没用,但如果你忽视它们的话,总有一天你会后悔莫及。所以,如果不想以后再后悔的话,就在今天多花点时间。
不管学什么东西,学之前先弄明白自己要学的是什么东西,它有什么用,在你已经学和以后的发展方向中,它处于什么位值。如果这些都不明白,就好比在茫茫的丛林里面四处乱撞,就算能出去,也一定会走很多弯路。
对于软件工程之类的东西,不象 C
语言有着严格的标准,最好的办法就是兼收并蓄,能看的都看,然后(最重要的)在此之上形成自己的思想(不然就什么都白看了)。
尽信书不如无书。书里写的只不过是写书的人认为正确的观点而已。学习前人的知识和经验,在此基础上形成自己的知识结构、观点和思维方式,才是学习的真正目的。
一。Mathematics (数学)
书名(英文):Discrete Mathematics and Its Applications (Fifth Edition)
书名(中文):离散数学及其应用 (第五版)
原作者:Kenneth H.Rosen
书名(英文):Concrete Mathematics : A Foundation for Computer Science
(Second Edition)
书名(中文):具体数学:计算机科学基础 (第2版)
原作者:Ronald L. Graham / Donald E. Knuth / Oren Patashnik
二。Data Structures & Algorithms (数据结构、算法)
书名(英文):Data Structures and Algorithm Analysis in C, Second Edition
书名(中文):数据结构与算法分析--C语言描述 (第二版)
原作者:Mark Allen Weiss
大凡国外的数据结构教科书,都有一个共同的特点,就是他们的第一章都不是讲的数据结构,而是软件工程的基本原则。我个人认为这是十分必要的,特别是对于大
多数没有接触过程序设计的同学来说,在数据结构这个可以说是第一次接触程序设计的课程中能学习到基本的软件工程原则,对于以后的学习是十分有好处的。写一
个乱七八糟的程序出来还不如什么都不写。在我看来,这本书有两个优点:一:将软件工程的基本原则贯穿全书,二:简单,容易理解。对于初学者,这本书无疑是
非常合适的。mufasa
书名(英文):Data Structures & Program Design In C (Second Edition)
书名(中文):数据结构与程序设计 C 语言描述 (第二版)
原作者:Robert Kruse / C.L. Tondo / Bruce Leung
书名(英文):Data Structures with C++ Using STL (Second Edition)
书名(中文):数据结构C++语言描述描述—应用标准模版库 (第二版)
原作者:William Ford, William Topp
书名(英文):Introction to Algorithms (Second Edition)
书名(中文):算法导论 (第二版)
原作者:Thomas H. Cormen / Charles E. Leiserson / Ronald L. Rivest /
Clifford Stein
书名(英文):The Art of Computer Programming, Volume 1 : Fundamental
Algorithms (Third Edition)
书名(中文):计算机程序设计艺术 第1卷 基本算法 (第3版)
原作者:Donald E. Knuth
书名(英文):The Art of Computer Programming, Volume 2 : Seminumerical
Algorithms (Third Edition)
书名(中文):计算机程序设计艺术 第2卷 半数值算法 (第3版)
原作者:Donald E. Knuth
书名(英文):The Art of Computer Programming, Volume 3 : Sorting and
Searching (Second Edition)
书名(中文):计算机程序设计艺术 第3卷 排序和查找 (第2版)
原作者:Donald E. Knuth
三。Compiler (编译原理)
书名(英文):Compilers: Principles, Techniques, and Tools
书名(中文):编译原理、技术与工具
原作者:Alfred V. Aho / Ravi Sethi / Jeffrey D. Ullman
书名(英文):Advanced Compiler Design and Implementation
书名(中文):高级编译器设计与实现
原作者:Steven S. Muchnic
书名(英文):Modern Compiler Implementation in C
书名(中文):现代编译原理--C语言描述
原作者:Andrew W.Appel / Maia Ginsburg
四。Operating System (操作系统)
书名(英文):Operating System Concepts (Sixth Edition)
书名(中文):操作系统概念 (第六版)
原作者:Abraham Silberschatz / Peter Baer Galvin / Greg Gagne
书名(英文):Operating Systems : Design and Implementation (Second
Edition)
书名(中文):操作系统:设计及实现 (第二版)
原作者:Andrew S. Tanenbaum / Albert S. Woodhull
翻译者:王鹏、尤晋元、朱鹏、敖青云
书名(英文):The Design and Implementation of the 4.4BSD Operating System
书名(中文):4.4BSD操作系统设计与实现
原作者:Marshall Kirk McKusick / Keith Bostic / Michael J. Karels / John
S.Quarterman
书名(英文):The Design and Implementation of the FreeBSD Operating System
书名(中文):FreeBSD操作系统设计与实现
原作者:Marshall Kirk McKusick / George V. Neville-Neil
翻译者:张辉
书名(英文):The Design of The UNIX Operating System
书名(中文):UNIX操作系统设计
原作者:Maurice J.Bach
书名(英文):UNIX Internals : The New Frontiers
书名(中文):UNIX系统内幕
原作者:Uresh Vahalia
书名(英文):UNIX Systems for Modern Architectures
书名(中文):现代体系结构上的UNIX系统--内核程序员的SMP和Caching技术
原作者:Curt Schimmel
翻译者:张辉
书名(英文):Lions' Commentary on UNIX 6th Edition with Source Code
书名(中文):莱昂氏UNIX源代码分析
原作者:John Lions
书名(英文):Distributed Systems : Principles and Paradigms
书名(中文):分布式系统:原理与范例
原作者:Andrew S.Tanenbaum / Maarten van Steen
五.Database (数据库)
书名(英文):An Introction to Database Systems, Eighth Edition
书名(中文):数据库系统导论 (第八版)
原作者:C. J.Date
书名(英文):Database System Concepts, Fourth Edition
书名(中文):数据库系统概念 (第四版)
原作者:Abraham Silberschat / Henry F.Korth / S.Sudarshan
六。C (C 语
书名(英文):The C Programming Language, Second Edition
书名(中文):C程序设计语言,第二版
原作者:Brian W. Kernighan / Dennis Ritchie
书名(英文):The Art and Science of C : A Library-Based Introction to
Computer Science
书名(中文):C语言的科学和艺术
原作者:Eric S.Roberts
书名(英文):Programming Abstractions in C : A Second Course in Computer
Science
书名(中文):C程序设计的抽象思维
原作者:Eric S.Roberts
书名(英文):Expert C Programming
书名(中文):C专家编程
原作者:Andrew Koenig
书名(英文):C Traps and Pitfalls
书名(中文):C陷阱与缺陷
原作者:Andrew Koenig
七。C++ (C++ 语言)
书名(英文):C++ Primer, Third Edition & Forth Edition
书名(中文):C++ Primer (第三版、第四版)
原作者:Stanley B.Lippman / Josée LaJoie / Barbara E.Moo
翻译者:李师贤、蒋爱军、梅晓勇、林瑛
平心而论,这本书的第三版并不适合入门,但是第四版适合。所以第四版的出现并不意味着第三版就失去了其价值。在我看来最好的办法就是买一本第四版的中文版和一本第三版的英文版。中文版用来入门,英文版用来作参考手册。mufasa
书名(英文):The C++ Programming Language, Special Edition
书名(中文):C++ 程序设计语言 (特别版)
原作者:Bjarne Stroustrup
书名(英文):Inside the C++ Object Model
书名(中文):深度探索 C++ 对象模型
原作者:Stanley B. Lippman
书名(英文):Effective C++, Thrid Edition
书名(中文):Effective C++ (第三版)
原作者:Scott Meyers
书名(英文):More Effective C++
书名(中文):More Effective C++
原作者:Scott Meyers
翻译者:侯捷
书名(英文):Thinking in C++, Second Edition
书名(中文):C++编程思想 (第二版)
原作者:Bruce Eckel
书名(英文):Thinking in C++, Volume 2 : Practical Programming
书名(中文):C++编程思想 第2卷:实用编程技术
原作者:Bruce Eckel / Chuck Alison
书名(英文):Ruminations on C++ : A Decade of Programming Insight and
Experience
书名(中文):C++沉思录
原作者:Andrew Koenig / Barbara Moo
八。Object-Oriented (面向对象)
书名(英文):Object-Oriented Analysis and Design with Applications, Second
Edition
书名(中文):面向对象分析与设计 (第二版)
原作者:Grady Booch
书名(英文):Object-Oriented Modeling and Design with UML,Second Edition
书名(中文):UML面向对象建模与设计 (第二版)
原作者:Michael Blaha / James Rumbaugh
翻译者:车皓阳、杨眉
书名(英文):Object-Oriented Software Construction (Second Edition)
书名(中文):面向对象软件构造 (第二版)
原作者:Bertrand Meyer
书名(英文):Design Patterns : Elements of Reusable Object-Oriented
Software
书名(中文):设计模式:可复用面向对象软件的基础
原作者:Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides
九。Software Engineering (软件工程)
书名(英文):Software Engineering (7th Edition)
书名(中文):软件工程 (第七版)
原作者:Ian Sommerville
书名(英文):Software Engineering : A Practitioner's Approach (Fifth
Edition)
书名(中文):软件工程:实践者之路 (第5版)
原作者:Roger S. Pressman
书名(英文):Software Engineering : Theory and Practice (Second Edition)
书名(中文):软件工程:理论与实践 (第二版)
原作者:Shari Lawrence Pfleeger
书名(英文):The Mythical Man-Month
书名(中文):人月神话
原作者:Frederick Phillips Brooks
书名(英文):Software Architecture : Perspectives On an Emerging Emerging
Discipline
书名(中文):软件体系结构:一门初露端倪学科的展望
原作者:Mary Shaw / David Garlan
十。UNIX Programming (UNIX编程)
书名(英文):Advanced Programming in the UNIX Environment, Second Edition
书名(中文):UNIX 环境高级编程 (第二版)
原作者:W.Richard Stevens / Stephen A.Rago
翻译者:尤晋元、张亚英、戚正伟
书名(英文):The UNIX Programming Environment
书名(中文):UNIX 编程环境
原作者:Brianw. Kernighan
书名(英文):UNIX Network Programming, Volume 1 : The Sockets Networking
API (Third Edition)
书名(中文):UNIX 网络编程 卷1:套接字联网API (第三版)
原作者:W. Richard Stevens / Bill Fenner / Andrew M. Rudoff
书名(英文):UNIX Network Programming Volume 2 : Interprocess
Communications (Second Edition)
书名(中文):UNIX 网络编程 卷2:进程间通信 (第2版)
原作者:W. Richard Stevens
书名(英文):The Art of UNIX Programming
书名(中文):UNIX 程序设计艺术
原作者:Eric Raymond
UNIX Administration (UNIX系统管理)
书名(英文):UNIX System Administration Handbook (Third Edition)
书名(中文):UNIX系统管理技术手册 (第三版)
原作者:Evi Nemeth / Garth Snyder
书名(英文):Linux Administration Handbook
书名(中文):Linux系统管理技术手册
原作者:Evi Nemeth / Garth Snyder / Trent R.Hein
书名(英文):UNIX Unleashed (Fourth Edition)
书名(中文):UNIX 技术内幕 (第四版)
原作者:Robin Anderson / Andy Johnston
书名(英文):UNIX:The Textbook
书名(中文):UNIX操作系统教程
原作者:Syed Mansoor Sarwar / Robert Koretsky / Syed Aqeel Sarwar
书名(英文):Unix Backup & Recovery
书名(中文):UNIX 备份与恢复
原作者:W.Curtis Preston
十一。Networks (网络)
书名(英文):Computer Networks (Fourth Edition)
书名(中文):计算机网络 (第4版)
原作者:Andrew S. Tanenbaum
书名(英文):TCP/IP Illustrated, Volume 1 : The Protocols
书名(中文):TCP/IP 详解 卷1:协议
原作者:W. Richard Stevens
书名(英文):TCP/IP Illustrated, Volume 2 : The Implementation
书名(中文):TCP/IP详解 卷2:实现
原作者:Gary R. Wright / W. Richard Stevens
书名(英文):TCP/IP Illstrated, Volume 3 : TCP for Transactions, HTTP,
NNTP, and the UNIX Domain Protocols
书名(中文):TCP/IP详解 卷3:TCP事务协议、HTTP、NNTP和UNIX域协议
原作者:W. Richard Stevens
书名(英文):Internetworking with TCP/IP Vol I : Principles, Protocols,
and Architecture (Third Edition)
书名(中文):TCP/IP 网络互连技术 卷1:原理、协议和体系结构 (第3版)
原作者:Douglas E. Comer
书名(英文):Internetworking with TCP/IP Vol II : Design, Implementation,
and Internals (Second Edition)
书名(中文):TCP/IP 网络互连技术 卷2:设计与实现 (第2版)
原作者:Douglas E. Comer / David L. Stevens
书名(英文):Internetworking with TCP/IP Vol III : Client-Server
Programming and Applications, BSD Socket Version (Second Edition)
书名(中文):TCP/IP 网络互连技术 卷3:客户服务器编程和应用BSD套接字版 (第2版)
原作者:Douglas E. Comer / David L. Stevens
书名(英文):Internetworking with TCP/IP Vol III : Client-Server
Programming and Applications, Windows Sockets Version
书名(中文):TCP/IP 网络互连技术 卷3:客户服务器编程和应用Windows套接字版
原作者:Douglas E. Comer / David L. Stevens
十二。Windows Programming (Windows 编程)
书名(英文):Inside Microsoft Windows 2000 (Third Edition)
书名(中文):Microsoft Windows 2000 技术内幕 (第3版)
原作者:David A.solomon Mark E.Russinovich
书名(英文):Programming Windows (Fifth Edition)
书名(中文):Windows 编程 (第5版)
原作者:Charles Petzold
书名(英文):Programming Applications for Microsoft Windows
书名(中文):Microsoft Windows 应用程序设计
原作者:Jeffrey Richter
书名(英文):Programming with Microsoft Visual C++ .NET (Sixth Edition)
书名(中文):Visual C++.NET 技术内幕 (第6版)
原作者:George Shepherd / David Kruglinski
书名(英文):Dissecting MFC
书名(中文):深入浅出MFC
原作者:侯捷
十三。Other (其它)
书名(英文):Computer Systems : A programmer' s Perspective
书名(中文):计算机系统
原作者:Randal E. Bryant / David R. O'Hallaron
书名(英文):Pattern Classification (Second Edition)
书名(中文):模式分类 (第2版)
原作者:Richard O. Duda / Peter E. Hart / David G. Stork
书名(英文):Code Complete 2
书名(中文):代码大全第2版
原作者: Steve McConnell
书名(英文):Programming Pearls (2nd Edition)
书名(中文):编程珠玑第2版
原作者: Jon Bentley
别人给我推荐的,我只看过一两本。
‘叁’ 编译原理第三版答案
http://download.csdn.net/source/512390
资源大小: 3.41MB
资源类型:
发布人: liyuejin
发布日期: 3个月前
Tag: 答案 编译原理第三版 陈火旺
资源分: 10
下载人数: 46
‘肆’ C++ 程序的编译过程…
一般来讲,编好的代码(源代码)经过编译,链接,生成可执行的文件,然后就可以执行。即编辑的代码要最重生成可执行的程序(可执行的文件),需要经过编译、链接两个步骤。编译的作用是对代码进行语法检查,而链接的作用是链接代码中用到的编译器提供的资源。所以,通常通过编译、链接后形成的只形成一个可执行的文件。
但是,假如你是采用工程的形式进行编程的话,工程包括很多个文件,比如,VC编程中MFC编程。这个时候源代码通过链接后就形成的是多个文件!
中型程序是什么语言写的,这个问题恐怕语言专家也不好回答,因为每种语言,比如C、C++、JAVA等等都可以写中型程序,而且都是各有优缺点。但是,根据编程的用途,各种语言根据自身的特点可以针对性的使用,如游戏编程一般使用...语言,而系统软件编程一般使用...语言,这种说法可能更有使用价值一些。
‘伍’ 编译原理的课程设计,构造正规式r*(闭包运算)的NFA的程序实现。求源代码,求文档。 谢谢
个人感觉画出NFA最直观易懂了。前一个正规式仅有一个状态(开始和接受状态同),后一个虽然是三个状态,但是其中一个是绕着a闭包的状态,一个是绕着b闭包的状态,而这两个状态又是绕着第三状态(既是开始状态又是接受状态)进行闭包,所以实际上可合并为一种状态,即是说这两个正规式对应于同一个NFA,所以相等是显然成立的。
‘陆’ 编译原理课程设计:从NFA构造与之等价的正规式r的程序实现
NFA,DFA要画图,不会画图啊!
‘柒’ 编译原理这门课一共有多少章节
这门课一共有8个章节。包括:第一章引论,第二章词法分析,第三章语法分析,第四章语法制导的翻译,第五章运行时的存储空间管理,第六章中间代码生成,第七章代码生成,第八章代码优化,。
‘捌’ 编译原理 中间代码生成 的程序求一个
在网上找了半天,抱歉只找到了GCC的源码。
源码查看(GCC):https://gcc.gnu.org/svn/gcc/trunk/
包括完整的词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等过程。
另外,楼主是想写一个这样的程序吗?如果是的话可以看一下这个,虽然不是JAVA,但是可能会对你有帮助:http://m.blog.csdn.net/blog/USBdrivers/8554689
顺便推荐一个源码下载网站,如果楼主想要源码,不妨先在这上面搜搜:http://sourceforge.net/
我也是写程序的,祝你早日摸到门道,加油哦!
‘玖’ 求 编译原理龙书第二版习题答案
这里有编译原理龙书第二版1-8章习题答案 http://download.csdn.net/detail/super_fyb/4928106
‘拾’ 编译原理文法分析
改完了,能文法分析出来了!!
大概 跟你说下 你的错误吧:
出错地点:
1.声明的stack[50]没有初始化;
2.stack的入栈是错误的,按照你的方式,如果原来有TM,再加入T->FN,则M就被挤出来了.(这里很关键,你对照我给你改的再看看)
3.s指针在你入栈操作以后并没有指向栈顶,而是保持了不变,这肯定是有问题的.(传入push函数的时候直接传参数s就好了.)
4.if(*s==*p){***}else{}的else的右括号管辖的范围 有错误
不嫌弃的话,可以去http://blog.csdn.net/fangguanya,我的BLOG,不怎么充实,呵呵,有这个程序的运行结果的. 谢谢 呵呵.
总之你对照我给你改的再看看吧. 我把我的测试输出 也给保留了.你好对照点.
(PS.我用的vs2005,用的时候你改下头申明,其他一样)
// grammar.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
char * spush(char *stack,char *pt);
bool analyse(char *p);
void main()
{
//将分析串存放在二维数组中
char input[5][10]={"i+i#",
"i*(i+i)#",
"i*i+i#",
"i+*#",
"+i*i#"};
bool flag; //定义一个布尔型的标记量
for(int h=0;h<5;++h)
{
flag=analyse(input[h]);
if(flag) cout<<"恭喜你!"<<input[h]<<"语法分析成功,合法!"<<endl;
else cout<<"对不起!"<<input[h]<<"语法分析失败,非法!"<<endl;
}
int aaa;
cin>>aaa;
}
//定义各一将串逆序入栈的函数
char * spush(char *stack,char *pt)
{
int l=0;
//while循环的作用是将指针指向字符串的末尾,然后再由后向前入栈,从而实现逆序
while(*pt!='\0')
{
pt++;
l++;
}
if (*stack == '#')
{
stack++;
}
while(l)
{
pt--;
char cTempIntoStack = (*pt);
*stack=cTempIntoStack;
stack++;
l--;
}
stack--; //由于前面向前加了一位,要返回
////////////////
return stack;
///////////////////////////////////
}
/*LL(1)分析表
i + * ( ) #
E TM +TM
F i (E)
M TM e e
N e *FN e e
T FN FN
*/
//分析函数
bool analyse(char *p){
char analyseTable[5][6][4]={
"TM", "", "", "TM", "", "",
"i", "", "", "(E)", "", "",
"", "+TM", "", "", "e", "e",
"", "e", "*FN", "", "e", "e",
"FN", "", "", "TN", "", ""
};
char *stack = new char[50]; //定义一个栈空间
for (int iStack = 0;iStack<50 ;iStack++)
{
stack[iStack] = 0;
}
char *s=stack; //用指针*s指向栈的起始地址
*s='#'; //将“#”入栈
s++; //指针加1
*s='E'; //将“E”入栈
//下面的while循环实现字符串的词法分析操作
int count = 0;
while(*s!='#' || *p!='#'){
count++;
char * temp = s;
cout<<"NO."<<count<<endl;
cout<<"STACK"<<endl;
while (*temp != '#')
{
cout<<*temp<<" ";
temp--;
}
cout<<endl;
int x,y;
//若果栈顶数据和分析串的字符匹配,则将符号栈的栈顶数据出栈(即将栈顶指针减1)
if(*s==*p){
cout<<"Before :"<<*s<<endl;
s--;
p++;
cout<<"After :"<<*s<<endl;
}
//当符号栈和分析串的字符不匹配时,查分析表
else {
switch(*s){
case 'E':x=0;break;
case 'F':x=1;break;
case 'M':x=2;break;
case 'N':x=3;break;
case 'T':x=4;break;
default:return false;
}
switch(*p){
case 'i':y=0;break;
case '+':y=1;break;
case '*':y=2;break;
case '(':y=3;break;
case ')':y=4;break;
case '#':y=5;break;
default:return false;
}
//若果对应的为空,则分析串非法,退出
if(analyseTable[x][y][0]=='\0') return false;
//若查表所对应的为'e',则将符号栈的栈顶数据出栈
else if(analyseTable[x][y][0]=='e') s--;
//其它,这时将查表所得的项逆序入符号栈
else {
s=spush(s,analyseTable[x][y]);
}
}
}
return true; //分析成功,返回
}