-1

私の入力では、次のように、区切り記号で区切られていない文字のストリームがあります。

input = "150001"

位置と長さに基づいてトークン化するパーサー (JISON を使用) を作成したいのですが、これが私のトークンである必要があります。

15 - system id (first 2 numbers)
0001 - order num (4 numbers after)

どうすればこれを達成できるかアドバイスをいただけますか。次のようにトークンを追加しようとしました。

    %lex
    %%

     [0-9]{2}    return "SYSTEM_ID"
     [0-9]{4}    return "ORDER_NUM"

   \lex
   %%

しかし、予想どおり、これは機能していません:)

文字の長さで解析するこの種の入力を解析する方法はありますか?

4

1 に答える 1

1

状態宣言を使用して単純なパーサーを作成し、それらの各ルールに状態を割り当てることができます。JISON のドキュメントを参照すると、次のように変更されます (識別子または "=" に対して何もしないため、レクサーはまだ不完全であることに注意してください)。

%lex 
%s system_id order_num
%%
 /* some more logic is needed to accept identifier, then "=", each
    with its own state, and beginning "system_id" state.
  */
 <system_id>[0-9]{2}    this.begin("order_num"); return "SYSTEM_ID"
 <order_num>[0-9]{4}    this.begin('INITIAL'); return "ORDER_NUM"

\lex %%

于 2015-05-15T21:01:24.610 に答える