[编译原理学习笔记2-1] 高级语言及其语法描述

[编译原理学习笔记2-1] 高级语言及其语法描述

高级程序语言是用来描述算法和计算机实现的。

本章主要学习高级程序语言的结构和特征,程序语言的语法描述方法

[2.1] 程序语言的定义

任何语言实现的基础是语言的定义 $ \Longrightarrow $ 程序语言主要由语法语义两方面定义。
一个程序设计的语法(syntax)描述了该语言的而程序的正确行使,而语义(semantics)则定义了程序的含义(即应该做什么)

[2.1.1] 语法

对于一个编译器而言,分析阶段的工作是围绕被编译语言的“语法”展开的。所谓一个语言的语法是指一个规则:用这个规则可以形成一个合适的而程序。这一规则由两方面组成:

  • 词法规则:词法规则是指单词符号的形成规则(他规定了字母表中哪样的字符串是一个单词符号
  • 语法规则(或产生规则):语法规则规定了如何从单词符号形成更大的结构(即语法单位),换言之,语法规则是语法单位的形成规则
  • 单词符号:是语言中具有独立意义的最基本结构(各类型的常数、标识符、基本字、算符和界符等)
  • 语法单位:由单词符号在语法规则下组成的更大的结构(表达式、语句、分程序、函数、过程和程序等等)

这两个可以理解是由规则所统筹的物料

下推自动机理论上下文无关文法是我们讨论语法分析的理论基础

[2.1.2] 语义

  • 语义:定义语言的单词符号和语法单位的意义(在许多语言中有着形式上完全相同的语法单位,但是经过不同语义下的含义却不尽相同)
  • 一个语言的语义是指这样一组规则,使用它可以定义一个程序的意义,这些规则被称为语义规则

一个程序语言的基本功能是描述数据和对数据的运算,从本质上来说是描述一定数据的处理过程。程序的大体层次结构如下:

  • 程序:是一个完整的执行单位。一个程序通常是由若干个子程序或分程序组成的,他们常常含有自己的数据(局部名)。
  • 子程序或分程序:由于语句组成,而组成语句的成分是各种类型的表达式。表达式是描述数据运算的基本结构,它通常含有数据引用、算符和函数调用。

[2.2] 高级语言的一般特性

[2.2.1] 高级语言的分类

  • 强制式语言:命令驱动面向语句
  • 应用式语言:注重程序所表示的功能而不是语句的接连执行
  • 基于规则的语言:检查一定的条件,当它满足值,则执行适当的动作
  • 面向对象语言:封装性、继承性和多态性

[2.2.2] 几种程序的典型结构

  • FORTRAN:一个FORTRAN 程序由一个主程序和若干个辅助程序段组成
  • Pascal:Pascal允许子程序嵌套定义,也允许并列定义

[2.2.3] 数据类型与操作

  • 名字:对于程序语言所涉及的对象(数据、函数和过程),通常用一个能反映其本质的、有助于记忆的名字来表示

名字标识符的区别:标识符是一个没有意义的字符序列,但名字却有明确的意义和属性。

  • 初等数据类型

    • 数值数据:整形、实型、双精度等,可施行算术运算
    • 逻辑数据:可施行逻辑运算
    • 字符数据:有些语言容许有字符型或字符串型的数据,这对于符号处理是必须的
    • 指针类型:它们的值指向另一些数据
  • 数据结构:由初级数据定义复杂(高级)数据的手段。

    • 数组:是由同一类型数据所组成的某种n维矩形结构。如果一个数组所需的存储空间大小在编译时就已知道则称此数组是一个确定数组;否则称为可变数组。编译程序要做的就是实现地址计算公式,使数组元素得到正确的引用。
    • 记录(结构struct):从逻辑上讲,记录是由已知的数据组合起来的一种结构。记录结构最简单的存贮方式是连续存放
    • 字符串、表格和队列
  • 抽象数据类型

    • 数据对象的一个集合
    • 作用于这些数据对象的抽象运算的集合
    • 这种类型对象的封装

C++、Java语言通过类对抽象类型提供支持

  • 语句与控制结构
    • 表达式:解决优先级和结合律
    • 语句
      • 说明语句:定义各种不同数据类型的变量和运算
      • 可执行语句:描述语句的动作
        • 执行语句分为:赋值、控制和I/O语句

后记

时间仓促哭了,拒绝摸鱼下回补充学习笔记1和学习笔记2-2

发布了10 篇原创文章 · 获赞 11 · 访问量 457

猜你喜欢

转载自blog.csdn.net/TalesOV/article/details/104469170