文章目录

  • 语言的三要素
    • 语法(Syntax)
      • Bakus-Naur范式
        • 范式的表示
        • 系统对范式的识别
        • EBNF示例(与正则有些类似)
      • Avram Noam Chomsky的语言系统
      • 如何科学地定义语言
    • 语义(Semantics)
    • 语用(Pragmatics)

语言的三要素

语言有三要素:语法(Syntax)、语义(Semantics)、语用(Pragmatics)

语法(Syntax)

语法是用规则表示语言的组成方式
C++中,与其他语言相同,用EBNF语法图表示语法

Bakus-Naur范式

范式的表示

  1. 形式化描述程序设计语言的语法(从自然语言梳理出来)
    如:
    thank sb. for sth.
    这是一个pattern,其中sb.和sth.是非语言的一部分,这是为了描述pattern引入的;thank与for是语言的一部分(切实的就是本人)
    这种对pattern的描述就实现了用简单形式代表一个集合
    这种pattern在程序设计语言中就是EBNF
    例:
    ID ::- _A_D
    A ::- a|b
    D ::- 1|0
    这就是一个规则,约束了ID;所有能形成的ID是这样几个:_a_1, _a_0, _b_0, _b_1
    规则中:ID是目标的标识符(类似变量名);符号“::-”表示“定义为”,意为“规则的表示方法”
  2. 此例中,用这三条规则代表的是一个有限的字符串集合;若要表示一个无限集合(即用有限的规则表示无限集合)用递归定义
    如:
    ID ::- _A_D
    A ::- aA|bA|A
    D ::- 0|1
  3. 依旧此例
    ID,A,D等不会出现在集合里,他们只是为了描述该语言来描述的引入,成为非终极符号,表示时通常用<>括起来,如
    <ID> ::- _<A>_<D>
  4. 终极符号又称字母表;组词、组句的规则就是语法规则
  5. 完整形式

    非终极符号用{VN}表示
    终极符号用{VT}表示
    整个集合{VN} U {VT}为BNF对应的语言表示

系统对范式的识别

采用方法:规则替换
即遇到任何一个符号串,机器就根据给出的规则不断用右部替换左部,最终形成一棵树;如果该树的根即为目标Identifier,即认为该字符串为符合规则的串
如果是从下往上处理,称为reduce
如果是从上往下递归处理,称作deduct

例:_a_0是否为上述语言的一部分?
如上图,可知_a_0是上述语言的一部分

EBNF示例(与正则有些类似)

Avram Noam Chomsky的语言系统

  1. 观点:自然语言可以用严格形式表示,语法结构可以推演
  2. 55年论文:将人类所有的自然语言分成4个部分
    G = { VN, VT, P, Z }
    VN代表非终极符号集
    VT代表字母表(在程序设计语言中基本同于ASCII)
    P代表转换式规则
    Z代表目标,即Identifier
  3. 语法表示可以分为4类
    详细资料参见1,或参见2
    RG(Regular Grammar):正则文法
    CFG(Context Free Grammar):上下文无关文法
    CSG(Context Sensitive Grammar):上下文有关文法
    PSG(Phrase Structure Grammar):短语结构文法
  4. 对于每种语法,都定义了一种自动识别模型
    RG-FA(Finite Automata)(有限状态自动机)
    CFG-PDA(PushDown Automata)
    CSG-LBA(Linear Bounded Automata)
    PSG-TM(Turing machine)
    注:这些的意思是:“RG语法用FA来识别”
            PushDown Automata识别时用栈结构,有缓冲过程,对应模型叫Stack-Based
  5. 程序设计语言在此语言系统
    程序设计语言语法在是RG,整体文法是CFG,还有一些越过CFG进入CSG
    按照(RG, CFG, CSG, PSG)的顺序,语言的规则约束越来越弱,内涵越来越少,外延越来越大,语言范畴越来越大
  6. 不能用CFG描述的部分,如先定义后使用原则,调用函数参数与定义时参数一致原则等
    这样的语法部分超过了CFG的范围,但不一定用LBA来识别,而使用ad hoc来识别
    注:ad hoc是拉丁的"for this",引用为“for this purpose only",意为(在此情景中)特殊情况出现时,不一定要更强大的自动机来识别(因为自动机越强,系统复杂度越高),而是特殊情况特地解决就好

如何科学地定义语言

  1. 语言是在一个特定的字母表上,按照一定的规则所组成的符号串集合
  2. 语言的大小、强弱与语法紧密相关(语法分级参照Chomsky的系统)
  3. 机制拓展:如通讯协议的表示也可以看作语言(收、发遵循的符号(字母表)排列顺序),组成方式(语法)……

语义(Semantics)

  1. 语义分为动态语义(Dynamic Semantics)与静态语义(Static Semantics),说明了一段话代表的含义是什么
  2. 如上例,程序设计语言中,一些全局的文法已经超过了CFG范围,如先定义后使用原则;这些被归结到静态语义里去
    动态语义:程序执行行为(如计算子)
  3. 计算机中的动、静:程序在运行之前能做的事都是静态,程序编译时、程序未形成前能确定的形式都称为静态
  4. 语义也有严格的表示,可分为三类:操作语义、指称语义、公理语义

语用(Pragmatics)

  1. 定义:语言设计中用什么样的方式表示更为容易被接受,某机制的原理与设计思路等问题

___Fin___

[课业] 11 | C++ | 语言相关推荐

  1. ​什么问题最让程序员头秃?我们分析了11种语言的11000个问题

    导读:自 2008 年成立以来,Stack Overflow 一直在拯救所有类型的开发人员.自那时以来,开发人员提出了数百万个关于开发领域的问题. 但是,迫使开发者转向 Stack Overflow ...

  2. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第11章 语言数据管理

    第11章 语言数据管理 11.1 语料库结构:一个案例研究 主要设计特点 基本数据类型 11.2 语料库生命周期 语料库创建的三种方案 质量控制 维护与演变 11.3 数据采集 从网上获取数据 从字处 ...

  3. 《用Python进行自然语言处理》第 11 章 语言数据管理

    1. 我们如何设计一种新的语言资源,并确保它的覆盖面.平衡以及支持广泛用途的文 档? 2. 现有数据对某些分析工具格式不兼容,我们如何才能将其转换成合适的格式? 3. 有什么好的方法来记录我们已经创建 ...

  4. c语言性别体重身高的程序,1-1 C语言手撕高斯-朴素贝叶斯 - 通过身高和体重推测性别(机器学习)...

    目录 目录 目录 项目介绍 项目1-1的准确度 项目可行性:原理简介 高斯分布(正态分布) 朴素贝叶斯 代码流程 获取数据(数据清洗) 代码实现 头文件 allHead.h 源文件 handleDat ...

  5. IE 11 请求语言zh-Hans-CN所引发的问题及解决方案

    转自:https://blog.csdn.net/xiaoyw71/article/details/51859342 写在前面 首先感谢问题最终解决人:田志辉(音泰思公司[日本]).白军(北京音泰思) ...

  6. 11.Go语言干货-结构体

    1. 类型别名与自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型,整型.string.浮点型.布尔等数据类型. 在Go语言中可以根据自身的需求,使用关键字type自定义数据类型. 自定 ...

  7. 1.11——Go语言适合做什么

    一.我们为什么选择Go语言 选择Go语言的原因可能会有很多,关于Go语言的特性.优势等,我们在之前的文档中也已经介绍了很多了.但是最主要的原因,应该是基于以下两方面的考虑: 执行性能 缩短API的响应 ...

  8. 11——go语言数字类型

    Go语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码. Go也有基于架构的类型,例如:int.uint和uintptr. 这些类型的长度都是根据运行程序所在的操作系统类型所决定的: i ...

  9. 11. Python语言的核心编程 · 第十一章 Python语言的面向对象(上)

    Pythin语言的面向对象(上) 1. 面向对象简介 2. 类(class) 3. 对象的创建流程 4. 类的定义 5. 类中的属性和方法 6. 参数self 总结小便条 1. 面向对象简介   Py ...

最新文章

  1. java手机界面太小_手机端页面在项目中遇到的一些问题及解决办法
  2. 分布的matlab实现_图像相似度---灰度分布算法---用matlab实现
  3. jQuery 表单选择器
  4. PAT1132: Cut Integer
  5. unity双击打不开脚本_游戏对象和脚本 (创建一个时钟)
  6. 随便讲讲自己了解的ajax在JQ中的应用
  7. MATLAB代码:计及碳排放交易及多种需求响应的微网/虚拟电厂日前优化调度
  8. python用cartopy包画地图_利用Cartopy绘制带有地图投影的图形
  9. vb.net 画多个矩形_电气原理图和接线图识图方法,电气接线图怎么画?你会画吗?...
  10. Jiagu 自然语言处理工具
  11. 《史蒂夫·乔布斯传》——童年篇有感
  12. Linux 虚拟内存
  13. php垃圾回收,PHP垃圾回收机制的理解
  14. python抓取京东商品评价总数_python爬虫抓取和分析京东商城评价
  15. 腾讯两大社交巨头败了, 瓦次普才是社交APP的真霸主, 用户比微信多5亿
  16. CVE-2020-1472 Netlogon特权提升漏洞分析及复现
  17. 图机器学习-图神经网络
  18. c v语言 小数后20位,V语言学习笔记-30集成C代码库
  19. Android BroadcastReceiver详解
  20. 网易传媒全新知识短视频内容消费品牌网易新闻“知识公路”正式发布

热门文章

  1. Vue实现放大镜效果
  2. 关于C#调C++dll system.AccessViolationException: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏
  3. html表格虚线显示不出来的,WORD表格中的虚线看得到,却打印不出来
  4. 服务器出现宕机该如何解决
  5. 测试基础——数据库及数据库表的SQL操作(了解即可)
  6. 以酶促反应为例的统计回归问题及代码实现
  7. 1227 飞机座位分配概率
  8. 谷歌发布2018年度搜索排行榜
  9. Ubuntu上安装ffmpeg
  10. Python绘制频率分布直方图