摘要:在之前的章節(jié)第章從零開(kāi)始寫(xiě)個(gè)編譯器吧開(kāi)始寫(xiě)詞法分析器中我有說(shuō),我將函數(shù)設(shè)計(jì)成主動(dòng)調(diào)用的形式,而則是被動(dòng)調(diào)用的形式。接下來(lái)本系列將進(jìn)入編寫(xiě)語(yǔ)法分析器的階段,不過(guò)在此之前,我將抽出一點(diǎn)時(shí)間介紹一下語(yǔ)言本身。
上周周末旅游去了,就沒(méi)更新了,雖然回到海拔0m的地區(qū),不過(guò)目前似乎還在缺氧,所以本次就少更點(diǎn)吧。
這章將結(jié)束詞法分析的部分。
在之前的章節(jié)(第7章從零開(kāi)始寫(xiě)個(gè)編譯器吧 - 開(kāi)始寫(xiě)詞法分析器(1))中我有說(shuō),我將 readChar(char c) 函數(shù)設(shè)計(jì)成主動(dòng)調(diào)用的形式,而 read() 則是被動(dòng)調(diào)用的形式。
那好,現(xiàn)在讓我們來(lái)填寫(xiě) read() 函數(shù)的 TODO 部分吧。首先,還得把構(gòu)造函數(shù)寫(xiě)完。
private final Reader reader; public LexicalAnalysis(Reader reader) { this.reader = reader; this.state = State.Normal; }
之后是 read() 函數(shù)。
private Token endToken = null; Token read() throws IOException, LexicalAnalysisException { if(endToken != null) { return endToken; } while(tokenBuffer.isEmpty()) { int read = reader.read(); char c = (read == -1 ? "