<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 如何使用 JavaScript 實現一門編程語言(3) —— Input stream 這是最簡單的部分。我們將創建一個“流對象”,它提供了從字符串中讀取字符的操作。其中4個方法: - peek() - 返回下一個值,但不從流中移除它。 - next() - 返回下一個值,并將其從流中丟棄。 - eof() - 當且僅當流中沒有更多值時才返回true。 - croak(msg) - throw new Error(msg) 之所以包括最后一個,是因為流可以很容易地跟蹤當前位置(即行/列),這對于顯示錯誤消息很重要。 您可以根據您的需求隨意添加更多的方法在流對象中,但對于我的教程這些就足夠了。 因為流對象主要用來處理字符,所以 next()/ peek() 方法返回的值也是字符(JS沒有char類型,它們是包含一個單一字符的字符串)。 這里是這個對象的完整代碼,我將稱之為“InputStream”。它足夠簡單,理解起來很容易: ``` function InputStream(input) { var pos = 0, line = 1, col = 0; return { next : next, peek : peek, eof : eof, croak : croak, }; function next() { var ch = input.charAt(pos++); if (ch == "\n") line++, col = 0; else col++; return ch; } function peek() { return input.charAt(pos); } function eof() { return peek() == ""; } function croak(msg) { throw new Error(msg + " (" + line + ":" + col + ")"); } } ``` 請注意,它不是標準的通過類創建的對象(通過 new 關鍵字調用)。您只需要通過?`var stream = InputStream(string)`?即可得到流對象。 接下來,我們將在這個對象之上編寫另一個抽象:?[tokenizer](http://annn.me/implement-a-programming-language-4)?。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看