简述啥是源语言,目标语言,中间语言
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简述啥是源语言,目标语言,中间语言相关的知识,希望对你有一定的参考价值。
1、源语言:源语言是可以引导出另一种语言的语言。
2、目标语言:目标语言,是一种利用特定语言输入目标语言的方法。
3、中间语言:是一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。
拓展资料
一、中间语言
中间语言与具体机器特性无关,一种中间语言可以为生成多种不同型号的目标机的目标代码服务。可对中间语言进行与机器无关的优化,有利于提高目标代码的质量。把源程序映射成中间代码表示,再映射成目标代码的工作分在几个阶段进行,使编译算法更加清晰。
二、目标语言
翻译程序的输出称目标程序。一般说,目标程序都是机器语言程序,输出的语言就称为目标语言。
目标语言是由源码编译或汇编所得的语言。它是自动编码程序输出的一种语言。在将信息从一种语言转换成另一种语言时,原来的语言被称为源语言,而输出的语言则被称为目标语言。通常,目标语言与机器语言可以是相同的,但当编码程序是由一系列步骤才能完成时,则目标语言中的一个步骤可以是下一步的源语言。
(资料来源:中间语言——百度百科)
源语言是可以引导出另一种语言的语言。在最初编写计算机程序时所使用的语言,就是源语言。源语言一般指的是编写源程序所用的语言,它必须翻译成机器语言才能在计算机中使用。
目标语言,是一种利用特定语言输入目标语言的方法。
中间语言(中间代码)是一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。其可理解性及易于生成目标代码的程度介于源语言和目标语言之间。
拓展资料:
无论是符号语言还是高级语言,都需要一种翻译程序把它翻译成机器语言。翻译符号语言的程序称为符号汇编程序或汇编程序。对于汇编程序来说,输入是符号语言程序,输出是机器语言程序。翻译工作此较简单,其主要的工作是代真,即把符号代换成机器码。
翻译高级语言的程序称为编译程序。对编译程序来说,输入是高级语言程序,输出是机器语言程序。对高级语言来说,它与机器语言不是一一对应的。编译程序所产生的机器语言与高级语言是多一对应的,即每一条高级语言的语句,等价于多条机器指命。
无论对于汇编程序还是编译程序,都有一个输入程序和一个输出程序。这个输入程序就称为源程序,做为输入的语言就称为源语言。对于汇编程序来说,源程序是符号语言程序;对于编译程序来说,源程序是高级语言程序。
源语言是一种可以导致另一种语言的语言。最初编写计算机程序时使用的语言是源语言。
源语言通常指用于编写源程序的语言。它必须先翻译成机器语言,然后才能在计算机中使用。
目标语言是使用特定语言输入目标语言的方法。
中间语言(中间代码)是源程序的等效内部表示代码,面向语法,易于翻译成目标程序。它的可懂度和生成目标代码的容易程度介于源语言和目标语言之间。
拓展资料:
无论是符号语言还是高级语言,它都需要一个翻译程序来将其翻译成机器语言。翻译符号语言的程序称为符号汇编程序或汇编程序。对于汇编程序来说,输入是符号语言程序,输出是机器语言程序。翻译工作相对简单。它的主要任务是用机器代码替换符号。翻译高级语言的程序称为编译器。
对于编译器来说,输入是高级语言程序,输出是机器语言程序。对于高级语言,它并不一一对应于机器语言。编译器生成的机器语言是高级语言的又一个对应,也就是说,每个高级语言的语句相当于多个机器指令。
汇编程序和编译器都有一个输入程序和一个输出程序。这个输入程序称为源程序,用作输入的语言称为源程序。对于汇编程序来说,源程序是符号语言程序。对于编译器来说,源程序是高级语言程序。
参考技术C 源语言是外语翻译专业术语,和目标语相对。 源语言(可以引导出另一种语言的语言。在最初编写计算机程序时所使用的语言,就是源语言。源语言一般指的是,编写源程序所用的语言,它必须翻译成机器语言*才能在计算机中使用。)目标语言:目标语 中间语言:独立于任何特定自然语言的中介表达式,能够统摄机器翻译所需的句法和语义信息,在机器翻译系统中表示源语和目标语之间的联系。 参考技术D 源语言,指可以引导出另一种语言的语言。在最初编写计算机程序时所使用的语言就是源语言。目标语言,指在计算机中使用的机器语言。
中间语言:指独立于任何特定自然语言的中介表达式,能够统摄机器翻译所需的句法和语义信息,在机器翻译系统中表示源语言和目标语言之间的联系。
简述ES5 ES6
很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗?
我一脸懵逼的反问,那个啥,啥是ES5、ES6啊。
不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,我们知道javascript的三个基本组成部分是ECMAJavascript(European Computer Manufacturers Association javascript,也就是前面说的ES,但之前你问我ES5orES6我就真懵逼了),BOM,DOM,es可以看出是javascript的前身,是javascript的内核定义用法,而所有前端框架、ui库都是基于javascript的,也就是用原生js写的,ES的重要性不言而喻,如果你习惯用轮子,比如各种jqueryui,平时也很少用js写东西,对这个就不很很了解,如果你是大牛,经常造轮子写东西,github上start一片,博客上粉丝众多,就必然对这要有很深的研究,不然写的东西没有深度的。
ES5和ES6从字面上理解是一个升级的过程,出了一代新标准,发展迅速的it行业,去了解和适应一种新标准用法很有必要,这也是我为什么选择写这个主题;想要了解一些原始的定义和由来,我则建议你阅读一些相关的资料,解释了EScript的前世今生,给大家科普一段:
Ecma标准建立在一些原本的技术上,最为著名的是JavaScript(网景)和JScript (微软)。语言由网景的Brendan Eich发明而第一次出现在这个公司的Navigator 2.0浏览器上。它出现在所有Netscape后来的浏览器以及微软从Internet Explorer 3.0之后的所有浏览器上。 这一标准的编制自1996年十一月开始。这一Ecma标准的第一个版本被1997年六月的Ecma General Assembly采纳。 上述Ecma标准被以快速跟进流程提交至ISO/IEC JTC 1,并作为于1998年四月作为ISO/IEC 16262通过。1998年六月Ecma General Assembly通过了ECMA-262第二版以保持它与ISO/IEC 16262的完全一致性。第一版到第二版的变更仅仅是编辑性质的。 第三版标准引入了强大的正则表达式,更佳的字符串处理,新的控制语句,try/catch异常处理,更严密地错误定义,格式化的数字输出以及一些为国际化和未来语言成长预留的小变更。ECMAScript标准的第三版1999年十二月的Ecma General Assembly采纳并于2002年六月作为ISO/IEC 16262:2002发布。 自第三版发布以来,ECMAScript因其与万维网的关联而获得了广泛采用,它已经成为所有web浏览器实质上都提供的一种编程语言。为了编制第四版ECMAScript,有很多有意义的工作。尽管这工作没能完成而且也没有作为ECMAScript的第四版发布,它促进了语言的进化。ECMAScript第五版(发布为ECMA-262 5th edition)纸面化了很多事实上已经在浏览器形成共识的语言规范解析并且增加了对自第三版发布以来的新功能的支持。这些功能包括访问器属性,反射创建以及对象检测,属性特性的程序控制,新增的数组操作函数,JSON对象编码格式,以及提供了改进的错误检查以及程序安全性的严格模式。 这一ECMAScript 5.1版本标准完全与国际标准ISO/IEC 16262:2011的第三版本一致。 ECMAScript是一个充满活力的语言,而且语言的演进尚未完成。有意义的技术性增强将会在未来版本的规范中持续进行。 这一Ecma规范由2011年六月Ecma General Assembly采纳 --ES5
需要注意的是,EScript之前的更新迭代版本叫法都是按照ESx来的,而ES6的叫法实际上是延续了这个习惯,截止发布日期,JavaScript的官方名称是ECMAScript 2015,Ecma国际意在更频繁地发布包含小规模增量更新的新版本,下一版本将于2016年发布,命名为ECMAScript 2016。以后的更新中,新版本将按照ECMAScript+年份的形式发布,ecmascript2015官方说明。近年来更新的频率越来越高,也反映了这一语言的发展迅速,功能越来越强,作为和这些紧密相关的码农大神们也要持续的学习跟进啊。
ES6在2015年发布,相对于上一版本,加入了很多新特性,ES5无从说起(不知道从哪说起,就是平时码的javascript吧),所以就说下ES6的新特性吧,ES6的新特性有:let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments;
相关的详细说明大家可以翻阅官网说明,下面我也会举一些小例子帮助理解;
let,const
用法和var类似,定义变量,不同的是let为javascript增加了块级作用域,声明只在所在代码块有效,不影响作用域外的同名变量;你可以尝试码下
let name="x"; if(true){ let name="y"; alert(name); } alert(name);
你会发现网页会依次打印y和x,如果是var声明,name会被重新赋值;const也是声明,不同的是const声明后的值不可更改,也即readonly,这个用的地方很少吧,为避免冲突的场景可以使用,以免报错;
class,extends,super
在ES6之前,原型、构造函数、继承对于大多说人来说是个麻烦点(一直到现在,我还经常去翻工具书...),而ES6中的class,extends,super很大程度上改观了这个问题,比如之前关于构造函数、继承可能这样写:
function Person(name,job){ this.name="personA"; this.job="work"; this.dowhat=function(this.job){ alert(this.name+" should "+this.job) } } var person=new Person("personB","player");
es相对于编程语言是弱类型,一个var可以声明一切,然后在声明的对象中通过原型继承来衍生其他方法,作为习惯强类型语言的我常常在理解上出错,而结合class,extends,super的es6原型写法更清晰、更偏向面向对象的写法:
class Person{ constructor(){ this.name="Person" } dowhat(todo){ alert(this.name+" Should "+todo); } } let person=new Person(); person.dowhat("work"); class Boy extends Person{ constructor(){ super(); this.name="Boy" } } let boy=new Boy(); boy.dowhat("go to school");
(ps:博客园为毛不提供在线测试的功能,一点击就运行测试,就不用复制了,还是我没发现这个功能?)
面向对象的思想有木有!有木有!有木有!通过class类定义创造一个“类”,并且有构造函数constructor,而this对象代表实例对象,构造函数定义自身的方法和属性,构造函数外的方法和属性通过继承可以共享,class之间通过extends实现继承,Boy通过extends继承了Person定义的方法和属性,比ES5好理解的多,而super这里代指父级的示例(this),子类必须在构造函数中调用super,否则在新建实例的时候会报错,ES6的继承机制,实质是先创造父类的实例对象this,通过super的调用,实现子类的继承和修改。
Arrow Function
字面理解就是箭头功能,什么鬼;一种用箭头“=>”来定义函数的新语法,简单示范:
var sum = (num1, num2) => num1 + num2; //等同于 function sum(num1,num2){ return num1+num2 }
它的功能不止于写法简便,与传统的js写法主要区别是,对 this 的关联,函数内置 this 的值,取决于箭头函数在哪儿定义,而非箭头函数执行的上下文环境。
template string
字面理解也即是模板字符串了,实际它的作用也是在插入比较多的html模板内容时候使用的,比如传统的拼接是这样的:
$(".class p").append( "There are <b>" + count + "</b> " + "items in your basket, " + "<em>" + onSale + "</em> are on sale!" );
使用template string 是这样的:
$("#result").append(` There are <b>${count}</b> items in your basket, <em>${onSale}</em> are on sale! `);
用反引号(`)
来标识起始,用${}
来引用变量,并且会保留引用中的空格和缩进,比拼接方便多了。
destruturing
//直接上码 var boy="lilei"; var girl="hanmeimei"; var human={boy:boy,girl:girl}; console.log(human) //Object {boy: "lilei", girl: "hanmeimei"} //destructuring var boy="lilei"; var girl="hanmeimei"; var human={boy,girl}; console.log(human) //Object {boy: "lilei", girl: "hanmeimei"}
也即是,ES6中允许按照一定的模式,从数组和对象中取值和赋值,就就是destruturing。
default
ES6中允许为函数设置默认值,这个很好理解:
function log(x, y = ‘world‘) { console.log(x, y); } log(‘Hello‘); // Hello world log(‘Hello‘, ‘China‘); // Hello China log(‘Hello‘, ‘‘); // Hello
rest
休息?这个理解也比较容易,上来就懂:
function person(...types){ console.log(types) } animals(‘lilei‘, ‘hanmeimei‘, ‘lili‘) //[‘lilei‘, ‘hanmeimei‘, ‘lili‘]
先写到这里吧,可能有理解上的误区,欢迎小伙伴们指正,以后再来慢慢补全修正。
中秋节到了,祝大家中秋节快乐,马上来的国庆节快乐!
以上是关于简述啥是源语言,目标语言,中间语言的主要内容,如果未能解决你的问题,请参考以下文章