2017-02-23 7 views
2

現在、1つの言語を解釈して結果を出力するクラスプロジェクトを作成中です。私は、各行があるJavascript switch文が分割文字列で失敗する

ファイルを読み込み、文字列の配列(別名各ライン)を取得するために改行で文書を分割

は、その後、さらににsubdivded、オペレータ、時にはパラメータです。私が持っている問題は、パラメータを持たない演算子にあります。私は私が午前大きな問題があることであるオペレータを読み、

call(){ 
switch(opp) 
{ 
case "lvalue":lvalue(param); break; 
case "rvalue":rvalue(param); break; 
case ":=": set(); break; 
} 
} 

を呼び出すように機能するかを判断するためにswitchステートメントを使用し

lvalue x //this declares a variable x 
rvalue 5 //places the value 5 on the stack 
:= //assign the value 5 to the variable x 

言語の例は次のようになりますswitch文によって ":="の入力が完全にスキップされています。

oppとparamの入力で、各行をスペースで区切って作成しました。 :=は行に他の値を持たないので、分割の結果は単なる1つの項目に過ぎません。私はそれが私の問題がどこから来ているのだろうと思う。

私はこのような私のswitch文に呼び出す

var args=doc[i].split(' '); 
var opp=args[0]; 
var param=args.splice(1,args.length).join(" "); 

call(opp,param); 

私は後にスペースを置いたときに気づい:=入力ファイルで、switch文は、それを読み込みます。だから私はこれが正しく文字列を解析する問題だと確信しています。この問題は、パラメータを持たない他の演算子(問題を解決するスペースもあります)でも発生します。

入力にスペースがあるとは限りません。スイッチのステートメントがオペレータを認識できるようにする必要があります。

おかげ

+0

どのアレイが表示されますか、どのように表示されますか?別のマッチャーとの「トリム」や「スプリット」が役立つかもしれません。 –

+0

":="を使って私の行を分割すると、[":="]という配列が得られます。文字列にスペースや奇形がないように見えます。 –

+0

しかし、空白を追加する前に16進エディタを見ると、 ":="は改行の直後に改行があります。 –

答えて

1

以下の例では、スイッチは、文字列":="上で正常に動作することを示しているので、あなたのarguments配列に問題がなければなりません:

http://codepen.io/DeividasK/pen/xqKNWr

あなたの問題をマッピングすることで解決することができます空白を削除します。これはarray = array.map(item => { return item.trim() })を使用して行うことができます。重要:array.mapは元の配列を変更しませんが、変更された値を持つ新しい配列を返します。

+0

はい、これが役に立ちます。オペランドには見えないものがいくつかあったと思います。 –