2016-03-25 5 views
1

JavaScript/Nodeで簡単なインタープリタを作成したいと思います。私は、トークンを生成するときには障害があります。示されているようにJavaScriptコードからトークンを取得

var code = 'if (a > 2 && b<4) c = 10;'; 

code.match(/\W+/g) 
// [" (", " > ", " && ", "<", ") ", ";"] 

code.match(/\w+/g) 
// ["if", "a", "2", "b", "4", "elo"] 

W+は私が特殊文字を取得することができますし、w+は私が単語を取得することができます。私は以下のように1列のもの、何かを取得する方法を疑問に思う:示されているように

// ["if", "(", "a", ">", "2", "&&", "b", "<", "4", ")", "c", "=", "10", ";"] 
+1

'\ W +'は非常に素朴ですが、 '/ \ w + | \ W + /'は '(!a + -1)'を生成します。正しいトークン化は '(、!、a、+、-1、)' – georg

+0

regexpでJSを解析することはできません。それは必要な解析能力を持たない。 –

+0

@torazaburoあなたは何か良いことを提案できますか? –

答えて

1

、W +は私が特殊文字を取得することができますし、+ wは私が単語を取得することができます。 私は1つのアレイ、以下のようなものでそれらを取得する方法を疑問に思う:単にこの

code.match(/\w+|\W+/g) 

["if", " (", "a", " > ", "2", " && ", "b", "<", "4", ") ", "c", " = ", "10", ";"] 

として出力を与え、これは、同様のトークンをトリミングしますしてみてください

var tokens = code.match(/\w+|\W+/g).map(function(value){return value.trim()}); 
+0

それはいいです、ありがとうございます。 –

+0

'code'が 'if(!a)'のようなものならば、スタンドアロンの '('と '!'の代わりに '!!)を取得しています。 –

+0

@DamianCzapiewskiで試した文字列を" – gurvinder372

関連する問題