2010-03-26 202 views
1

哪些概念控制流,数据类型,语句,表达式和操作属于?语法或语义?编程语言的原语

控制流,数据类型,语句,表达式,操作,函数,...之间的关系是什么?一个程序是如何从这些基元逐级构建的?

我想了解这些原始概念及其关系,以便找出应该学习的新语言的哪些方面。

感谢和问候!

回答

2

所有这些语言元素都有语法(它是如何被写入的)和语义(它被写入的方式如何对应于它的实际意义)。控制流决定执行哪些语句以及何时,表达式产生一个值并且可以由函数和其他语言元素组成(虽然细节取决于编程语言)。操作通常是一系列的陈述。 “功能”的含义因语言而异;在某些语言中,可以通过名称调用的任何操作都是一个函数。在其他语言中,函数是产生结果的操作(与不报告结果的过程相反)。有些语言也要求功能是非变异的,而程序可以是变异的,尽管这种变化因语言而异。数据类型封装了可以在该数据上操作的数据和操作/过程/功能。

1

这些概念属于两者。

语句,表达式,控制流操作,数据类型等使用语法定义了它们的结构。但是,它们的含义来自语义。

当您为编程语言及其结构定义了语法和语义时,它基本上为您提供了一组构建块。该语法用于理解代码中的结构 - 通常使用抽象语法树或AST来表示。然后可以遍历树并将语义应用于每个元素以执行程序,或者为某些指令集生成一些指令,以便稍后执行代码。

2

它们属于两个世界:

  • 语法将描述这是运营商,这是基本类型(intfloat),这是关键字(returnforwhile)。所以语法决定了你可以在编程语言中使用哪些“单词”。与字我的意思是每一个可能的令牌:=是令牌,void是令牌,varName12345是被认为作为标识符的令牌,12.4是视为浮动令牌等等..

  • 语义将描述如何将这些令牌在您的语言中组合在一起。

例如,你将有while语义是一样的东西:

WHILE ::= 'while' '(' CONDITION ')' '{' STATEMENTS '}' 
CONDITION ::= CONDITION '&&' CONDITION | CONDITION '||' CONDITION | ... 
STATEMENTS ::= STATEMENT ';' STATEMENTS | empty_rule 

等。这是语言的语法,它准确描述了语言的结构。所以它可以根据语言语义来决定程序是否正确。

然后还有第三个方面的语义,那就是“这个结构是什么意思?”。您可以将其视为例如for循环与它如何转换为需要执行的较低级别语言之间的对应关系。

这个第三方面将决定你的程序在允许的操作方面是否正确。通常你可以让一个编译器拒绝许多没有意义的程序(因为它们违背了语义),但是为了能够找到许多不同的错误,你将不得不引入一个新的工具:类型检查器,它也会检查你每当你做什么根据类型他们的操作是正确的。

例如,您的文法可以允许做varName = 12.4,但类型检查器将使用varName的声明来了解是否可以为其分配浮点数。 (当然我们正在谈论静态类型检查)