编译器中的“语法”和“语法”有啥区别?

Posted

技术标签:

【中文标题】编译器中的“语法”和“语法”有啥区别?【英文标题】:What is the difference between "syntax" and "grammar" in compiler?编译器中的“语法”和“语法”有什么区别? 【发布时间】:2015-12-09 19:05:51 【问题描述】:

我已经看过语法和语义区别的解释了,比如这个What is the difference between syntax and semantics? 但是当我们讨论编译器时,“语法”和“语法”有什么区别吗?

【问题讨论】:

不,它们是同一事物的两个词。 【参考方案1】:

语法是一系列产生一种语言的有效“词”的产生式。这是一种指定语言语法的方法。指定语法的另一种方法是使用简单的英语,但如果您希望它足够精确以用作规范,那么对于非平凡的语言来说最终会非常冗长。

例如,考虑以下文本:

程序是一系列零个或多个语句。

语句要么是关键字“var”,后跟一个标识符,然后是一个分号;标识符后跟“++”或“--”,后跟分号;或关键字“while”,后跟一个标识符,然后是关键字“do”,然后是零个或多个语句,然后是关键字“end”。

这描述了一种非常简单的编程语言的语法,但它不是语法。这是描述相同语言的语法:

program   ::= statement*
statement ::= "var" ID ";"
            | ID "++" ";"
            | ID "--" ";"
            | "while" ID "do" statement* "end"

【讨论】:

以上是关于编译器中的“语法”和“语法”有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

实现编译器和解释器有啥区别?

android.mk makefile 有啥区别

前端开发,LESS中的混合和继承有啥区别

Angular 4 中的装饰器语法 @Input('someValue') 和 @Input() 有啥区别?

逗号分隔的连接和MySQL中的语法连接有啥区别? [复制]

Makefile 中的括号 $() 和大括号 $ 语法有啥区别?