diff options
| author | krasimir <krasimir@chalmers.se> | 2010-01-07 10:36:16 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2010-01-07 10:36:16 +0000 |
| commit | 5be5ee1ccd0bcd41263c94882104499e9a765ae3 (patch) | |
| tree | 23ef06efd59e8493f0f1a681c436c80eb33751cb /src/runtime/javascript | |
| parent | 0349228ceb16049c03c3c98c3fb8c66331368ce1 (diff) | |
better tokenizer in the JavaScript runtime
Diffstat (limited to 'src/runtime/javascript')
| -rw-r--r-- | src/runtime/javascript/gflib.js | 42 |
1 files changed, 37 insertions, 5 deletions
diff --git a/src/runtime/javascript/gflib.js b/src/runtime/javascript/gflib.js index fcdb27519..6fb937407 100644 --- a/src/runtime/javascript/gflib.js +++ b/src/runtime/javascript/gflib.js @@ -448,12 +448,44 @@ Parser.prototype.showRules = function () { } return ruleStr.join(""); }; +Parser.prototype.tokenize = function (string) { + var inToken = false; + var start, end; + var tokens = new Array(); + + for (var i = 0; i < string.length; i++) { + if ( string.charAt(i) == ' ' // space + || string.charAt(i) == '\f' // form feed + || string.charAt(i) == '\n' // newline + || string.charAt(i) == '\r' // return + || string.charAt(i) == '\t' // horizontal tab + || string.charAt(i) == '\v' // vertical tab + || string.charAt(i) == String.fromCharCode(160) // + ) { + if (inToken) { + end = i-1; + inToken = false; + + tokens.push(string.substr(start,end-start+1)); + } + } else { + if (!inToken) { + start = i; + inToken = true; + } + } + } + + if (inToken) { + end = i-1; + inToken = false; + + tokens.push(string.substr(start,end-start+1)); + } + return tokens; +}; Parser.prototype.parseString = function (string, cat) { - var tokens = string.split(" "); - // remove empty tokens - for (var i = tokens.length - 1; i >= 0; i--) { - if (tokens[i] == "") { tokens.splice(i, 1); } - } + var tokens = this.tokenize(string); var ps = new ParseState(this, cat); for (var i in tokens) { |
