-
函数式编程-01-什么是函数?
本章要点
理解现实世界中的函数
在 Java 中表示函数
使用lambda
使用高阶函数
使用柯里化函数
用函数式接口编程
学习目标
为了理解函数式编程是如何工作的, 我们会使用一些函数式库提供的函数式组件,还有Java 8 标准库里可用的少许组件。
不仅如此,...
2020-06-05 09:42:59 |
Pattern
-
函数式编程-00-什么是函数式编程
回顾
后来又看了一下这本身,感觉过于学术+偏向于数据结构。
所以感觉不如 《java8 函数式编程》适合学习。
序言
学习 java 函数式编程的目的主要有 2 个:
(1)运用下 jdk8
(2)重新理解这种编程思想
实际上很多东西都要反复学些。
准备工作
你可以同时阅读下列内容:
java8 系列学习
本系列学习方式
(1)以书本为核心,做发散式学习。
...
2020-06-05 09:42:59 |
Pattern
-
编译原理系列-06-LR
3.3 LR分析
LL(k)预测法的弱点是它必须预测下一个将被使用的产生式,并且需要向前查看一个字符、LR(k)是一个更有效的分析法,它可以在看见与整个产生式相关的所有输人记号以后再做出决定(多于k个记号)。
LR(k)分别代表由左自右的分析、最右推导、向前查看k个记号。最右推导的使用看起来有些奇怪,怎样用最右推导进行由左向右的分析呢?
图3.18说明了在文法3.1程序中的LR分析过程...
2020-06-04 05:34:28 |
Java
-
编译原理系列-05-Predictive analysis 预测分析
3.2 预测分析
有些文法使用了像递归下降这样的简单算法来简化分析。
实际上,就是把每个文法产生式转换成一个递归函数的子句。
如文法3.11所示。
文法3.11
S→if E then S else S L→end
S→beginS L L→;SL
S→print E
E→num=num
这...
2020-06-04 05:34:28 |
Java
-
编译原理系列-04-parsing 语法分析之上下文无关文法
语法分析
前儿章讨论过了用符号代替正则表达式的简化机制,这种机制在使用时是很方便的:
digits=[0-9] +
sum=(digits“+") *digits
这些正则表达式定义了28+301+9的和。又如:
digits=[0-9] +
Sum=expr“+"expr
expr="("sum") " | digits
所定义的表达形式如下所示:
(109+23)
61
...
2020-06-04 05:34:28 |
Java
-
编译原理系列-03-lexical analysis 词法分析
词法分析
为了把程序从一种语言翻译成另一种语言,编译器必须首先把程序分解并搞清相应的结构和含义,然后再用不同的方式把它们组合起来。编译器的前端负责分析,后端负责组合。
分析的类别
分析包含3类:
词法分析:将输入分解成单独的字或记号;
语法分析:分析程序中短语的结构;
语义分析:分析程序的含义。
词法分析器接收字符流,生成一系列的名字、关键字和标点符号,并舍弃了记号之间的空白符...
2020-06-04 05:34:28 |
Java
-
编译原理系列-02-mini java
mini java
重新写一个 java 时间有限,只能先实现一个核心功能。
所以需要对 java 多一些特性的简化。
文本主要收集一些网上资料,做下简单的整理。
EBNF Grammar for Mini-Java
Goal = MainClass, { ClassDeclaration }, EOF;
MainClass = "class", Identifier, "{", ...
2020-06-04 05:34:28 |
Java
-
编译原理系列-01-概述
概述
本书描述了将编程语言转换成可执行代码的技巧、数据结构以及运算法则。现代编译器是由很多阶段组成的,每一阶段对不同的语言进行操作。依据这样的结构,本的每章中都包含有一个相应的阶段。
为了说明编译语言的过程,本书将以一个简单但很重要的Java子集Mini Java为例。希望读者自己能够完成每一章中相应的阶段,那么在学习完第一部分后,就实现一个编译器。Mini Java很容易进行扩展以支持...
2020-06-04 05:34:28 |
Java