eval5: interprète écrit tapuscrit JavaScript

eval5 est basé JavaScript tapuscrit interprète écrit en soutien à 100% pour la syntaxe ES5.

Adresse du projet: https://github.com/bplok20010/eval5

Les scénarios d'utilisation

  • l'environnement du navigateur nécessite environnement sandbox d'exécution de script JavaScript
  • le contrôle de l'exécution de code à long
  • Il ne supporte pas eval Functionl'environnement d'exécution JavaScript: applet micro lettre
  • Etude / apprentissage

installer

npm install --save eval5

utilisation

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 syntaxe ES6 est pas pris en charge, vous pouvez d'abord ES6 ou tapuscrit se transformer en ES5

principe

  1. eval5 première compilée à partir de la structure d'arborescence de code source arbre de syntaxe abstraite (AST).
    arbre de syntaxe abstraite par différents noeuds, chaque noeud identifie le type de déclarations ou d' expressions différentes, par exemple: l'arbre de syntaxe abstraite 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"
    }
  2. En fonction du type du module de traitement de noeud, et pour écrire le résultat final. Par exemple: 1 + 1 selon l'arbre de syntaxe, on peut écrire sur le code interprète:
    function handleBinaryExpression(node) {
    switch( node.operator ) {
        case '+':
            return node.left.value + node.right.value;
        case '-':
            return node.left.value - node.right.value;
    }
    }

eval5: interprète écrit tapuscrit JavaScript

Exemples

expérience en ligne

D'autres exemples

Voici des exemples de résultats analytiques echarts4:
eval5: interprète écrit tapuscrit JavaScript

Je suppose que tu aimes

Origine blog.51cto.com/7453775/2484869
conseillé
Classement