编译原理的用法
1. 左结合和右结合的问题~和编译原理有关
B与第一个*结合:用编译原理的运算符的结合性来解释的话,就是假设*是左结合的。当运算分量(本例中是B)两侧都有运算符(本例中是*)的时候,采用左结合。即B与B左边的*结合。
eg: L —>A*B*C 先计算 A*B 然后计算(A*B)*C。
不知道你懂么??
2. C#中如何将输入的字符串识别为(转化为)程序语句
c#有个System.CodeDom的命名空间,
他就是专门用来动态构建c#代码并编译执行的.
用法就自己查查吧
3. 数据结构、操作系统、编译原理,哪些课实际应用较多
我曾经是一个计算机专业的学生,普通大学毕业生,现在已经转行当了中学的计算机教师,因为负荷不了软件公司高难度的工作,可以作为过来人告诉你需要给你建议的是,软件专业的不能说哪门课很重要,只能说是无论有多少门都很重要,你说不能兼顾,你该自己思考一下,为什么不能兼顾呢?时间不过的话,是否是自己在课堂上用法不对?或者是在课下复习兼顾学习的用法不对?真正等到自己去工作去踏入社会以后这个想法很强烈就是为什么当初不再多学一点,因为我去过软件公司上班,平常的的成绩名列前茅,但是开始接手工作,就觉得自己学的还不够多。计算机的专业总是要比别人付出的更多。
想找重要的学,你是太急于求成,可以这么说把,没有重点,最基础的永远是应用到最简单的原理。
4. 编译原理及实践的题目
常量传送比常量合并更难,是因为常量是存在静态区,而变量是存在栈区
5. C转义字符及编译原理
.2f的意思就是控制输出的精度,指显示两位小数
不能加strlen是因为这个是字符串的操作,你要加string.h的头文件
(Q)这个用法我没用过,由于现在没用自己的电脑,看不到stdio.h的具体内容,不知道printf的函数实现,不过你可以打开stdio.h这个文件,就可以看到函数的实现,相信就比较好理解了,当然你要保证(q)这样的用法是正确的
6. 如何编写简单的java编译器(用java语言),比如说能翻译诸如"public static void main" 的就行。
看看《编译原理》或许对你有帮助。
要编译一门语言,你要知道它的语法 syntax 和语义 semantics,语法是用来检查所谓的“语法错误”,语义是让语句变得有意义,对计算机程序语言来说,就是把它翻译成计算机能执行的指令。
你需要了解最基本的一些概念诸如正则表达式,上下文无关语言,上下文相关语言,等等。
《编译原理》是很通用的基础书籍,里面我记得有介绍了 yacc 的用法,这是 GNU 里的一款编译器的编译器,对应有一个 Java 的 Project 叫 yacc for Java,你可以去 google 找一下。
如果你能写出一个检查语法错误的程序就已经很不错了,你可以考虑改做一个编辑器之类的软件(只需要找错,不需要编译)。如果你真要做编译器,工程量巨大不说,你首先需要对至少两种语言都熟悉,你需要对计算机的指令和它的执行方式有深刻理解,尤其是 Java 这种动态的高级语言,有类啊对象啊什么的,要把它翻译成机器指令实属不易,至今除了 Sun 的 javac 都没有很成功的编译器,那个 GCJ(把 Java 编译成本地代码)的尝试也只成功了一半,以前还被 MingW 包含在工具箱里(和 GCC 什么的一起),但是有很多特性不支持,而且已经很久不更新了,新版本的 MingW 里都没有了。想一个人从零开始设计一款 Java 的编译器,即使是专家都做不到啊。
7. goes用法四个非终结符的last vt集
G[S]中的开始符号是为S啊,文法中并没出现.开始符号应为P吧
FIRSTVT(P)={(,a}
FIRSTVT(F)={a}
LASTVT(F)={a}
LAASTVT(P)={),a}
8. MFC中 free((void*)m_pszAppName)的用法作用,m_pszAppName应该是个什么值
在MFC中,m_pszAppName是CWinApp类的成员变量,
在创建APP类的实例中,通过AfxLoadString(AFX_IDS_APP_TITLE,)函数获取的值,这个值是在资源文件中设置的,如果资源中去掉这个字符串,那么通过获取exe文件名获取。
这些代码,是被MFC封装的,在工程中不可见,只是通过一堆宏实现了创建,并调用了CWinApp类函数完成的。
另,这个字符串保存的不是程序路径,而是“应用程序名字”,一般和主框架窗口标题相同。
9. AXD使用方法
如何正确使用ads(axd)
1、ads是由arm公司提供的编译和调试环境,非常好,不容质疑!搞arm开发的人员,不能不用ads,例如要开发一个驱动,首先是在ads中编译、调试通过,才会加入操作系统中,这是开发过程。 2、Ads中codewarria是编译环境,在这个环境中,应正确设置程序工作或调试的地址,这两个地址不一定同址,每次只能设置一种,除非它们相同。设置是通过菜单项edit->target setting完成的。编译环境中的这个地址是由链结器标记在程序上的(暂且这样说吧,因为这部分实际涉及的是编译原理中的链接定位问题,它主要涉及的是程序中的跳转地址,这是与软件相关的)。这两个地址都必须与硬件地址配合,程序才能正常工作。因为mcu(arm)是硬件寻址的,比如4510在正常初始化后,flash被定位在0x0地址,这时如果mcu有一条指令是跳转到0x0地址,那么mcu一定会将PC指向flash的0x0地址,mcu却是由软件控制的。如果这时remap了,flash被定位在0x1000000地址,但写在flash中的程序仍然控制mcu跳转到0x0地址,那么PC就指向了sdram的0x0地址,那里写着什么是你的事情了。
3、工作地址是指编译好的程序(一般是*.bin文件)写入flash的地址,如软件程序工作地址从0x0开始,flash也应该定位在0x0地址开始,软件与硬件地址要相同,才能正常工作。当然,如果做remap,把程序拷贝到新的0x0地址处,也就是sdram中,程序也可以正常工作的。
4、如果用axd调试,则是另外一种情况:程序必须写在sdram中,而不是flash中。Sdram的地址在那里呢?4510上电后,一般设置在0x1000000,而把flash设置在0x0地址。如果codewarria编译时把程序设置在0x0地址,调试时就会把软件加载在一个“虚”位置,这个位置(地址)是flash的地址,mcu是无法把程序写入flash中,程序就成为空中飘荡的幽灵,这时如果用反汇编,可以看到有些内容已经变质了,不是你的程序了,明白是为什么吗?而执行的话,mcu读取flash中的内容,它们并非你的程序,结果是跑飞了。解决办法是remap(对4510。如是44b0,请在codewarria编译环境中把程序定位在 sdram段,如需中断,请在flash中0x0地址先写入相关中断向量,并跳转到sdram中),把sdram设置在0x0地址,再加载程序。 5、Remap时,请用axd中的命令行方式,程序是实现不了的。即:system view->command line interface。只有先把硬件地址设置的与程序相同了、程序段可以被装入sdram中时,才可加载程序。
6、切记这两点:调试程序一定要放在sdram中、sdram地址与程序地址一定要相同。
7、0x8000这个地址是怎么来的呢?原来:0x0地址是中断向量地址,这要占用几十个字节