0

[1,2,3]たとえば、 または などの形式のリストを (とりわけ) 持つ言語のレクサーを作成する必要があります['c','s','q','t']

字句解析段階でリストを照合する必要があるかどうかはよくわかりません。たとえば、

2:[1,2,3];

なれ

NUM(2) COLON LSQBRACKET NUM(1) COMMA NUM(2) COMMA NUM(3) RSQBRACKET SEMI

また

NUM(2) COLON LIST([1,2,3]) SEMI

助けてくれてありがとう。

4

1 に答える 1

1

技術的には、それはあなた次第です。非常に単純なリストリテラルと一致する必要があるだけの場合は、文字列リテラルのように扱うことで解決できるかもしれません。(しかし、それは良いアプローチではないでしょう)。

通常、レクサーは一連の単純なトークンを出力する必要があります。レクサーは比較的単純である必要があります。経験則の1つは、再帰を必要としないことです。

したがって、たとえば、「LIST」トークンを出力するように要求することは逆効果になります。つまり、レクサーはネストされたリストで再帰する必要があります。つまり、ミニパーサーを実装します。その仕事はパーサーに任せてください。

最初のケースでは、より単純なレクサーが作成されます。これは、後のステージのパーサーにも役立ちます。

于 2013-03-08T09:17:40.767 に答える