教材《编译原理》(龙书)第2版 关于这部分,教材在P94页有说明,但是我觉得不容易理解,下面通过两个例题来理解一下。 例题一: 这一题比较简单,我们直接从答案找解题方法 第一步:要根据NFA画出这个表格,可能有些模糊,表…
分类:编译原理
从0到1打造正则表达式执行引擎(一) 正则表达式转NFA
文章目录 前置知识 有限状态机 状态机下的正则表达式 串联匹配 并联匹配 (正则表达式中的 |) 重复匹配(正则表达式中的 ? + *) 重复0-1次 ? 重复1次以上 重复0次以上 匹配指定次数 特殊符号(正则表达式中…
数数字游戏
数数字游戏:2人交替数数字,从1开始,到21结束,先数到21者获胜。每人每次至少数1个数字,每人每次最多数3个数字。 神话般的结论:谁先数,谁就获胜。 请大家给出游戏破解的秘籍,并进一步探讨以下几种情况: (1)如果是从…
编译原理学习笔记---龙书第三版(精简习题版)
目录 概要 1.词法分析 1.1正则表达式转NFA 1.2 NFA转DFA 1.3 DFA最小化 2.语法分析 2.1 自顶向下分析 2.2自底向上分析 LR(0) SLR(对LR(0)改进) LR(1) LALR 3.…
编译原理-第六章:运行时存储空间的组织和管理
编译原理 概述 局部存储分配策略 全局栈式存储分配 概述 本节主要讲解编译器在生成目标代码前的一些存储空间的组织和管理方式。 编译程序在完成词法、语法和语义分析后,在生成目标代码之前,需要把程序的静态正文和实现这个程序的…
从正规式到DFA的三个过程:从正规式到NFA
从正规式到NFA 1.正规式如何生产? 2.NFA如何验收? 3.算法讲解(Thompson算法) 正规式是对模式的形式化描述,DFA负责高效、优雅地识别这种模式。从正规式到最优DFA要走三步:构建NFA、NFA确定化、…
词法分析——NFA 转换成 DFA: 子集构造算法
因为 NFA 的状态转移不确定,不适合直接做词法分析器的识别,在写算法时往往需要使用回溯。所以我们一般使用子集构造算法,将 NFA 转换成 DFA,得到确定的状态转移,再转化成一个词法分析器的代码。 下面给出一个关于 N…
编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
语法制导翻译并产生中间代码: 概述: 语法分析之后,编译的任务是由已识别成功的正确源程序生成一组规格一致,便于计算加工的指令形式。 中间代码的生成方法: 语法制导翻译,属性文法制导翻译 中间代码: 不是机器语言,便于生成…
第九章 运行时存储空间的组织与管理
运行时的存储空间结构: 1、堆区(HeapSpace) 此部分的内容由new语句动态产生。从上往下分配。 2、栈区(StackSpace)此部分的内容由动态链指针连接起来的过程活动记录的链表。其中存放着程序中变量的值,以…
NFA转换DFA的方法:子集构造法
要点:先构造NFA,构造完成后从开始节点分析NFA,方法是给开始节点一个非空符号,比如 a 。从NFA上看能够走到那些节点,这些节点的集合就可称为状态q1。再以q1为基本节点,从NFA图上分析当接收符号b(事实上,也可以…
【编译原理复习】第九章 运行时存储空间组织
第九章 运行时存储空间组织 本章重点: 一、运行时存储器的划分策略: 静态存储分配 栈式存储分配 堆式动态存储 二、活动记录表 1.简单栈式存储分配 2.嵌套过程语言的栈式 目标程序运行时的活动 过程:过程定义是一个说明…
编译型语言和解释型语言的区别
编译型语言和解释型语言之间的区别 最近也是在学习Python的时候,才发现自己还不太理解编译型语言和解释型语言的区别。 今天,自己给总结一波,也算是加深一下印象。 …