1 引言 文法用来描述语言的语法规则,所以不仅可以用在编程语言上,也可用在汉语、英语上。 2 精读 我们将一块语法规则称为 产生式,使用 “Left → Right” 表示任意产生式,用 “Left => Righ…
标签:编译原理
JS 完成 JS 引擎 - 二元逻辑运算符的后缀表达式求值
代码修正自我在 javascript中运算符优先级的题目 中的回复 完全的 JS 引擎还需要处置惩罚运算符优先级的题目,这里简化复杂度,人工把表达式转换成后缀表达式再用顺序举行自动求值 重要目标在于演示 JS 引擎表达式…
数数字游戏
数数字游戏:2人交替数数字,从1开始,到21结束,先数到21者获胜。每人每次至少数1个数字,每人每次最多数3个数字。 神话般的结论:谁先数,谁就获胜。 请大家给出游戏破解的秘籍,并进一步探讨以下几种情况: (1)如果是从…
第九章 运行时存储空间的组织与管理
运行时的存储空间结构: 1、堆区(HeapSpace) 此部分的内容由new语句动态产生。从上往下分配。 2、栈区(StackSpace)此部分的内容由动态链指针连接起来的过程活动记录的链表。其中存放着程序中变量的值,以…
【Lua源码分析系列】1. 概述
如题,这是一系列关于Lua的源码分析的文章。分析的重点在编译原理和虚拟机的部分,而不是相关的库的实现部分。写这系列文章,最初是因为想要设计一门编程语言以及它的虚拟机,为此参考现有的优秀的实现。 为何选择Lua? 其实本人…
基于SLR文法,将输入串翻译成三地址代码序列
要求: 输入:(b+c*d)+c*d 输出: t1= c*d t2=b+t1 t3= c*d t4=t2+t3 本次的题目和之前的功能很类似,都是基于SLR文法的,所有代码与之前有很多共同之处。 #include <…
Go 1.8rc3 源代码学习:scanner
前言 scanner package 包含了 golang 词法分析器相关的数据结构和方法,源代码位于 <go-src>/src/go/scanner example_test.go example_test…
【Lua源码分析系列】2.分析思路
很抱歉,这周实在是太忙了。。。不废话,直接进入主题。 引言 所谓的分析思路,无非就是找到程序的入口点,按执行流程一步一步地阅读分析,或者从自己感兴趣的部分入手。这个系列暂时还不是对Lua的全面剖析,只是选取其中一部分来分…
NFA转换DFA的方法:子集构造法
要点:先构造NFA,构造完成后从开始节点分析NFA,方法是给开始节点一个非空符号,比如 a 。从NFA上看能够走到那些节点,这些节点的集合就可称为状态q1。再以q1为基本节点,从NFA图上分析当接收符号b(事实上,也可以…
Go 1.8rc3 源代码学习:parser
前言 parser package 包含了 golang 语法分析相关的数据结构和方法,源代码位于 <go-src>/src/go/parser 之前大概看了点 PHP 和 Ruby 的源代码,感叹 go 确…
使用Scala基于词法单元的解析器定制EBNF范式文法解析
前言 近期在做Oracle迁移到Spark平台的项目上遇到了一些平台公式翻译为SparkSQL(on Hive)的需求,而Spark采用亲妈语言Scala进行开发。下面是个意外,被论文查重了,移步至我的Leanote博客…
三地址码简介
三地址码简介 三地址码(Three Address Code)是一种最常用的中间语言,编译器可以通过它来改进代码转换效率。每个三地址码指令,都可以被分解为一个四元组(4-tuple)的形式:(运算符,操作数1,操作数2,…