是不是只要设定语法和对应的编译器就可以创造属于自己的语言,我在学c语言突然想问问我的想法对不对

作者&投稿:荀琪 (若有异议请与网页底部的电邮联系)
C语言的编译器为什么有许多不同的版本?并且在不同的编译器版本下C语言的语法规则也不尽相同?~

C的标准本来就有多个版本,目前编译器采用的标准比较常见的是ANSI C和C99。另外语言标准中也存在未定义行为,留给编译器实现自己去定义。各种编译器对标准的实现也未必完全遵守(C还好,C++这种特别复杂的语言就很难做到完全遵守标准了),而且往往还增加一些自己的扩展,预定义宏之类的。这些都给跨编译器编码带来麻烦。不过总体而言C是个比较单纯的语言,除非程序员故意,一般搞不出太多给编译器出难题的花样。

如满意,请记得采纳

编译器:VC++6.0下载地址

http://hi.baidu.com/%D3%A5%DE%C4/blog/item/019bcafef22b99c2b58f314c.html

C语言视频教程下载地址

http://hi.baidu.com/%D3%A5%DE%C4/blog/item/2db804fefdf7ce02a9d3114e.html

《C程序设计》+《上机试题》(第三版)谭浩强主编

http://hi.baidu.com/%D3%A5%DE%C4/blog/item/1b8c968f649f4e639e2fb49c.html

C语言需要编译器编译成汇编码,你要自创语言,就要自己写编译器,其实原理也挺简单,无非就是正则匹配,匹配到指定语句,然后解释该字符串,生成对应汇编码,不过一个完善的语法就比较麻烦,牵扯到文件导入,文件连接等等非常复杂。。。。一个简单的变异比如匹配到 c=a+b,无非就是&a处的数据导入CUP的A寄存器(指令是mov),&b处的数据导入CPU的D寄存器,然后执行加法指令add eax,edx,然后 再把答案(在eax中)送到&c的位置。。。。
高级语言都是先编译成汇编,然后汇编编译机器码,汇编变机器码这一部你就不用管了,用个正确的汇编编译器即可,你要发明自己的语言是实现你的语法到汇编的解释过程。。。。

既然是你自己的语言,又怎么会有现成的“对应的编译器”来让你设置呢?每个编译器都是针对专门的语言的,如果是你自己创造的语言,是没有现成的编译器的,这需要你自己去开发一个可以识别你的语法格式,并把它翻译为汇编代码或机器码的小程序,这个小程序就是针对你的语言的编译器。
要创造一门语言,除了指定自己的语法格式之外,最最重要的就是要开发出能识别这种语法格式并将其向汇编或机器码转换的程序,即编译器。所以要创造语言不是那么容易的事,难就难在编译器的开发。

你学过编译原理么?词法、语法、语义、符号表、量表、中间码和目标码、解释程序都要有吧--

是的,使用boost::spirit 这样的工具就可以把创造语言变成设定语法而已,不过如果前人没有造出这样的工具,要考虑的可就没这么简单了


是不是只要设定语法和对应的编译器就可以创造属于自己的语言,我在学...
C语言需要编译器编译成汇编码,你要自创语言,就要自己写编译器,其实原理也挺简单,无非就是正则匹配,匹配到指定语句,然后解释该字符串,生成对应汇编码,不过一个完善的语法就比较麻烦,牵扯到文件导入,文件连接等等非常复杂。。。一个简单的变异比如匹配到 c=a+b,无非就是&a处的数据导入CUP的A寄...

什么是大数据?
即便缺乏精准的算法,只要拥有足够多的数据,也能得到接近事实的结论。数据因此而被誉为新的生产力。第二、当数据足够多的时候,不需要了解具体的因果关系就能够得出结论。例如,Google 在帮助用户翻译时,并不是设定各种语法和翻译规则。而是利用Google数据库中收集的所有用户的用词习惯进行比较推荐。Google...

求助自学考试英语二的学习方法,不惜倾家荡产哈
第一、汉译英的内容主要考书本上的内容,而且多数是带有重要短语的句子,只要在课文学习过程中将这类句子加以重视,应该不成问题。第二、汉译英的句子可以用考生自己的话说,只要结构正确,同样可以得满分。不一定非要按课本原文翻译。第三、对于考试来说,翻译评分的重点在于结构。只要结构正确,尤其是重要短语和语法点正...

作为管理者,你具备哪些能力?
1、要具备发现方法的能力,首先要把“做不到”、“很难办”等语言作为自己的禁语。 2、认为“做不到”,是自己陷入了省略语法成分的魔咒中。要是“用现有的方法做不到”,就放弃旧有的规则、习惯和方法,找出“和现有方法不同的方法”。 3、要是“马上开始做不到”,就要将成果大小撇在一边,在现在力所能及的...

Me neither为什么不是I neither呢
英语只是一门语言, 是人类在经年累月的交流过程中所形成的习惯,是先有语言再有语法,而不是先设定语法再形成语言, 不是像自然科学那样凡事都必须有因果所以,就如一个初学说话的婴儿,别人怎么说,他就怎么说,自然就会说对了。Me neither, 这是习惯上用法, 真的要研究因果,也许是可以研究出来...

工作中你会很较真吗?你觉得什么事有必要较真?
首先,我们需要明确什么是较真。较真并不是一种过分追求完美的态度,而是在工作过程中对自己的要求严格,对待工作认真负责。在工作中,我们应该对那些可能影响到工作质量和效率的事情进行较真。例如,对于客户的投诉、产品的质量、团队的沟通等方面,我们都应该认真对待,力求做到最好。1. 客户投诉 在商业...

晚安心语2023正能量语句
39、 不懂的事就去问,问完了就懂了。英语不好尽管去说,不必在乎语法、发音,别人连猜带蒙明白就好了,时间久了自己水平就上去了。人活着脸皮就要厚点,这也不好意思,那也不好意思,那你怎么好意思活着呢?出错了出丑了一笑而过,有什么好怕的?当你对这个世界好意思的时候,成长才会与日俱增。晚安!40、 别给同...

初学电脑编程需要什么
初学电脑编程需要学习英语,选择一门编程语言,要有数学基础,具体介绍如下:1、英语基础 计算机英语与传统的英语知识不同,需要了解的大部分是计算机的专业单词或者词汇,普遍较为简单。但是在高级编程中,会出现比较生涩的词汇,对于想要参与计算机语言设计以及在职业发展上有更多追求的同学可以自学一下大学...

一个月内如何备考,才能顺利通过四六级考试?
如何在一个月内备考四级和六级考试 一、利用零碎时间多背单词 利用零碎时间多背单词-思维导图 1)四级考试和六级考试对词汇量的要求 英语四级考试和六级考试的目的是对大学生的实际英语能力进行客观、准确的测量,为大学英语教学提供测评服务。 不同等级英语考试的词汇量要求表 按照相关考纲要求,英语四级考试要求4200的...

大学生如何备考英语四六级?
英语辩论等活动,提高英语表达和应对能力。备考英语是一项长期而艰辛的任务,需要大学生付出持久的努力。但只要秉承正确的学习方法和态度,时刻保持学习的热情和毅力,相信大学生一定能够取得优异的成绩,提高自己的英语能力。希望上述建议能对大学生备考英语有所帮助,祝愿大家都能取得好成绩!

岱岳区15072494239: 请问编程语法规则,是不是根据不同编译器来定的? -
慈盾弗瑞: 1、int char 不是编译器的语法和规则,而是编程语言的数据类型规则,写程序时用某种语言就要遵循它的语法规则才行.zhengshu是汉化的,几乎所有编程语言都是外国人用英语编写的.2、文本里编写的是人类所能理解的编程语言,用编译器...

岱岳区15072494239: 编程代码转换成二进制是不是计算机设定好了语法,在计算机内完成的? -
慈盾弗瑞: 由高级语言转换成机器语言是通过编译器自动进行的.只要写好代码后点一下编译,就可以了.

岱岳区15072494239: 编程各语言之间的关系以及OD的原理. -
慈盾弗瑞: 因为exe文件是统一标准的,编程语言不一样没关系,只要所有的编译器将源代码按exe格式进行编译,那么能保证不同编程语言生成的文件都能运行. 比如,世界上有很多种语言,有中文 日文 韩文等,编译器就像一个翻译一样,不同的语言有不同的翻译,所有翻译都按英文的语法标准翻译,就可以将不同的语言翻译成英文,这样都知道这些语言说的啥了. 为什么OD都可以反汇编?因为所有生成的exe文件(除了中间语言如c# java)最终都是二进制的文件,并且可以用汇编语言来表示.虽然源代码各有不同,但是最终的汇编是一样的,而OD就是将二进制的代码给翻译成汇编.

岱岳区15072494239: 设计一门编程语言,其实就是制作一个编译器吗 -
慈盾弗瑞: 不是编译器,而是语言的规范和运作模式——你只需要纸上谈兵地说出这个语言应该是什么样的就行了,当然,最终肯定需要一个编译器.但是比如 C 语言,就没有什么标准的编译器,它只有一组国际标准而已.

岱岳区15072494239: 只写try 不写catch 可以吗 -
慈盾弗瑞: 你要从两点上去理解1、编译器定下的规矩(语法) 编译器定下的规矩,就是try后必须要有catch或finally,不能只出现一个try,而没有catch或者finally.你不这么做,编译器就不把你的.java文件转化为.class文件.2、设计java语言的意图(语义) try的意思是,接下来的代码可能会抛出异常,既然你已经表明你的意图了,那你不是该为你的意图做一些工作?有异常,你是不是该处理?怎么处理?用catch和finally.如果你不写catch和finally,那意思就是: 我知道这代码可能有异常,但是我就不处理,这不是流氓嘛,不符合逻辑.

岱岳区15072494239: 不同语言的程序编译之后一样吗 -
慈盾弗瑞: 肯定不是一模一样的 但是运行的结果是一样的 只要你的高级语言的算法和实现细节是一样的 能反编译,但只能到汇编语言,不可能到高级语言 因为机器码和汇编是一一对应的 但是,不同的高级语言有可能对应相同的低级语言 所以不能翻译成高级语言 所谓的0 和 1 其实是有电流,无电流的意思 因为电子计算机实际上是一个复杂的电路

岱岳区15072494239: 是不是每个硬件都对应一个不同的汇编语言 -
慈盾弗瑞: 你把这两个概念搞混淆了.汇编语言是一种比机器语言高级的底层语言,他是面向机器的,通常是为特定的计算机或系列计算机专门设计的.因此,不同的处理器有不同的汇编语言语法和编译器,编译的程序无法在不同的处理器上执行,缺乏可移植性.并不是说每个硬件对应着不用的汇编.而是不同的处理器架构对应不同的汇编指令集.不过换汤不换药,只要你掌握了最基础的,别的也是大同小异的.希望能帮到你~~

岱岳区15072494239: C++编译以后是二进制代码?二进制代码的程序不是在任何系统下都能运行的? -
慈盾弗瑞: 取决于编译器.一般来讲每个操作系统都有各自对应的C++编译器.举个例子,若想在LINUX上运行开发的程序,则需要使用支持Linux平台的编译器.可以这么理解,语言只是一组规范,而编译器是将这些规范解释到对应的操作系统的机器指令.另一种语言JAVA,与之相反,是跨平台的.理论上使用一个编译器生成的可执行文件,可以运行在任意一个操作系统上.这是JAVA语言与C++等语言重大不同之一.当然,跨平台的前提是,各个操作系统都有对应的JAVA虚拟机.即,Java程序是基于JAVA虚拟机运行的,而不是直接与系统交互.

岱岳区15072494239: 软件开发的语言编程是否受操作系统的影响? -
慈盾弗瑞: 不受操作系统的印象!代码是不会改变的要不让怎么会有跨平台嗯!可是关键点代码还是要改变的如调用系统接口每个操作系统不同哟!为什么会跨平台因为在每个系统中都有其编译器代码可以不变的!在其操作系统中只要有其编译器就行啊!

岱岳区15072494239: jdk中的编译器是什么,解释器是什么 -
慈盾弗瑞: Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器.这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网