Programming languages 编程语言的原语

Programming languages 编程语言的原语,programming-languages,Programming Languages,控制流、数据类型、语句、表达式和操作的概念属于哪些?语法还是语义 控制流、数据类型、语句、表达式、操作、函数等之间的关系是什么。。。?如何从这些原语逐级构建程序 我想了解这些原始的概念和它们之间的关系,以便弄清楚人们应该学习一门新语言的哪些方面 谢谢和问候 所有这些语言元素都有语法(如何编写)和语义(如何编写与实际意思相对应)。控制流确定执行哪些语句以及何时表达式产生值,并且可以由函数和其他语言元素组成(尽管细节取决于编程语言)。一个操作通常是一系列语句。“功能”的含义因语言而异;在某些语言中,

控制流、数据类型、语句、表达式和操作的概念属于哪些?语法还是语义

控制流、数据类型、语句、表达式、操作、函数等之间的关系是什么。。。?如何从这些原语逐级构建程序

我想了解这些原始的概念和它们之间的关系,以便弄清楚人们应该学习一门新语言的哪些方面


谢谢和问候

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

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

这些概念都属于这两者

语句、表达式、控制流操作、数据类型等使用语法定义其结构。然而,它们的意义来自语义


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

这些概念都属于这两个概念

语句、表达式、控制流操作、数据类型等使用语法定义其结构。然而,它们的意义来自语义


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

它们属于两个世界:

  • 语法将描述哪些是运算符,哪些是基本类型(
    int
    float
    ),哪些是关键字(
    return
    for
    while
    )。因此,语法决定了您可以在编程语言中使用哪些“单词”。我指的是每一个可能的标记:
    =
    是一个标记,
    void
    是一个标记,
    varName12345
    是一个被视为标识符的标记,
    12.4
    是一个被视为浮点数的标记,依此类推

  • 语义将描述这些标记如何在您的语言中组合在一起

例如,您将拥有
,而
语义类似于:

WHILE ::= 'while' '(' CONDITION ')' '{' STATEMENTS '}'
CONDITION ::= CONDITION '&&' CONDITION | CONDITION '||' CONDITION | ...
STATEMENTS ::= STATEMENT ';' STATEMENTS | empty_rule
等等。这是语言的语法,准确描述了语言的结构。因此,它将能够根据语言语义判断程序是否正确

然后是语义的第三个方面,即“那个构造意味着什么?”。例如,您可以将其视为
for
循环与如何将其翻译为需要执行的低级语言之间的对应关系

第三个方面将决定您的程序在允许的操作方面是否正确。通常,您可以让编译器拒绝许多没有意义的程序(因为它们违反了语义),但为了能够发现许多不同的错误,您必须引入一个新工具:类型检查器,它还将根据类型检查每次执行操作时它们是否正确


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

它们属于两个世界:

  • 语法将描述哪些是运算符,哪些是基本类型(
    int
    float
    ),哪些是关键字(
    return
    for
    while
    )。因此,语法决定了您可以在编程语言中使用哪些“单词”。我指的是每一个可能的标记: