-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 回答