用javascript实现一门编程语言-字符输入流

813 阅读1分钟

目录

  1. 用javascript实现一门编程语言-前言
  2. 用javascript实现一门编程语言-语言构想
  3. 用javascript实现一门编程语言-写一个解析器
  4. 用javascript实现一门编程语言-字符输入流

字符输入流

原文中是the character input stream,不知道怎么翻译好,就翻译成字符输入流

我们在这部分将会创建一个stream object,用来提供从字符串读取字符的方法。stream object包含四个方法:

  • peek() -- 读取下一个值
  • next() -- 读取下一个值,并且将这个值从输入流移除
  • eof() -- 当输入流中没用值时,返回true
  • croak(msg) -- 用来抛出错误

为什么将抛出错误的方法croak放到这里,是因为在这里能更简单的来获错误发生的位置,这对于提示错误信息很重要。

你可以根据自己的需要在这里添加任何函数。这四个函数对于我们这个教程已经够用了。

字符输入流是面向字符的,所以next()peek()函数的返回值是一个字符(char类型,因为javascript中没有char类型,所以返回的是长度唯一的string)。

以下是stream object的代码:

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 + ")");
    }
}

原文链接: lisperator.net/pltut/parse…