正規表現で何が問題になっているのかを理解するのに大きな問題があります。完了するために、いくつかの背景情報をレイアウトします。
このプログラムは、SIMPLESEMインタープリターを実装することになっています。ここで関係する文法は次のとおりです。
< Expr > ==> < Term > {( + | - ) < Term >}
< Term > ==> < Factor > {( * | / | % ) < Factor >}
< Factor > ==> < Number > | D[< Expr >] | (< Expr >)
< Number > ==> 0 | (1..9){0..9}
の角括弧内の内容を表示するはずのこのコードが提供されました< Factor >
が、機能しませんでした。
Matcher m;
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = parseExpr(m.group(1));
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
expr = m.group(1);
入力例として、私はこれを持っています:
jumpt 5, D[0] == 0
ここ< Factor >
で関係しているのはD[0]
です。上記の関数は、残ったブラケットを処理しないフィードインするため、機能しません。また、機能しないはず0]
です。parseExpr()
だから私はそれを次のように切り替えました:
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = m.group(1);
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
expr = parseExpr(m.group(1));
しかし、これはマッチャー/正規表現のために機能しませんでした。空の文字列が出力されたと思います。だから私はこれを試しましたが、一致するものがないというエラーが表示されます:
(m = Pattern.compile("D\\[(.*)").matcher(expr)).find();
expr = m.group(1);
if(expr.contains("(.*)"))
{
(m = Pattern.compile("\\](.*)").matcher(expr)).find();
}
else
{
(m = Pattern.compile("\\]").matcher(expr)).find();
}
expr = m.group(1);
expr = parseExpr(expr);
最後から2番目の行で範囲外のインデックスを提供します。よろしくお願いします。