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

目录

  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…

转载于:https://juejin.im/post/5b64103c6fb9a04fe370d54d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值