文字列 s をトークン化する必要があります。s には、英数字、閉じ括弧と開き括弧、およびハイフンを含めることができます。不明な文字のトークナイザーがある場合は、エラーを吐き出す必要があります。各要素はトークン化する必要があります。
弦aa (b - d)
トークン 1 -> aa
(英数字)
2-> (
(開き括弧)
3-> b
(英数字)
4-> -
(ハイフン)
5-> d
(英数字)
6-> )
(閉じ括弧)
さらに、ハイフンと英数字の前後に ( , ) またはスペース (改行、タブなど) のみを含めることができるという条件があります。
したがってaa(d-b)
、エラーをスローする必要があります。
ここでの私のプロセスは、(上記に関連する) 複数のパターンをコンパイルし、それらをコード (つまり、英数字、ハイフン、closedparen、openparen) と共に保存することでした。
次に、すべての文字列について、パターンのリスト (それぞれに ^ が追加されています) を調べて、一致を試みます。一致が見つかったら、文字列からトークンを削除し、文字列が空になるまでやり直します。
( および ) はトークンであり、見つかった後に文字列から削除されるため、その前に正しい要素を持つ後続の英数字またはハイフンを確認するにはどうすればよいですか。これを行うにはいくつかの複雑な方法があることは知っていますが(以前の一致を保存するなど)、もっと簡単な方法があるかどうか疑問に思っていました。