编译原理(五) 语言的定义

简介: 编译原理(五) 语言的定义

自然语言的文法

<句子>  ->  <名词短语 > <动词短语>
<名词短语> -> <形容词> <名词短语> 
<名词短语> -> <名词>
<动词短语> -> <动词> <名词短语>
<形容词> -> little
<名词> -> boy
<名词> -> Apple
<动词> -> eat

单词串 little boy eats apple


推导

给定文法 G = (Vt, Vn, P, S),如果 a -> b ∈ P 那么可以将符号串rag 中的a换成b 也就是说 rag可以重写为rbg

记作 rag => rbg

此时称作文法符号串rag直接推导rbg

也就是用产生式的右部替换产生式的左部


如果a0 => a1, a1 => a2, a2 => a3

那么 可以记作 a0 => a1 => a2 => a3

称作a0经过3步推导出a3,可以简记为a0 =>³ a3


a =>0 a

=> + 表示经过正数步推导

=> * 表示经过若干步推导,可以是0步


我们再来看最开始那个自然语言文法

<句子> =>  <名词短语> <动词短语>
      =>  <形容词><名词短语><动词短语>
      =>  little <名词短语><动词短语>
      =>  little  <名词>   <动词短语>
      =>  little  boy     <动词><名词短语>
      =>  little  boy     eats <名词短语>
      =>  little  boy  eats  <名词>
      =>  little  boy  eats  apple

这种从上到下推倒下来的过程叫做推导

错从下到上推回去叫做 归约


句型

如果S =>* a, a ∈ (Vt ∪ Vn)* 则称a是G的一个句型

一个句型中即可包含终结符又可包含非终结符,也可能是空串

若 S=>* w, w ∈ Vt* 则称w是G的一个句子

句子是不高喊非终结符的句型


由文法G的开始符号S推导出的所有橘子构成的集合称为文法G生成的语言, 记为L(G)

L(G) = {w | S => * w, w ∈ Vt*}

文法 E-> E+E | E * E | (E) | id

生成的语言中包含无穷多个句子


例 : 文法G

S -> L | LT

T -> L | D | TL | TD

L -> a | b | c | … | z

D -> 0 | 1 | 2 | 3 | … | 9


T => TL

=> TDL

=> TDDL

=> TLDDL

=> TD…LDDL

可以无限走下去 T表示字符数字串

该文法生成的语言是标识符


相关文章
|
自然语言处理 数据安全/隐私保护
整合 200 多项相关研究,大模型终生学习最新综述来了
【9月更文挑战第26天】近年来,大型语言模型(LLMs)在自然语言处理、智能问答及内容生成等领域广泛应用。面对不断变化的数据、任务和用户偏好,LLMs需具备适应能力。传统静态数据集训练方式难以满足需求,因此提出了“终身学习”方法,使模型持续学习新知识并避免遗忘旧知识。最新综述文章整合200多项研究,将终身学习分为内部知识(连续预训练和微调)与外部知识(基于检索和工具)两大类,涵盖12种应用场景,探讨了模型扩展和数据选择等新兴技术。然而,终身学习也面临计算资源、知识冲突及数据安全等挑战。
363 6
|
JSON 前端开发 API
使用微信JS-SDK调用发票接口的完整开发指南
本文介绍了如何使用微信JS-SDK的`chooseInvoiceTitle`接口来调用微信的发票功能。通过微信发票接口,用户可以选择开具个人或单位发票,并获取相关发票信息,如抬头、税号、公司地址等。在文中,详细描述了JS-SDK的初始化、发票接口的调用方式,并提供了完整的代码示例。文章还介绍了如何处理返回的发票信息,帮助开发者快速集成微信发票功能。
493 2
|
12月前
|
机器学习/深度学习 传感器 人工智能
智慧矿山AI安全监管方案
智慧矿山AI安全监管方案通过集成AI技术,实现了对矿山环境、设备和人员的全方位智能监控与管理。该方案利用高清摄像头、传感器等设备实时采集数据,通过AI算法进行智能分析,提前预测安全隐患,及时发出预警,有效提升矿山安全管理水平。方案涵盖顶板与边坡监测、设备运行监测、人员行为识别等多个方面,旨在构建一个高效、安全的智能化矿山环境。
352 0
|
数据采集 机器学习/深度学习 人工智能
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择
|
消息中间件 Java Maven
Java整合RabbitMQ实现生产消费(7种通讯方式)
Java整合RabbitMQ实现生产消费(7种通讯方式)
498 0
|
监控 API 开发者
深入解析Docker容器的生命周期
【8月更文挑战第24天】
405 0
|
人工智能 搜索推荐 大数据
AIGC文旅应用场景
【1月更文挑战第9天】AIGC文旅应用场景
697 1
AIGC文旅应用场景
|
前端开发 JavaScript 数据可视化
元宇宙基础案例 | 大帅老猿threejs特训
元宇宙基础案例 | 大帅老猿threejs特训
图解ReentrantLock底层公平锁和非公平锁实现原理
图解ReentrantLock底层公平锁和非公平锁实现原理
316 0