请问编程语法规则,是不是根据不同编译器来定的?

比如我们写int char这些是不是就是编译器的语法和规则什么的,规则规定int就是整数 char就是字符等等,我们必须按照这个标准去写?如果我要是写个zhengshu a=0代表整数型 是不是编译器就不认识了吧?

我们写代码时候都是在文本里写的,那如果在文本里写int a=0 ,此时此刻这里的0在文本里还代表的不是数值0本身?但是等到编译器翻译转换的时候会把字符0转成数值0的?这些都是人为规定的,在设计编译器的时候提前设定好的标准?

不同的语法就有不同的编译器,进行不同语法的分析?
那是不是所有编译器都把源代码编译成汇编的语法规则代码,然后在通过汇编编译器把编译成汇编的代码在编译成机器码?

就好比c语言编译器把C语言源代码先编译成汇编规则的代码,然后汇编编译器在把汇编规则的代码编译成机器码?

不,一个语言的语法是早就确定好的,它有一个统一标准——例如 ANSI C。
不同编译器可能有些许不同,比如有的编译器a=b=c结果很可能不一样(所以我们很少这么用
但是大体上,一个语言的编译器得出的结果是一样的,是根据语法规则做出编译器而非编译器确定语法规则。
zhengshu a=0,编译器肯定不认,理由是没有这个type;但是你可以通过typedef自定义任意的类型。

int是一种type,而type varlist;是声明变量的语法(int a; char b;)

你写了int a=0;那么这时编译器做的就是在内存中开出一个能存int数据的空间,然后把0给填进去,再记录下这块内存的地址,并记住这个地址叫做a。至于分析代码什么的,就是编译器的事情了。

——以上。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-15
1、int char 不是编译器的语法和规则,而是编程语言的数据类型规则,写程序时用某种语言就要遵循它的语法规则才行。zhengshu是汉化的,几乎所有编程语言都是外国人用英语编写的。
2、文本里编写的是人类所能理解的编程语言,用编译器转换后是计算机能识别的机器语言,代表的意思是一样的,表示方法不一样,人看得是数字0,机器看得是ASCII(阿斯科码,凑合翻译一下了),这种差别是所有编译器都一样的吧,不管什么语言写的程序,最后都要其对应的通过编译器变成机器语言来让电脑识别。
3、一般是这样的,不过也有一个语言可以用多种编译器,像java可以用eclipse和extraeditor-32等,因为Java语言是跨平台的,而android语言也可以用eclipse来编译。
编译器分析的是一种语言的语法,是按语言分类的。追问

int char 不是编译器的语法和规则,而是编程语言的数据类型规则

明白了,int char是说是编程语言里的数据类型语法规则,跟编译器没关系,编译器只负按数据类型规则翻译是吧?

追答

嗯,是的,就像汉语的名词、动词、句子似的,这是语言的定义,数值的是int,单字符是char。
编译器只是根据语言的规则来执行。

本回答被提问者采纳
第2个回答  2013-04-15
不知道你现在学到哪了,语法是一个语言规定的,不是编译器规定的。编译器会识别不同的字符,还有标识符等等,区别对待,+是操作符,int是数据类型这是一种标识符,编译器会识别。但是不同的编译器支持的语法规则也是不一样的,比如vc6.0和vs就不太一样,还有标准编译器gcc等等,他们都是不一样的,但是总的来说还是遵循c的语法的
比如long long数据类型就不可以在vc里面用,必须用_int64。
但是确实有这个数据类型,在某些编译器里面支持,具体的我也忘记了
第3个回答  2013-04-15
答:我认为必须按照标准去写,每一种语言都有自己的规则,编译器就像是这个规则的制定者和审查者一样。比如你不能用一个java程序交给c编译器编译,或是用java书写方式来写c语言,这样c编译器不识别。这就好像你汉语对一个只会说英语的人说话一样。当然在规则之下有一定的灵活性,比如你说的“zhengshu a=0;”这个在C下面是可以实现的:
typedef int zhengshu;
或是
#define zhengshu int

都可以实现的。
第4个回答  2013-04-15
理论基础是《编译原理》,代码被解析为机器指令是通过编译器生成的。
编译器要通过语义分析、词法分析、语法分析等,然后最后生成机器指令,而代码在这里对编译器这个程序来说,只是一串文本,通过编译器这个程序解析文本,最后生成可执行的程序指令。

是先定义好语法规则,然后才来实现编译器,而不是编译器来定语法规则。追问

那int char 等等是不是语法规则?
我要写个zhengshu a=0编译器是不是不认识?

追答

关键字是语法规则的一部分。
你写的zhengshu,编译器是无法识别的,因为语法规则中没有定义,编译器无法识别它是关键字,只会将它按普通的字符串处理。
但如果你用c的宏#define zhengshu int或者typedef int zhengshu;,再使用zhengshu,因为按
c的语法规则,#define定义的是别名,编译器会自动将zhengshu替换为int。

相似回答