大數據王小皮 -
【編譯原理】Antlr 入門使用
前面文章我們學習了編譯器前端的詞法和語法分析工具,本篇我們來看看如何藉助 Antlr 工具,快速生成詞法和語法分析代碼。
一、安裝
mac 環境:
1)安裝
brew install antlr
2)配置 classpath
(把 Antlr 的 JAR 文件設置到 CLASSPATH 環境變量中,以便順利編譯所生成的 Java 源代碼。)
vi ~/.bash_profile
#
編譯原理
大數據王小皮 -
【編譯原理】手工打造語法分析器
重點:
語法分析的原理
遞歸下降算法(Recursive Descent Parsing)
上下文無關文法(Context-free Grammar,CFG)
關鍵點:
左遞歸問題
深度遍歷求值 - 後續遍歷
上一篇「詞法分析器」將字符串拆分為了一個一個的 token。
本篇我們將 token 變成語法樹。
一、遞歸下降算法
還是這個例子 int age = 45
我
編譯原理
大數據王小皮 -
【編譯原理】手工打造詞法分析器
難點:
如何拆詞?如何定義分隔符?
匹配的優先級是什麼?
關鍵點:
有限自動機
元素拆分
解析 age = 45
為了入門字詞是如何拆分識別的,我們舉一個最簡單的例子age = 45
只有三種類型:標識符(age)、大於號(GE)、數字字面量(IntLiteral)
使用空格分隔不同的元素
思路:
從左到右依次讀取字符串
使用有限自動機,根據讀到的字符進行狀態轉換,狀
編譯原理
大數據王小皮 -
Mac 安裝多版本 protoc / protobuf
一、單版本安裝
# 1) brew安裝
brew install protobuf
# 查看安裝目錄
$ which protoc
/opt/homebrew/bin/protoc
# 2) 配置環境變量
vim ~/.zshrc
# protoc (for hadoop)
export PROTOC="/opt/homebrew/bin/protoc"
source ~/.zsh
protobuf
,
macos
大數據王小皮 -
【Java基礎】HashMap 源碼探究
經常使用 Java 的 HashMap,但你有了解過其內部的實現原理麼?數據是如何存儲的?哈希衝突是如何處理的?
本篇文章將帶你深入源碼探究 HashMap 的實現原理。
文檔註釋
HashMap 是 Map 接口的實現類,實現了所有可選的操作,並且允許 null key 和 null value。(可以簡單的理解與 HashTable 功能相同,除了它是不同步的,以及支持空值。)
存
hashmap
,
算法
,
JAVA
大數據王小皮 -
【Java基礎】NIO 初步瞭解
NIO(Non-blocking I/O,在 Java 領域,也稱為 New I/O),是一種同步非阻塞的I/O模型,也是I/O多路複用的基礎。那和普通 IO 有什麼區別呢?
一、概述
NIO 是從 Java 1.4 版本開始引入的一個新的 IO API,NIO 支持面向緩衝區的、基於通道的 IO 操作。
原來的 IO 是阻塞式 IO,與 NIO 的對比:
IO
NI
JAVA
,
nio