摘要:在之前的章節(jié)第章從零開始寫個(gè)編譯器吧開始寫詞法分析器中我有說,我將函數(shù)設(shè)計(jì)成主動(dòng)調(diào)用的形式,而則是被動(dòng)調(diào)用的形式。接下來本系列將進(jìn)入編寫語法分析器的階段,不過在此之前,我將抽出一點(diǎn)時(shí)間介紹一下語言本身。
上周周末旅游去了,就沒更新了,雖然回到海拔0m的地區(qū),不過目前似乎還在缺氧,所以本次就少更點(diǎn)吧。
這章將結(jié)束詞法分析的部分。
在之前的章節(jié)(第7章從零開始寫個(gè)編譯器吧 - 開始寫詞法分析器(1))中我有說,我將 readChar(char c) 函數(shù)設(shè)計(jì)成主動(dòng)調(diào)用的形式,而 read() 則是被動(dòng)調(diào)用的形式。
那好,現(xiàn)在讓我們來填寫 read() 函數(shù)的 TODO 部分吧。首先,還得把構(gòu)造函數(shù)寫完。
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 ? "