以下内容均由编译原理视角展开


高级程序语言概述


先介绍一些有代表性的程序设计语言

语言 特点
FORTRAN 数值计算
COBOL 事务处理
Pascal 结构化程序设计
Lisp 函数式程序设计
Prolog 逻辑程序设计
C 系统程序设计
Smalltalk 面向对象程序设计
Java Internet应用、可移植性
Python 解释型

更接近数学语言和工程语言
更直观、自然易于理解
编写效率高
易移植


程序语言的定义

  • 语法
  • 语义
  • 语用(了解,编译原理弱相关)

语法

程序本质上是一定字符集上的字符串
语法:一组规则,用它可以形成和产生一个合式(well-formed,一定组织的,符合一定的规格和样式)的程序

  • 词法规则:单词符号的形成规则(即哪些字符序列构成常数,哪些构成基本字,哪些作为算符),由有限自动机描述
  • 语法规则:语法单位的形成规则(即表达式的构成、语句的构成、程序的构成),由上下文无关文法描述
    语法单位:表达式、语句、分程序、过程、函数、程序等

语法规则和词法规则定义了程序的形式结构
定义语法单位的意义属于语义问题


E → i
//表达式(语法单位)E可以由串i(单词、语法单位)构成
//或者说一个变量名、一个标识符单独构成一个表达式
E → E+E
//表达式E可以由两个子表达式通过’+‘字符连接构成
//两个子表达式通过’+‘字符连接起来构成一个更大的表达式
E → E*E
//表达式E可以由两个子表达式通过’*‘字符连接构成
//两个子表达式通过’*'字符连接起来构成一个更大的表达式
注意这里没有把’*‘视为乘号,因为将’*'解释为算术乘法属于语义问题
E → (E)
//表达式E加上括号仍是表达式


语义

一组规则,用它定义一个程序的意义
描述方法

  • 自然语言描述  有歧义,易隐藏错误,不完整性
  • 形式描述  使用形式语义(了解,编译原理弱相关)


程序的这种层次结构使我们可以从对下层单位的理解逐步得到对上层单位的理解

程序语言成分具有逻辑意义(数学意义)和实现意义(计算机的具体实现)
实现意义与逻辑意义不一定完全一致

程序语言的功能:描述数据和对数据的运算


高级语言的一般特性

  • 高级语言的分类
  • 程序结构
  • 数据结构与操作
  • 语句与控制结构

高级语言的分类

强制式语言(Imperative Language)/命令式语言/过程式语言
代表:FORTRAN、C、Pascal
特性:命令驱动,面向语句。描述数据处理的每个步骤

应用式语言(Applicative Language)
代表:Lisp、ML
特性:注重程序所表示的功能,通过描述函数的构造来实现数据处理

基于规则的语言(Rule-based Language)
代表:Prolog
特性:检查一定的条件,满足值时进行适当动作

面向对象语言(Object-Oriented Language)
代表:Smalltalk、C++、Java
特性:封装、继承、多态


程序结构

FORTRAN

FORTRAN程序的主程序调用其他辅程序完成数据处理,模块不允许嵌套,如不允许递归、子程序中不允许定义函数。FORTRAN有明显的模块化程序设计的特点

Pascal
Pascal是模块化程序设计语言的代表
Pascal程序本身可以看成是一个操作系统调用的过程,过程可以嵌套和递归

Pascal中名字的作用域遵循最近嵌套原则
C语言类似


Java

  • 类与对象
  • 继承,封装,多态

数据结构与操作

数据类型

初等数字类型(基本数字类型)
(1)数值类型

  • 整型、实型、复数…
  • 运算:+、-、*、/、等
    (2)逻辑类型
  • true、false
  • 布尔运算:与、或、非等
    (3)字符类型:符号处理
    (4)指针类型

标识符与名字

标识符是语法概念,名字是语义概念
标识符概念侧重描述标识符的构成形式,如字符串可以作为标识符,int、a
名字标识程序中的对象,具有语义,指代特定的内容

名字的绑定(binding)是指将标识符与所代表的程序数据或代码进行关联
静态绑定:编译时绑定。如int a;
动态绑定:运行时绑定。如Java中对象调用方法时进行的绑定

数据结构

数组


蓝色表达式值在编译时就可以确定,因此预先计算好
存储在以下内情向量表中

记录(结构)

字符串、表格、栈

抽象数据类型(ADT)

同数据结构中的ADT(数据定义+基本运算)
编程语言对抽象数据类型的支持

  • Ada通过程序包(package)提供对数据封装的支持
  • Java等OOP语言通过类(Class)对ADT提供支持

语句与控制结构

表达式

语句
通常高级程序设计语言具有以下种类的语句

语句的分类

按功能分类

  • 执行语句:描述程序的动作
  • 说明语句:定义各种不同数据类型的变量或运算,定义名字的性质

按形式分类

  • 简单句:不包含其他语句成分的语句
    A = B + C;
    goto re:
  • 复合句:句中有句的语句
    while( i >= 0 ) {
      j = i * 10;
      i++;
    }

2019/1/11

编译前奏:高级程序设计语言概述相关推荐

  1. 编译原理 --- 高级程序设计语言概述

    第一部分 --- 程序设计语言的定义 一个程序设计语言一般有三个定义:1.语法:2.语义:3.语用 在编译原理这门课中我们主要考虑语法和语义这两个定义 1.程序本质上是一定字符集合上的字符串,但是字符 ...

  2. 编译原理学习笔记2——高级程序设计语言概述

    编译原理学习笔记2--高级程序设计语言概述 2.1常用的高级程序设计语言 2.2程序设计语言的定义 2.2.1语法 2.2.1语法 2.2.3程序语言的基本功能和层次机构 2.2.4程序语言成分的逻辑 ...

  3. 程序设计语言编译原理_编译原理学习笔记(二):高级程序设计语言

    高级程序设计语言 一.语言概述 1.1 语法 v.s. 语义 程序本质上是一定字符集上的字符串 语法:一组规则,用它可以形成和产生一个合式(well-formed)的程序 定义了程序的形式结构 定义语 ...

  4. 编译原理:高级程序设计语言的语法描述

    true beginning 高级程序设计语言的语法描述 文法:描述语言的语法结构的形式规则 比如在自然语言中 <句子> → <主语><谓语><直接宾语> ...

  5. 高级程序设计c语言试卷答案,高级程序设计语言半期试卷答案.doc

    高级程序设计语言半期试卷答案 西南交通大学2009-2010学年第1学期半期试卷 课程代码 3243800 课程名称 高级语言程序设计 考试时间 90分钟 题号一二三四五六七八九十总成绩得分 阅卷教师 ...

  6. 嵌入式系统设计师学习笔记二十八:嵌入式程序设计③——高级程序设计语言

    嵌入式系统设计师学习笔记二十八:嵌入式程序设计③--高级程序设计语言 解释程序和编译程序 编译器的工作阶段示意图 语法错误:非法字符,关键字或标识符拼写错误 语法错误:语法结构出错,if--endif ...

  7. 软考——程序设计语言概述

    目录 1,低级语言 2,高级语言 3,程序设计语言的定义 4,程序设计语言的分类 5,程序设计泛型 面向对象的程序设计语言有Java,C++,C #,python. 程序设计语言是为了书写计算机程序而 ...

  8. C语言是应用最为广泛的一种高级程序设计语言

    前 言 近年来,C语言是应用最为广泛的一种高级程序设计语言,它不仅是计算机专业学生的必修课,也是许多非计算机专业学生所青睐的技术学科.C语言程序设计是全国和各省计算机等级考试的重要考试内容.C语言功能 ...

  9. 高级程序设计语言的翻译和解释

      解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再执行:而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在机器上运行目标程序.   这两种语言处理程序的区别 ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(不同分组配置不同的箱体填充色+灰度尺度图)实战
  2. python培训好学吗-Python0基础好学吗?
  3. TypeScript 素描 - 函数
  4. Atitit 实现java的linq 以及与stream api的比较
  5. mysql 动态游标_mysql动态游标与mysql存储过程游标(示例)
  6. IDEA中Spring Boot项目报错:There was an unexpected error (type=Not Found, status=404)
  7. CVPR 2019 爆款论文作者现场解读:视觉语言导航、运动视频深度预测、6D姿态估计...
  8. this关键字实现串联构造函数调用
  9. JavaTPoint 移动开发教程【翻译完成】
  10. HCIE-Security Day16:防火墙双机热备实验(四)防火墙直路部署,上行连接路由器(OSPF),下行连接交换机
  11. 凸优化有关的数值线性代数知识一:矩阵结构与算法复杂性
  12. java IDEA 修改jar包中某个文件 并生成新jar包
  13. 数学建模常用模型和算法介绍
  14. 某去哪网,JS逆向:★★★★
  15. 关于Render在不同情况的用法
  16. 什么是APS高级计划排程(高级计划排产)可视化甘特图,有哪些应用效果?
  17. 你真的需要Apple TV吗?不如自制一个Android TV!
  18. html5游戏开发_HTML5游戏开发–第10课
  19. 图论(6)树的概念,中心与形心
  20. 一起刷 leetcode 之旋转矩阵(头条/华为/陌陌真题)

热门文章

  1. 数据库索引如何创建,它的优缺点。
  2. linux密码sha512解密,使用sha512算法加密linux密码
  3. wlanconnect无法连接wifi_高铁上明明有WiFi!为何只能连接却无法使用?列车员说出了实情!...
  4. linux 添加wifi网络打印机,基于WiFi无线网络的嵌入式打印终端的设计
  5. 转正总结(2)接(1)
  6. 职业打假人的一箭三雕赚钱套路
  7. XJOI一级三段题解(g++,即C++),也可视作C++算法竞赛教程
  8. 网页自适应,等比缩放
  9. 基于数据中心光网络的节能虚拟网络嵌入算法
  10. 卷积神经网络算法汇总