Subversion Repositories JSX

Compare Revisions

Last modification

Ignore whitespace Rev 587 → Rev 588

/trunk/string/parser/ecmascript.js
0,0 → 1,106
/**
* @namespace
*/
jsx.string.parser.ecmascript = (function () {
var _jsx_string_parser = jsx.string.parser;
var _Lexer = _jsx_string_parser.Lexer;
var _Parser = _jsx_string_parser.Parser;
var _Token = _jsx_string_parser.Token;
var _TokenList = _jsx_string_parser.TokenList;
 
var _NewlineToken = (
function jsx_string_parser_ecmascript_NewlineToken () {
jsx_string_parser_ecmascript_NewlineToken._super.call(
this, /\r?\n|\r/, "NEWLINE");
}
).extend(_Token, {
/**
* @memberOf jsx.string.parser.ecmascript.NewlineToken.prototype
*/
parse: function (parser) {
parser.incLine();
return true;
}
});
 
var _BraceToken = (
/**
* @constructor
*/
function jsx_string_parser_ecmascript_BraceToken () {
jsx_string_parser_ecmascript_BraceToken._super.call(this, /[{}]/, "BRACE");
}
).extend(_Token, {
/**
* @memberOf jsx.string.parser.ecmascript.BraceToken.prototype
*/
parse: function (parser) {
switch (this.match)
{
case "}": parser.incLevel(); break;
case "{": parser.decLevel(); break;
}
 
console.log(parser.getLevel());
 
return true;
}
});
 
return {
/**
* @memberOf jsx.string.parser.ecmascript
* @version
*/
version: "$Rev$",
 
Parser: (
/**
* @constructor
*/
function jsx_string_parser_ecmascript_Parser () {
var lexer = new _Lexer(this.tokens);
lexer.longestMatchWins = true;
 
jsx_string_parser_ecmascript_Parser._super.call(this, lexer);
 
var _line = 1;
var _level = 0;
 
this.getLine = function () {
return _line;
};
 
this.incLine = function () {
++_line;
};
 
this.getLevel = function () {
return _level;
};
 
this.incLevel = function () {
++_level;
};
 
this.decLevel = function () {
--_level;
};
}
).extend(_Parser, {
longestMatchWins: true,
 
/**
* @memberOf jsx.string.parser.ecmascript.Parser.prototype
*/
tokens: new _TokenList(
new _NewlineToken(),
new _Token(/"(?:[^\\"\n\r]|\\[\s\S])*"|'(?:[^\\'\n\r]|\\[\s\S])*'/, "STRING"),
new _Token(/\/\*(?:[^*]|\*[^\/])*\*\//, "COMMENT_MULTI"),
new _Token(/^\s*\/\/.*/m, "COMMENT_SINGLE"),
new _Token(/\/([^\/\\\n\r]|\\[^\n\r])+\//, "REGEXP"),
new _BraceToken()
)
})
};
}());