2016-08-19 12 views
1

Node.jsで非常にプリミティブなオンラインインタープリタ/コンパイラを作成していますが、経験のために複数の言語が用意されています。コード。Eval()でエラーが発生するJavaScriptの構文が完全に

ユーザが投稿したとき、私は入力を受け取り、それを少しエスケープし、コマンドラインに直接送ります(恐ろしい練習ですが、私は後で新しいシステムに移ります直接CMD)これは二重引用符と\ n、\ rなどをエスケープします。

入力時に、私はchild_process.execコマンドでそれを(はい、私はコールバックを与えていますが、それはかなり長いものです。 tは考えるJSを扱うビルダーは一行だけ持って

let parentResults = cp.exec(`node ./builders/${this.builder}.js "${this.escapedCode}"`); 
// First parameter represents the builder to run the user input with 
// and escaped code is self-explanatory 

)書き込む必要がある:

を今
eval(process.argv[2]); // Already somewhat-escaped code 

、私は

function foo(x) { 
    console.log(x); 
} 

foo(5); 

ような何かを書く私は5のコンソールで正しい出力を取得します。

しかし、私は

let foo = function(x) { 
    console.log(x); 
} 

foo(5); 

のような何かをするとき、私は私が同様に矢印構文を使用する場合、同じことが起こる

console.log(x); 
^

SyntaxError: Unexpected identifier 

を言って、エラーを取得します。私はそれを上回っているかもしれない何か手がかりがありません。任意のアイデアや助け?

答えて

3

の後に;が見つからないという問題があると思います。通常、javascriptが宣言の末尾に\nを解釈するので問題はありませんが、あなたは\nを削除していると言いました。これが失敗する理由です。

+0

スチュアートの編集の前にコードの失敗に関するあなたの答えがより良い説明を与えたと感じたので、最良の答えとして選ばれました。 –

2

2番目の例では、セミコロンが足りないセミコロンがあります。それは次のようになります。

let foo = function(x) { 
    console.log(x); 
}; 

foo(5); 

あなたのビルダーは、そうでない場合はJavascriptをセミコロンの不在に対処できるようになる改行文字を削除しているようです。 (jsがセミコロンを自動的に挿入できる時間の詳細については、hereを参照してください)

+0

私はそれが間違いやすいかもしれないとは思えませんでした。ありがとう! –

関連する問題