博客
关于我
编译原理及技术(二)——上下文无关文法及推导
阅读量:796 次
发布时间:2019-03-25

本文共 1114 字,大约阅读时间需要 3 分钟。

一、语法和语义

什么是语法?

语法是程序形式结构的规则集合,定义了程序的描述方式。它包括词法规则语法规则两部分。

词法规则

词法规则定义单词符号的形成规则,主要包括:

  • 常数、标识符、基本字、算符、界符等
  • 描述工具:有限自动机
语法规则

语法规则定义语法单位的形成规则,通常包括:

  • 表达式、语句、分程序、过程、函数、程序等
  • 描述工具:上下文无关文法

什么是语义?

语义是程序意义的规则集合,描述程序执行的目的和结果。常用的描述方法有:

  • 自然语言描述(具有二义性、含有隐含错误和不完整性)
  • 形式描述(如 πεγ-形式理论)

二、文法

文法是描述语言语法结构的规则体系,强调语言形式的规范性。常用于处理自然语言的例子:(示例:句子 "He gave me a book." 的文法规则)

三、语法描述的几个基本概念

(示例图片:语法单元、语法树、推导过程等)

四、上下文无关文法

上下文无关文法(CFG)是一个由四元组 G = (VT, VN, S, P) 定义的形式语言体系,其中:

  • VT:终结符集合
  • VN:非终结符集合
  • S:语法描述的基本形式
  • P:产生式集合

其特点是产生式中的 P 可以由终结符 a(阿尔法)自由替换,无需依赖上下文。

例如,定义仅包含 "+" 和 "*" 的算术表达式文法:

G = ( {i, +, *, (, )}, {E}, E, P )

其中 P 的产生式为:

  • E → i
  • E → E + i
  • E → E * i
  • E → (E)
  • E → (i)

五、文法推导

推导过程是从一个句型到另一个句型的过程,可能不唯一。可能使用最左推导或最右推导(最右推导也称为规范推导)。

推导过程:

  • 含a> 表示带有 a 上下文,可以自由替换。
  • "+" 表示非平方推导(至少一步)
  • "*" 表示推导(至少一步)

文法推导的结果通常以语法树的形式呈现。语法树不唯一意味着文法可能具有二义性。

六、语法树与二义性

文法的二义性(Ambiguity)是指同一个文法推导可能产生两个或多个不同的语法树。

(示例图片:二义性所致的语法树差异)

七、乔姆斯基形式语言体系

乔姆斯基在 1956 年提出了形式语言体系,包含四种文法类型:

  • 型 0 文法:没有非终结符,无法产生下 shifts(无法向后移动)
  • 型 1 文法:有一个非终结符,允许向左和向右移动
  • 型 2 文法:有多个非终结符,可以通过下 shifts 或右移[Sh Ve]
  • 型 3 文法:如型 1 文法,允许自由移动非终结符

型 2 和 型 3 文法的主要区别在于是否允许自由移动非终结符。

型 0 和 型 1 文法应用广泛,常用于描述上下文无关文法限定产生式的语法规则。

转载地址:http://wxbyk.baihongyu.com/

你可能感兴趣的文章
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
NIFI同步MySql数据源数据_到原始库hbase_同时对数据进行实时分析处理_同步到清洗库_实际操作06---大数据之Nifi工作笔记0046
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_实际操作---大数据之Nifi工作笔记0020
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_实际操作_02---大数据之Nifi工作笔记0032
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>