mutants-appfx
Version:
appfx module
137 lines (105 loc) • 3.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _map = require('babel-runtime/core-js/map');
var _map2 = _interopRequireDefault(_map);
var _antlr = require('antlr4');
var _antlr2 = _interopRequireDefault(_antlr);
var _ErrorListener2 = require('antlr4/error/ErrorListener');
var _ExprLexer = require('./ExprLexer');
var _ExprParser = require('./ExprParser');
var _ExprExecutor = require('./ExprExecutor');
var _ExprExecutor2 = _interopRequireDefault(_ExprExecutor);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var log = console.log;
var cache = new _map2.default();
var ExprErrorListener = function (_ErrorListener) {
(0, _inherits3.default)(ExprErrorListener, _ErrorListener);
function ExprErrorListener() {
(0, _classCallCheck3.default)(this, ExprErrorListener);
return (0, _possibleConstructorReturn3.default)(this, (ExprErrorListener.__proto__ || (0, _getPrototypeOf2.default)(ExprErrorListener)).apply(this, arguments));
}
(0, _createClass3.default)(ExprErrorListener, [{
key: 'reset',
value: function reset() {
this.error = false;
}
}, {
key: 'syntaxError',
value: function syntaxError(recognizer, offendingSymbol, line, column, msg) {
// if (typeof __DEV__ !== 'undefined' && __DEV__) {
// log("line " + line + ":" + column + " " + msg);
// }
this.error = true;
}
}]);
return ExprErrorListener;
}(_ErrorListener2.ErrorListener);
var errorHandler = new ExprErrorListener();
var Expression = function () {
function Expression(str) {
(0, _classCallCheck3.default)(this, Expression);
this.str = str;
if (typeof str === 'string' && !!str) {
// constString 暂时词法冲突
var txt = str.trim();
if (txt.startsWith('=')) {
this.str = txt.substr(1);
return;
}
if (cache.has(str)) {
this.tree = cache.get(str);
} else {
errorHandler.reset();
var chars = new _antlr2.default.InputStream(str);
var lexer = new _ExprLexer.ExprLexer(chars);
lexer.removeErrorListeners();
lexer.addErrorListener(errorHandler);
var tokens = new _antlr2.default.CommonTokenStream(lexer);
var parser = new _ExprParser.ExprParser(tokens);
// parser._errHandler = new ExceptionErrorStrategy();
parser.removeErrorListeners();
parser.addErrorListener(errorHandler);
parser.buildParseTrees = true;
var tree = parser.exec();
if (errorHandler.error) {
tree = null;
}
this.tree = tree;
cache.set(str, tree);
}
}
}
(0, _createClass3.default)(Expression, [{
key: 'toString',
value: function toString() {
return this.str;
}
}, {
key: 'exec',
value: function exec(scope) {
if (this.tree) {
var executor = new _ExprExecutor2.default(scope);
_antlr2.default.tree.ParseTreeWalker.DEFAULT.walk(executor, this.tree);
return executor.result;
} else {
return this.str;
}
}
}]);
return Expression;
}();
exports.default = Expression;
//# sourceMappingURL=index.js.map