eval5 se basa mecanografiado JavaScript intérprete escrito en apoyo del 100% para la sintaxis ES5.
Dirección del proyecto: https://github.com/bplok20010/eval5
escenarios de uso
- entorno de navegador requiere JavaScript entorno de ejecución de caja de arena guión
- control de la ejecución de código largo
- No es compatible con
eval
Function
el entorno de ejecución de JavaScript: carta applet de micro - Estudio / aprendizaje
instalar
npm install --save eval5
uso
import { Interpreter } from 'eval5';
const ctx = {
console,
hello(){
console.log('hello eval5')
}
}
var interpreter = new Interpreter(ctx, {
timeout: 1000
});
var result = interpreter.evaluate(`
hello();
function sum(a, b) {
return a + b;
}
sum(100,2 00);
`)
console.log(result); // 300
eval5 es6 sintaxis no es compatible, puede primera ES6 o mecanografiado a su vez en ES5
principio
- eval5 compilado desde el primer árbol de sintaxis abstracta estructura de árbol de código fuente (AST).
árbol de sintaxis abstracta por diferentes nodos, cada nodo identifica el tipo de declaraciones o expresiones diferentes, por ejemplo: el árbol de sintaxis abstracta 1 + 1{ "type": "Program", "body": [ { "type": "ExpressionStatement", "expression": { "type": "BinaryExpression", "operator": "+", "left": { "type": "Literal", "value": 1, "raw": "1" }, "right": { "type": "Literal", "value": 1, "raw": "1" } } } ], "sourceType": "script" }
- Dependiendo del tipo de módulo de procesamiento de nodo, y escribir el resultado final. Por ejemplo: 1 + 1 según el árbol de sintaxis, podemos escribir sobre el código del intérprete:
function handleBinaryExpression(node) { switch( node.operator ) { case '+': return node.left.value + node.right.value; case '-': return node.left.value - node.right.value; } }
Ejemplos
Los siguientes son ejemplos de los resultados analíticos echarts4: