2、高级语言的语法描述

常用的高级程序设计语言

程序语言的定义

语法

一组规则,用它可以形成和产生合适的程序

词法规则:单词符号的形成规则。

单词符号的形成规则单词符号是语言中具有独立意义的最基本结构

一般包括:常数、标识符、基本字、算符、界符等

描述工具:有限自动机

语法规则:语法单位的形成规则。
语法单位通常包括:表达式、语句、分程序、过程函数、程序等;
描述工具:上下文无关文法

 

语义

一组规则,用它可以定义一个程序的意义

描述方法
        自然语言描述
                二义性、隐藏错误和不完整性
        形式描述
                操作语义
                指称语义
                代数语义

程序的层次结构

 

高级程序语言的一般特性

高级语言的分类

强制式语言(lmperative Languge)/过程式语言

        命令驱动、面向语句

        FORTRAN、C、Pascal, Ada

应用式语言(Applicative Language)

        注重程序所表示的功能,而不是一个语句接一个语句地执行
        LISP、ML

基于规则的语言( Rule-based Language)

        检查一定的条件,当它满足值,则执行适当的动作
        Prolog

面向对象语言(Object-Oriented Language)

        封装、继承和多态性
        Smalltalk,C++,Java

程序语言的语法基础

文法和语言

文法:描述语言的语法结构的形式规则

语言描述的几个基本概念:

字母表:一个有穷字符集,记为∑

字母表中每个元素称为字符 ∑上的字(也叫字符串)  是指由∑中的字符所构成的一个有穷序列

不包含任何字符的序列称为空字,记为ε

用∑*表示∑上的所有字的全体,包含空字ε

        例如: 设 ∑={a, b},则

        ∑*={ε,a,b,aa,ab,ba,bb,aaa,...}

∑*的子集U和V的连接(积)定义为

UV={ab | a\inU & b\inV }

示例:设 U={ a, aa } V= { b, bb }       

         UV={ ab, abb, aab, aabb}

V自身的 n次积记为     Vn=V V…V(n个)

V^{0}={ε}

V*是V的闭包: V*=V0∪V1∪V2∪V3∪…

V+是V的正规闭包:V+=V V* 

规则(产生式) 是一有序对<u,x>,通常写作u->x。 

上下文无关文法

上下文无关文法G是一个四元组          

        G=(VT,VN,S,P),其中

VT:终结符(Terminal)集合(非空)

VN:非终结符(Noterminal)集合(非空),且VT \cup VN=\phi

S:文法的开始符号,S\inVN

P:产生式集合(有限),每个产生式形式为 P->a, P\inVN, a\in (VT \cap VN)*

开始符S至少必须在某个产生式的左部出现一次

 

 

推导

直接推导

​​​​​​​ 

间接推导

 

最左推导和最右推导 

句子句型语言

​​​​​​​​​​​​​​

句子是特殊句型

例题

 

 

 

语法分析树和二义性

语法树

文法是二义的

一个文法某个句子存在两颗对应的不同语法树

语言的二义性

二义性问题是不可判断问题,即不存在一个算法,它能在有限步骤内,确切地判定一个文法是否是二义的

形式语言鸟瞰

乔姆斯基于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型

 

 

 

 

 

上下文有关&&上下文无关

一、上下文无关文法
上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:

S -> aSb
S -> ab

这个文法有两个产生式,每个产生式左边只有一个非终结符 S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。

二、上下文有关文法
比如:

aSb -> aaSbb
S -> ab

这就是上下文有关文法,因为它的第一个产生式左边有不止一个符号,所以你在匹配这个产生式中的S的时候必需确保这个S有正确的“上下文”,也就是左边的a和右边的b,所以叫上下文相关文法。

原文链接:https://blog.csdn.net/weixin_44636558/article/details/107188377

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/549243.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW飞行器螺旋桨性能测试与数据监控

LabVIEW飞行器螺旋桨性能测试与数据监控 开发LabVIEW的电动飞行器螺旋桨性能测试与数据监控系统&#xff0c;专门针对电动飞行器螺旋桨在运行过程中的性能测试和监控需求。通过采集转速、转矩、拉力和温度等关键参数&#xff0c;系统能够实时监测和分析螺旋桨的状态&#xff0…

git tag标签使用

创建标签 git checkout test git tag -a v1.0.0 -m v1.0.0里程碑版本 git push origin v1.0.0 删除标签 git tag -d v1.0.0 git push origin :refs/tags/v1.0.0远程分支可以直接在页面删除

spring-boot-starter-thymeleaf加载外部html文件

在Spring MVC中&#xff0c;我们可以使用Thymeleaf模板引擎来实现加载外部HTML文件。 1.Thymeleaf介绍 Thymeleaf是一种现代化的服务器端Java模板引擎&#xff0c;用于构建漂亮、可维护且易于测试的动态Web应用程序。它适用于与Spring框架集成&#xff0c;并且可以与Spring M…

纳米阱可提高未来光学设备的光强度

一种配置光捕获器件的方法有望通过放大光和提高发光纳米材料的发射效率来获得更好的光学纳米器件&#xff0c;而无需复杂的技术升级。 强光束对于从医学到电子产品的无数应用至关重要&#xff0c;但使用日常光源生产它们具有挑战性。然而&#xff0c;它们可以由激光产生。激光…

Python大数据实践:selenium爬取京东评论数据

准备工作 selenium安装 Selenium是广泛使用的模拟浏览器运行的库&#xff0c;用于Web应用程序测试。 Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样&#xff0c;并且支持大多数现代 Web 浏览器。 #终端pip安装 pip install selenium #清华镜像安装 p…

容器部署对比:通用容器部署 vs 使用腾讯云容器镜像服务(TCR)部署 Stable Diffusion

目录 引言1 通用容器部署的主要步骤1.1 准备环境1.2 构建 Docker 镜像1.3 上传镜像1.4 部署容器1.5 配置网络1.6 监控和维护 2 使用腾讯云容器镜像服务&#xff08;TCR&#xff09;部署的主要步骤2.1 下载 Stable Diffusion web UI 代码2.2 制作 Docker 镜像2.3 上传镜像到 TCR…

27. 移除元素 (Swift版本)

题目描述 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出…

2025张宇考研数学基础36讲,视频百度网盘+PDF

一、张宇老师全年高数体系&#xff08;听课用书指南&#xff09; 25张宇全程&#xff1a; docs.qq.com/doc/DTmtOa0Fzc0V3WElI 复制粘贴在浏览器上打开&#xff0c;就可以看到2025张宇的全部的啦&#xff01; 一般来说我们把考研数学划分为3-4个阶段&#xff0c;分别是基础阶…

Legacy|电脑Windows系统如何迁移到新安装的硬盘?系统迁移详细教程!

前言 前面讲了很多很多关于安装系统、重装系统的教程。但唯独没有讲到电脑换了新的硬盘之后&#xff0c;怎么把旧系统迁移到新的硬盘上。 今天小白就来跟各位小伙伴详细唠唠&#xff1a; 开始之前需要把系统迁移的条件准备好&#xff0c;意思就是在WinPE系统下&#xff0c;可…

使用Python进行数据库连接与操作SQLite和MySQL【第144篇—SQLite和MySQL】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行数据库连接与操作&#xff1a;SQLite和MySQL 在现代应用程序开发中&#xf…

python入门(二)

python的安装很方便&#xff0c;我们这里就不再进行讲解&#xff0c;大家可以自己去搜索视频。下面分享一下Python的入门知识点。 执行命令的方式 在安装好python后&#xff0c;有两种方式可以执行命令&#xff1a; 命令行程序文件&#xff0c;后缀名为.py 对于命令行&…

判断闰年(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int year 2000;//执行循环判断&#xff1b;while (year < 2010){//执行流程&#xff1b;//判断能否整除4&#xff1…