2

操車場アルゴリズムの実装を検討していますが、文字列をトークンに分割するための最良の方法を理解するための支援が必要です。

お気づきの方もいらっしゃると思いますが、アルゴリズムの最初のステップは「トークンの読み取り」です。これは、簡単なことではありません。トークンは、数値、演算子、および親で構成できます。

次のようなことをしている場合:

(5 + 1)

単純なstring.split()は、トークンの配列{"("、 "5"、 "+"、 "1"、 ")"}を提供します。

ただし、次のように複数桁の数字がある場合は、さらに複雑になります。

((2048 * 124)+ 42)

これで、単純なstring.split()はうまくいきません。複数桁の数字が問題です。

レクサーを作成できることは知っていますが、本格的なレクサーを作成せずにこれを行う方法はありますか?

私はこれをJavaScriptで実装しており、可能であればレクサーパスをたどる必要がないようにしたいと思います。「*」、「+」、「-」、「/」の演算子を整数とともに使用します。

4

2 に答える 2

6

正規表現はどうですか?正規表現を簡単に記述して、好きなように分割できます。JSstring.splitメソッドは、パラメーターとして正規表現も受け入れます。

例...(必要なすべての文字を含めるように変更するなど)

/([0-9]+|[*+-\/()])/
于 2009-10-19T18:57:00.493 に答える
3

http://mikesamuel.blogspot.com/2009/05/efficient-parsing-in-javascript.htmlで説明されているように、グローバル一致を使用できます。

基本的に、トークンを説明する1つの正規表現を作成します

/[0-9]+|false|true|\(|\)/g

グローバルに一致するように最後に「g」を付けてから、その一致メソッドを呼び出します

var tokens = myRegex.match(inputString);

配列を取り戻します。

于 2009-10-20T05:21:21.717 に答える