1.谁有编译原理的论文或者实验报告继续
有编译原理的论文或者实验报告的文章可以参照或者依据本文——论文的写作格式、流程与写作技巧进行撰写:广义来说,凡属论述科学技术内容的作品,都称作科学著述,如原始论著(论文)、简报、综合报告、进展报告、文献综述、述评、专著、汇编、教科书和科普读物等。
但其中只有原始论著及其简报是原始的、主要的、第一性的、涉及到创造发明等知识产权的。其它的当然也很重要,但都是加工的、发展的、为特定应用目的和对象而撰写的。
下面仅就论文的撰写谈一些体会。在讨论论文写作时也不准备谈有关稿件撰写的各种规定及细则。
主要谈的是论文写作中容易发生的问题和经验,是论文写作道德和书写内容的规范问题。 论文写作的要求 下面按论文的结构顺序依次叙述。
(一)论文——题目科学论文都有题目,不能“无题”。论文题目一般20字左右。
题目大小应与内容符合,尽量不设副题,不用第1报、第2报之类。论文题目都用直叙口气,不用惊叹号或问号,也不能将科学论文题目写成广告语或新闻报道用语。
(二)论文——署名科学论文应该署真名和真实的工作单位。主要体现责任、成果归属并便于后人追踪研究。
严格意义上的论文作者是指对选题、论证、查阅文献、方案设计、建立方法、实验操作、整理资料、归纳总结、撰写成文等全过程负责的人,应该是能解答论文的有关问题者。现在往往把参加工作的人全部列上,那就应该以贡献大小依次排列。
论文署名应征得本人同意。学术指导人根据实际情况既可以列为论文作者,也可以一般致谢。
行政领导人一般不署名。 (三)论文——引言 是论文引人入胜之言,很重要,要写好。
一段好的论文引言常能使读者明白你这份工作的发展历程和在这一研究方向中的位置。要写出论文立题依据、基础、背景、研究目的。
要复习必要的文献、写明问题的发展。文字要简练。
(四)论文——材料和方法 按规定如实写出实验对象、器材、动物和试剂及其规格,写出实验方法、指标、判断标准等,写出实验设计、分组、统计方法等。这些按杂志 对论文投稿规定办即可。
(五)论文——实验结果 应高度归纳,精心分析,合乎逻辑地铺述。应该去粗取精,去伪存真,但不能因不符合自己的意图而主观取舍,更不能弄虚作假。
只有在技术不熟练或仪器不稳定时期所得的数据、在技术故障或操作错误时所得的数据和不符合实验条件时所得的数据才能废弃不用。而且必须在发现问题当时就在原始记录上注明原因,不能在总结处理时因不合常态而任意剔除。
废弃这类数据时应将在同样条件下、同一时期的实验数据一并废弃,不能只废弃不合己意者。 实验结果的整理应紧扣主题,删繁就简,有些数据不一定适合于这一篇论文,可留作它用,不要硬行拼凑到一篇论文中。
论文行文应尽量采用专业术语。能用表的不要用图,可以不用图表的最好不要用图表,以免多占篇幅,增加排版困难。
文、表、图互不重复。实验中的偶然现象和意外变故等特殊情况应作必要的交代,不要随意丢弃。
(六)论文——讨论 是论文中比较重要,也是比较难写的一部分。应统观全局,抓住主要的有争议问题,从感性认识提高到理性认识进行论说。
要对实验结果作出分析、推理,而不要重复叙述实验结果。应着重对国内外相关文献中的结果与观点作出讨论,表明自己的观点,尤其不应回避相对立的观点。
论文的讨论中可以提出假设,提出本题的发展设想,但分寸应该恰当,不能写成“科幻”或“畅想”。 (七)论文——结语或结论 论文的结语应写出明确可靠的结果,写出确凿的结论。
论文的文字应简洁,可逐条写出。不要用“小结”之类含糊其辞的词。
(八)论文——参考义献 这是论文中很重要、也是存在问题较多的一部分。列出论文参考文献的目的是让读者了解论文研究命题的来龙去脉,便于查找,同时也是尊重前人劳动,对自己的工作有准确的定位。
因此这里既有技术问题,也有科学道德问题。 一篇论文中几乎自始至终都有需要引用参考文献之处。
如论文引言中应引上对本题最重要、最直接有关的文献;在方法中应引上所采用或借鉴的方法;在结果中有时要引上与文献对比的资料;在讨论中更应引上与 论文有关的各种支持的或有矛盾的结果或观点等。 一切粗心大意,不查文献;故意不引,自鸣创新;贬低别人,抬高自己;避重就轻,故作姿态的做法都是错误的。
而这种现象现在在很多论文中还是时有所见的,这应该看成是利研工作者的大忌。其中,不查文献、漏掉重要文献、故意不引别人文献或有意贬损别人工作等错误是比较明显、容易发现的。
有些做法则比较隐蔽,如将该引在引言中的,把它引到讨论中。这就将原本是你论文的基础或先导,放到和你论文平起平坐的位置。
又如 科研工作总是逐渐深人发展的,你的工作总是在前人工作基石出上发展起来做成的。正确的写法应是,某年某人对本题做出了什么结果,某年某人在这基础上又做出了什么结果,现在我在他们基础上完成了这一研究。
这是实事求是的态度,这样表述丝毫无损于你的贡献。有些论文作者却不这样表述,而是说,某年某人做过本题没有做成,某年某人又做。
2.学习编译原理有作用
在毕业多年后我又翻出了当年的编译原理书,然后又买了一本类似的书,真是太有用了。
无论是工作上还是业余中如果想编一点稍微有一些智能的程序,必然要用到。目前大家都在用的正则表达式是用编译原理做的,那只是一个很小的应用例子。
大一点的应用可以做到一定的技术先进性,从而让你在本行业站稳脚跟。
比如
可以用语法分析来分析出一段用户上传是否含有代码,从而让你的网站更健壮。
分析和分解用户输入的SQL语句,理解是否有害和是否有SQL注入。
在业务软件中结算方面允许用户输入条件表达式和四则运算,允许用户自定义结算公式或条件,使软件上一个档次。
甚至可以实现自己创造的编程语言,以后编程全用自语言来做,然后编译成老板要的那种语言。有的公司要JAVA,有的公司要C#,C++,VB等等你都不必每样都费心了。这样做还有一个好处,你的源程序其实是自语言,目标代码则是社会上公认的源程序,所以是可以公开的。如果以这种技术为核心技术开公司的话,则有着技术上更高一层的先进性,这种核心竞争力是很值钱的。
试想,你公司的员工只会用自语言,他们跳槽的机会就少了。而你公司的用户总是可以得到全套的他们认为的源程序,则市场机会就大了。别的一般软件公司可不敢给出全套源程序,总要多少保留一点的。
3.编译原理课程设计
%{/* FILENAME: C.Y */%}#define YYDEBUG_LEXER_TEXT (yylval) /* our lexer loads this up each time */#define YYDEBUG 1 /* get the pretty debugging code to compile*/#define YYSTYPE char * /* interface with flex: should be in header file *//* Define terminal tokens *//* keywords */%token AUTO DOUBLE INT STRUCT%token BREAK ELSE LONG SWITCH%token CASE ENUM REGISTER TYPEDEF%token CHAR EXTERN RETURN UNION%token CONST FLOAT SHORT UNSIGNED%token CONTINUE FOR SIGNED VOID%token DEFAULT GOTO SIZEOF VOLATILE%token DO IF STATIC WHILE/* ANSI Grammar suggestions */%token IDENTIFIER STRINGliteral%token FLOATINGconstant INTEGERconstant CHARACTERconstant%token OCTALconstant HEXconstant/* New Lexical element, whereas ANSI suggested non-terminal */%token TYPEDEFname /* Lexer will tell the difference between this and an identifier! An identifier that is CURRENTLY in scope as a typedef name is provided to the parser as a TYPEDEFname.*//* Multi-Character operators */%token ARROW /* -> */%token ICR DECR /* ++ -- */%token LS RS /* > */%token LE GE EQ NE /* = == != */%token ANDAND OROR /* && || */%token ELLIPSIS /* 。
*//* modifying assignment operators */%token MULTassign DIVassign MODassign /* *= /= %= */%token PLUSassign MINUSassign /* += -= */%token LSassign RSassign /* >= */%token ANDassign ERassign ORassign /* &= ^= |= */%start translation_unit%%/* CONSTANTS */constant: INTEGERconstant | FLOATINGconstant /* We are not including ENUMERATIONconstant here because we are treating it like a variable with a type of "enumeration constant". */ | OCTALconstant | HEXconstant | CHARACTERconstant ;string_literal_list: STRINGliteral | string_literal_list STRINGliteral ;/************************* EXPRESSIONS ********************************/primary_expression: IDENTIFIER /* We cannot use a typedef name as a variable */ | constant | string_literal_list | '(' comma_expression ')' ;postfix_expression: primary_expression | postfix_expression '[' comma_expression ']' | postfix_expression '(' ')' | postfix_expression '(' argument_expression_list ')' | postfix_expression {} '.' member_name | postfix_expression {} ARROW member_name | postfix_expression ICR | postfix_expression DECR ;member_name: IDENTIFIER | TYPEDEFname ;argument_expression_list: assignment_expression | argument_expression_list ',' assignment_expression ;unary_expression: postfix_expression | ICR unary_expression | DECR unary_expression | unary_operator cast_expression | SIZEOF unary_expression | SIZEOF '(' type_name ')' ;unary_operator: '&' | '*' | '+' | '-' | '~' | '!' ;cast_expression: unary_expression | '(' type_name ')' cast_expression ;multiplicative_expression: cast_expression | multiplicative_expression '*' cast_expression | multiplicative_expression '/' cast_expression | multiplicative_expression '%' cast_expression ;additive_expression: multiplicative_expression | additive_expression '+' multiplicative_expression | additive_expression '-' multiplicative_expression ;shift_expression: additive_expression | shift_expression LS additive_expression | shift_expression RS additive_expression ;relational_expression: shift_expression | relational_expression '' shift_expression | relational_expression LE shift_expression | relational_expression GE shift_expression ;equality_expression: relational_expression | equality_expression EQ relational_expression | equality_expression NE relational_expression ;AND_expression: equality_expression | AND_expression '&' equality_expression ;exclusive_OR_expression: AND_expression | exclusive_OR_expression '^' AND_expression ;inclusive_OR_expression: exclusive_OR_expression | inclusive_OR_expression '|' exclusive_OR_expression ;logical_AND_expression: inclusive_OR_expression | logical_AND_expression ANDAND inclusive_OR_expression ;logical_OR_expression: logical_AND_expression | logical_OR_expression OROR logical_AND_expression ;conditional_expression: logical_OR_expression | logical_OR_expression '?' comma_expression ':' conditional_expression ;assignment_expression: conditional_expression | unary_expression assignment_operator assignment_expression ;assignment_operator: '=' | MULTassign | DIVassign | MODassign | PLUSassign | MINUSassign | LSassign | RSassign | ANDassign | ERassign | ORassign ;comma_expression: assignment_expression | comma_expression ',' assignment_expression ;constant_expression: conditional_expression ; /* The following was 。
4.为什么要学习编译原理
大学课程为什么要开设编译原理呢?这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。
编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。
在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。
就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。 推荐参考书 虽然编译理论发展到今天,已经有了比较成熟的部分,但是作为一个大学生来说,要自己写出一个像TurbocC,Java那样的编译器来说还是太难了。
不仅写编译器困难,学习编译原理这门课程也比较困难。 第一本书的原名叫《CompilersPrinciples,Techniques,andTools》,另外一个响亮的名字就是龙书。
原因是这本书的封面上有条红色的龙,也因为獗臼樵诒嘁朐?砘?嘴域确实?忻?所以很多国外的学者都直接取名为龙书。最近机械工业出版社已经出版了此书的中文版,名字就叫《编译原理》。
该书出的比较早,大概是在85或86年编写完成的,作者之一还是著名的贝尔实验室的科学家。里面讲解的核心编译原理至今都没有变过,所以一直到今天,它的价值都非凡。
这本书最大的特点就是一开始就通过一个实际的小例子,把编译原理的大致内容罗列出来,让很多编译原理的初学者很快心里有了个底,也知道为什么会有这些理论,怎么运用这些理论。而这一点是我感觉国内的教材缺乏的东西,所以国内的教材都不是写给愿意自学的读者,总之让人看了半天,却不知道里面的东西有什么用。
第二本书的原名叫《ModernCompilerDesign》,中文名字叫做《现代编译程序设计》。该书由人民邮电出版社所出。
此书比较关注的是编译原理的实践,书中给出了不少的实际程序代码,还有很多实际的编译技术问题等等。此书另外一个特点就是其现代而字。
在传统的编译原理教材中,你是不可能看到如同Java中的垃圾回收等算法的。因为Java这样的解释执行语言是在近几年才流行起来的东西。
如果你想深入学习编译原理的理论知识,那么你肯定得看前面那本龙书,如果你想自己动手做一个先进的编译器,那么你得看这本《现代编译程序设计》。 第三本书就是很多国内的编译原理学者都推荐的那本《编译原理及实践》。
或许是这本书引入国内比较早吧,我记得我是在高中就买了这本书,不过也是在前段时间才把整本书看完。此书作为入门教程也的确是个不错的选择。
书中给出的编译原理讲解也相当细致,虽然不如前面的龙书那么深入,但是很多地方都是点到为止,作为大学本科教学已经是十分深入了。该书的特点就是注重实践,不过感觉还不如前面那本《现代编译程序设计》的实践味道更重。
此书的重点还是在原理上的实践,而非前面那本那样的技术实践。《编译原理及实践》在讲解编译原理的各个部分的同时,也在逐步实践一个现代的编译器TinyC.等你把整本书看完,差不多自己也可以写一个TinyC了。
作者还对Lex和Yacc这两个常用的编译相关的工具进行了很详细的说明,这一点也是很难在国内的教材中看到的。 推荐了这三本教材,都有英文版和中文版的。
很多英文好的同学只喜欢看原版的书,不我的感觉是这三本书的翻译都很不错,没有必要特别去买英文版的。理解理论的实质比理解表面的文字更为重要。
编译原理的实质 几乎每本编译原理的教材都是分成词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化这些部分。其实现在很多编译原理的教材都是按照85,86出版的那本龙书来安排教学内容的,所以那本龙书的内容格式几乎成了现在编译原理教材的定式,包括国内的教材也是如此。
一般来说,大学里面的本科教学是不可能把上面的所有部分都认真讲完的,而是比较偏重于前面几个部分。像代码优化那部分东西,就像个无底洞一样,如果要认真讲,就是单独开一个学期的课也不可能讲得清楚。
所以,一般对于本科生,对词法分析和语法分析掌握要求就相对要高一点了。 词法分析相对来说比较简单。
可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。
这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。 语法分析部分就比较麻烦一点了。
现在一般有两种语法分析算法,LL自顶向下算法和LR自底向上算法。LL算法还好说,到了LR算法的时候,困难就来了。
很多自学编。
5.软件相关专业的大学生,毕业设计怎么写
一、计算机软件开发类的毕业设计,均要进行软件测试及现场运行,并由各专业答辩委员会组织验收。
2
二、承担软件开发类毕业设计的学生应向学院答辩委员会提出验收申请。
3
三、验收方法
1、验收人员:由各专业答辩委员会聘请校内或学院内熟悉计算机软件技术的人员组成若干个软件验收组,负责本学院的软件验收。每个验收组由名具有中级及以上职称的教师组成,设组长1人,组员中一般应包含1名所验收软件学生的指导教师。
2、验收方式:由学生向验收组提交论文中所涉及的计算机软件部分,包括源程序、执行程序和使用说明,将源程序编译成执行程序后并运行,在程序真实、运行结果正确和程序文本资料完整的情况下,当场将源程序和执行程序拷贝到存储介质(如软盘、光盘等)上,连同程序文本资料一起交验收组,即可通过验收。软件验收未通过者,不能参加毕业设计(论文)答辩。
验收组的工作应实事求是,认真负责。验收结束后,由验收组填写软件验收报告,并将验收报告与全部验收材料(包括存储介质、资料等)一并交学生所在学院。
3、验收时间:验收工作应安排在毕业设计(论文)工作完成后,答辩之前。各专业答辩委员会在进行答辩资格审查时,应将是否已通过验收作为审查的一项重要内容。