56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var SyntaxError = require('./SyntaxError');
 | 
						|
 | 
						|
var TAB = 9;
 | 
						|
var N = 10;
 | 
						|
var F = 12;
 | 
						|
var R = 13;
 | 
						|
var SPACE = 32;
 | 
						|
 | 
						|
var Tokenizer = function(str) {
 | 
						|
    this.str = str;
 | 
						|
    this.pos = 0;
 | 
						|
};
 | 
						|
 | 
						|
Tokenizer.prototype = {
 | 
						|
    charCodeAt: function(pos) {
 | 
						|
        return pos < this.str.length ? this.str.charCodeAt(pos) : 0;
 | 
						|
    },
 | 
						|
    charCode: function() {
 | 
						|
        return this.charCodeAt(this.pos);
 | 
						|
    },
 | 
						|
    nextCharCode: function() {
 | 
						|
        return this.charCodeAt(this.pos + 1);
 | 
						|
    },
 | 
						|
    nextNonWsCode: function(pos) {
 | 
						|
        return this.charCodeAt(this.findWsEnd(pos));
 | 
						|
    },
 | 
						|
    findWsEnd: function(pos) {
 | 
						|
        for (; pos < this.str.length; pos++) {
 | 
						|
            var code = this.str.charCodeAt(pos);
 | 
						|
            if (code !== R && code !== N && code !== F && code !== SPACE && code !== TAB) {
 | 
						|
                break;
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        return pos;
 | 
						|
    },
 | 
						|
    substringToPos: function(end) {
 | 
						|
        return this.str.substring(this.pos, this.pos = end);
 | 
						|
    },
 | 
						|
    eat: function(code) {
 | 
						|
        if (this.charCode() !== code) {
 | 
						|
            this.error('Expect `' + String.fromCharCode(code) + '`');
 | 
						|
        }
 | 
						|
 | 
						|
        this.pos++;
 | 
						|
    },
 | 
						|
    peek: function() {
 | 
						|
        return this.pos < this.str.length ? this.str.charAt(this.pos++) : '';
 | 
						|
    },
 | 
						|
    error: function(message) {
 | 
						|
        throw new SyntaxError(message, this.str, this.pos);
 | 
						|
    }
 | 
						|
};
 | 
						|
 | 
						|
module.exports = Tokenizer;
 |