‘壹’ 从工作角度出发,学习编译原理和操作系统哪个对于个人帮助更大
我是学软件工程的,你说的这些课程我们都已经学完。 如果你想从程序员做起的话,《编译原理》就很重要了,你只有知道了编译器是怎么编译你的程序的,你才可能编写出高效,稳健,占用内存少的程序。我们学编译原理的时候还自己设计了解释器。
‘贰’ 学习编译原理和操作系统对编程能力有什么作用
学习编译原理和操作系统对编程能力对编程能力的作用在于:
1、学好了编译原理,才可能编写出高效,稳健,占用内存少的程序。
2、学习操作系统对windows相关的编程很有帮助。如果是对操作系统关系不大的C/C++/c#,java之类的编程,关系不大。
编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。 编译原理是计算机专业设置的一门重要的专业课程。虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。
操作系统(Operating System,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。
‘叁’ 操作系统 编译原理 跟 组成原理 有关系吗
操作系统、编译原理、计组本身没有关系。
一般计算机学科有两条线分为
偏软:C语言、C++、数据结构、编译原理、操作系统、计算机网络
偏硬:数字(模拟)电路、微机接口与原理、计算机组成原理
这些都是基本功,如果都学通了,后续的学习都没问题。
通常情况下,看你个人的兴趣发展方向,如果选择软件方向,学完了数据结构一般会学习《编译原理》(公认计算机最难的学科)
‘肆’ 操作系统原理,数据结构,编译原理,应该怎么学
我也是过来人了·想想当初我也和你一样什么都想搞懂 结果却是一事无成 其实有些东西我们并没有必要知道的那么清楚 例如 1+1=2 你知道是这样就好 并不需要去做过多的介绍 随着我们不断成长 阅历不断增加 我们慢慢就会明白 为什么 1+1=2 而不是 =3 操作系统的原理也一样 我们没必要去刻意的学什么 其实呢 学编程的过程中你就会慢慢的明白那些软件的运行原理 其他的也是一样
‘伍’ 有哪些比较好的关于编译原理 操作系统的网络公
个人建议:
OS最好看视频。每天看一点。 由于时间原因,已经坚持每天看一个OS视频将近40天。 积少成多。理解的也更深刻。
编译原理最好也是从视频或者小项目入手,然后再去看书 。不要上来就看龙书虎书。 推荐阅读顺序:
1. 很多大神都推荐过的,实践性强,超级适合小白。 Compiler Construction (豆瓣) 不看视频直接上这本书也可以的。
2. 比较全面《Engineering a Compiler, 2nd Edition》 编译器设计 (豆瓣)
3. 加强前端: Parsing Techniques (豆瓣)
‘陆’ 最近学编译原理和操作系统,实在不会写程序,哪位神人能指点一下,比如词法分析器,创建进程之类的程序
我这个学期也在学编译原理和OS , 感觉有门语言功底对学这些课程帮助很大。比如OS的进程互斥同步,如果C语言学的好的话好理解些 对于编译原理写词法分析器,也需要有门语言啊 C、java、C#等都可以写 所以的话在学这些课程的基础上 复习和巩固以前的有必要
‘柒’ 各位编程前辈,是先学《操作系统原理》还是〈〈编译原理〉〉
我们学校vb是文科生和经管类学生学的...理工科学的都是C++...
然后刚开始学的是how to program...java和C++的都可以...不过Java上手比较容易...再然后是数据结构...数据结构用C或者C++比较靠谱...高数线代离散神马的都很浮云...因为等到写程序的时候早就忘干净了...或许数字逻辑还管用那么一点...再然后就是计算机组成与设计...这个是用Verilog的...脑内cpu是怎么工作的并且实践之...操作系统...一般操作系统都是用C写的吧你搞个Minix开始折腾它...然后还有网络那个要到linux/unix下面去折腾...很推荐unix环境高级编程...那个作者就是minix的作者...很牛...如果你想要像游戏之父那样...那大概还要学建模...面向对象设计啊软件工程之类的...
如果只是想参加编程比赛的话...指路topcoder...只要英语够用就好了...
‘捌’ 编译原理对符号表进行操作有哪些
//----------------------------符号表---------------------------------------
//预定义
struct snode;
struct stable;
//符号表结点
struct snode
{
string text; //符号名称
string type; //符号类型
union {int ival;double rval;}value; //值------------
int offset; //偏移量
snode *nextn; //指向下一个节点
stable *header; //指向下属符号表的表头
};
//符号表表头
struct stable
{
stable *previous; //指向先前创建的符号表表头
snode *firstnode; //指向第一个结点
stable *ifnoelements;//如果此表为空,则用它指向下一个表头
};
//当前表头
stable *currtab;
//建立新表,返回表头指针
//参数:当前的节点的表头
stable *mktable(stable *previous)
{
stable *newtable =new stable;
newtable->previous=previous;
newtable->ifnoelements=0;
newtable->firstnode=0;
if(previous->firstnode==0)
{
previous->ifnoelements=newtable;
}
else
{
snode* ininode=previous->firstnode;
while(ininode->nextn!=0)
{
ininode=ininode->nextn;
}
ininode->header=newtable;
}
currtab=newtable;
return newtable;
}
//在node指向的符号表中为text建立一个新表项,返回新建立的结点
//参数:node为当前的节点的表头,text名称,type类型,offset偏移
snode *enter(stable *table,string text,string type,int offset,double value)
{
//创建节点
snode *newnode = new snode;
newnode->text=text;
newnode->type=type;
newnode->offset=offset;
newnode->nextn=0;
newnode->header=0;
if(type=="int")
{
newnode->value.ival=value;
}
else if(type=="real")
{
newnode->value.rval=value;
}
//判断此表是否无元素
if(currtab->firstnode==0)
{
currtab->firstnode=newnode;
currtab->ifnoelements=0;
}
else
{
snode* addnode=currtab->firstnode;
while(addnode->nextn!=0)
{
addnode=addnode->nextn;
}
addnode->nextn=newnode;
}
return newnode;
}
//初始化符号表,返回表头节点
void inittab()
{
stable *initable = new stable;
initable->firstnode=0;
initable->previous=0;
initable->ifnoelements=0;
currtab=initable;
}
//查找指针,表示结果
snode *searchresult;
//查找变量,返回指向该变量的指针
//查找变量,返回指向该变量的指针
snode* search(string name)
{
//检查表是否空
bool isempty=true;
stable* checktab=currtab;
if(checktab->firstnode!=0)
{isempty=false;}
while(checktab->previous!=0)
{
if(checktab->firstnode!=0)
{isempty=false;}
checktab=checktab->previous;
}
if(checktab->firstnode!=0)
{isempty=false;}
if(isempty)
{
return 0;
}
snode* lastnode;
if(currtab->firstnode==0)
{
//移到非空的表头
stable* notnullhead=currtab;
while(notnullhead->firstnode==0)
{
notnullhead=notnullhead->previous;
}
snode* tmpnode=notnullhead->firstnode;
//移到最后的元素
while(tmpnode->nextn!=0)
{
tmpnode=tmpnode->nextn;
}
lastnode=tmpnode;
}
else
{
lastnode=currtab->firstnode;
while(lastnode->nextn!=0)
{
lastnode=lastnode->nextn;
}
}
//移到表头
stable* fronttab=currtab;
while(fronttab->previous!=0)
{
fronttab=fronttab->previous;
}
snode* nownode=0;
while(nownode!=lastnode)
{
while(fronttab->ifnoelements!=0)
{
fronttab=fronttab->ifnoelements;
}
nownode=fronttab->firstnode;
while(nownode->nextn!=0)
{
if(nownode->text==name)
{
searchresult=nownode;
return searchresult;
}
nownode=nownode->nextn;
}
if(nownode->text==name)
{
searchresult=nownode;
return searchresult;
}
fronttab=nownode->header;
}
if(nownode->text==name)
{
searchresult=nownode;
return searchresult;
}
return 0;
}
//消毁符号表
void delNode()
{
//more codes here......
}
‘玖’ 操作系统,汇编语言,编译原理,这三门课程学习步骤是什么 以及原因,求详细解释,非常感谢。
汇编语言、编译原理、操作系统吧
1.首先编译原理肯定要在汇编之后学的,你不会汇编编什么译
2.汇编语言肯定讲的是实模式的内容,学完了实模式对计算机内程序有个基本概念了,研究保护模式的时候就要涉及到操作系统了
3.至于编译原理我没学过,姑且认为应该也是实模式的内容吧,所以放到操作系统之前学习