请问大家在实际项目中用到过编译原理吗?

词法分析,语法分析等等...请稍加详细的描述一下你的应用,谢谢啦!... 词法分析, 语法分析等等 ...
请稍加详细的描述一下你的应用,谢谢啦!
展开
 我来答
百度网友6aff234ce
2007-11-23 · TA获得超过1020个赞
知道小有建树答主
回答量:447
采纳率:0%
帮助的人:409万
展开全部
我跟你说,编译原理太有用了。
我是做手机游戏的,现在做一个游戏引擎。既然是引擎,就需要提供抽象的东西给上层使用。这里,我引入了脚本系统。
这个脚本系统包括一堆我根据实际需求自行设计的指令集,包括基本的输入输出,四则运算,系统功能调用,函数声明,调用等等(其实你要是用过lua或者其他游戏脚本你就知道了。)整个结构包括指令集、编译器、虚拟机等部分。这样,引擎提供一些基础服务,比如绘图,计算位置等,脚本就可以非常简单控制游戏。甚至快速构建新游戏。你应该知道QUAKE引擎吧?
这里提供给你一个计算器的小程序,应用了EBNF理论,支持表达式,比如(2+3*6)*4+4,你自己体验一下它的简洁和强大。
/*
simple integer arithmetic calculator according to the EBNF
<exp> -> <term>{<addop><term>}
<addop>->+|-
<term>-><factor>{<mulop><factor>}
<mulop> -> *
<factor> -> ( <exp> )| Number
Input a line of text from stdin
Outputs "Error" or the result.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char token;/*global token variable*/
/*function prototypes for recursive calls*/
int exp(void);
int term(void);
int factor(void);

void error(void)
{
fprintf(stderr,"Error\n");
exit(1);
}

void match(char expectedToken)
{
if(token==expectedToken)token=getchar();
else error();
}

main()
{
int result;
token = getchar();/*load token with first character for lookahead*/
result = exp();
if(token=='\n')/*check for end of line */
printf("Result = %d\n",result);
else error();/*extraneous cahrs on line*/
return 0;
}

int exp(void)
{
int temp = term();
while((token=='+')||(token=='-'))
switch(token)
{
case '+':
match('+');
temp+=term();
break;
case '-':
match('-');
temp-=term();
break;
}
return temp;
}

int term(void)
{
int temp = factor();
while (token=='*')
{
match('*');
temp*=factor();
}
return temp;
}

int factor(void)
{
int temp;
if(token=='('){
match('(');
temp = exp();
match(')');
}
else if(isdigit(token)){
ungetc(token,stdin);
scanf("%d",&temp);
token = getchar();
}
else error();
return temp;
}
其实编程学到一定程度总是没有方向了,总是在问学C/C++下一步怎么学啊,觉得掌握了该语言了云云,实际上,你缺少的就是这些软的东西,缺少的是理论。
编译原理不是单一的理论,它涵盖了一个niche,里面可以学到很多其他知识,比如正则表达式、BNF、EBNF、分析树、语法树还有很多运行时环境等知识
这些给你带来的是非常丰厚的回报。不说多了,学完运行时,你就会加深对C++语言本身的理解。
皇家救星1985
2007-11-23 · TA获得超过1131个赞
知道大有可为答主
回答量:1579
采纳率:0%
帮助的人:1671万
展开全部
我也想知道,留名关注

不过就算没有应用,编译原理学了之后不应用也对编程很有帮助,知道为什么一大堆文本怎么变成程序的,通过什么手段实现的

况且学了之后还有助于设计一些语句识别,如正则式之类的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
radestor
2007-11-23 · TA获得超过311个赞
知道小有建树答主
回答量:409
采纳率:0%
帮助的人:206万
展开全部
很少用到的。个人觉得编译原理是程序员要理解代码是如何被机器执行的一门课程。应用就很少吧,除非做编译器开发。
上次回一个帖子,输入四则运算,输出答案,例如“1+2*3”,觉得这也算编译原理的笑应用了,毕竟把数学语言翻译成编程语言啦!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lantiane
2007-11-22
知道答主
回答量:57
采纳率:0%
帮助的人:36.4万
展开全部
等着高手给你回答吧.

我现在才大四,

以后好多课程有用到那里的思想,具体的技术不清楚.

自动机的知识很重要,有人式智能有关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxyyzm
2007-11-23
知道答主
回答量:33
采纳率:0%
帮助的人:17.8万
展开全部
比如说同一个程序,不同的编译器实现,方法不同,有时效果也不一样。了解了编译原理,就知道为什么会这样。对于深层次理解程序运行过程有作用。

另外我觉得编译原理不能局限于书上说的那一点东西。我记得上面主要讲的是自动机识别语句。其实其他的方面同样很重要!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2007-11-24
展开全部
可能做新系统新平台会用到吧```
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式