哪些概念控制流,数据类型,语句,表达式和操作属于哪个?语法或语义?
控制流,数据类型,语句,表达式,操作,功能......之间的关系是什么?如何从这些原语逐级构建程序?
我想了解这些原始概念及其关系,以便弄清楚应该学习新语言的哪些方面。
谢谢和问候!
答案 0 :(得分:2)
所有这些语言元素都有语法(如何编写)和语义(它的编写方式与实际意义相对应)。控制流确定执行哪些语句以及何时,表达式产生一个值,并且可以由函数和其他语言元素组成(尽管细节取决于编程语言)。操作通常是一系列语句。 “功能”的含义因语言而异;在某些语言中,任何可以通过名称调用的操作都是一个函数。在其他语言中,函数是产生结果的操作(与不报告结果的过程相反)。有些语言还要求函数不变异,而程序可以变异,尽管这在不同语言之间有所不同。数据类型封装了数据以及可以对该数据进行操作的操作/过程/函数。
答案 1 :(得分:2)
他们属于这两个世界:
语法将描述哪些是运算符,它们是基本类型(int
,float
),它们是关键字(return
, for
,while
)。因此语法决定了您可以在编程语言中使用哪些“单词”。用词我的意思是每一个可能的令牌:=
是一个令牌,void
是一个令牌,varName12345
是一个被视为标识符的令牌,12.4
是一个令牌被视为浮动等等..
语义将描述如何在您的语言中将这些令牌组合在一起。
例如,您将while
语义类似于:
WHILE ::= 'while' '(' CONDITION ')' '{' STATEMENTS '}'
CONDITION ::= CONDITION '&&' CONDITION | CONDITION '||' CONDITION | ...
STATEMENTS ::= STATEMENT ';' STATEMENTS | empty_rule
等等。这是语言的语法,它准确描述了语言的结构。因此,它将能够根据语言语义来判断程序是否正确。
然后是语义的第三个方面,即“构造意味着什么?”。您可以将其视为例如for
循环与其如何转换为需要执行的较低级语言之间的对应关系。
第三个方面将决定您的程序在允许的操作方面是否正确。通常你可以让一个编译器拒绝许多没有意义的程序(因为它们违反了语义),但是为了能够找到许多不同的错误,你必须引入一个新的工具:类型检查器也会检查你什么时候做根据类型,他们是正确的操作。
例如,您的语法可以允许执行varName = 12.4
,但是typechecker将使用varName
的声明来了解您是否可以为其分配浮点数。 (当然我们谈的是静态类型检查)
答案 2 :(得分:1)
这些概念属于两者。
语句,表达式,控制流操作,数据类型等使用语法定义其结构。然而,它们的含义来自语义。
当您为编程语言及其构造定义语法和语义时,这基本上为您提供了一组构建块。语法用于理解代码中的结构 - 通常使用抽象语法树或AST表示。然后,您可以遍历树并将语义应用于每个元素以执行程序,或者为某些指令集生成一些指令,以便稍后执行代码。