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

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

自然语言的文法

<句子>  ->  <名词短语 > <动词短语>
<名词短语> -> <形容词> <名词短语> 
<名词短语> -> <名词>
<动词短语> -> <动词> <名词短语>
<形容词> -> 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表示字符数字串

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


相关文章
|
2月前
|
Java 编译器 程序员
1.5 高级计算机语言和编译器
高级编程语言,如C和Java,通过更接近人类思维方式的指令简化了编程过程,使得开发者能够在更抽象的层面上表达逻辑,避免了直接操作繁琐的机器语言。编译器作为桥梁,将这些高级语言翻译成不同CPU可执行的机器码,使得代码具有跨平台的潜力,并极大地提升了编程效率与易学性。
73 11
|
2月前
|
JavaScript 前端开发 程序员
动态语言、静态语言、强类型语言、弱类型语言的区别
动态语言、静态语言、强类型语言、弱类型语言的区别
|
5月前
|
编译器 C语言
C语言编程语法—结构
C语言基础概要:令牌包括关键字、标识符、常量、字符串和符号,如`printf(&quot;Hello,World!\n&quot;);`含5个令牌。分号是语句结束符,注释用`/*...*/`包围。标识符是变量等的名称,以字母、下划线开头,后跟字母、数字。C语言有32个关键字,如`int`,空格用于分隔语句元素,提升可读性。
|
6月前
|
自然语言处理 容器
S语言词法分析器设计
还有很多需要优化的地方,作为小白发出了也和大家一起交流下,这次我是分文件写的,因为考虑到以后的实验都用这一套代码,分文件写方便一点,用的是C++14标准
37 0
|
7月前
|
Python
【掰开揉碎】Python 中 type() 函数的强大功能:探索动态类型和元编程
【掰开揉碎】Python 中 type() 函数的强大功能:探索动态类型和元编程
173 0
|
7月前
|
JavaScript 前端开发 Java
静态语言和动态语言,解释和编译
静态语言和动态语言,解释和编译
100 1
编译原理(四) 语言及其文法的基本概念
编译原理(四) 语言及其文法的基本概念
|
自然语言处理 Go
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
Go语言学习编程实践:实现简易计算器(包含词法器、语法树构建)
169 0
|
程序员 C语言
初识C语言之条件结构篇——带你认知编程世界的逻辑之美!
初识C语言之条件结构篇——带你认知编程世界的逻辑之美!
213 0
初识C语言之条件结构篇——带你认知编程世界的逻辑之美!