3

空白が許可されているか許可されていないかを指定するとき、どの程度明示する必要がありますか? たとえば、これらのルールは次のようになります。

rule lambda
  'lambda' ( '(' params ')' )? block
end

rule params
  # ...
end

rule block
  '{' # ... '}'
end

一致するのに十分である

lambda {
}

基本的に、オプションの空白が表示される可能性があるすべての場所を指定する必要がありますか?

4

1 に答える 1

2

そうです。これらのルールでは、空白をスキップする必要がありますが、たとえば、空白を含む可能性のある文字列を解析する場合、それらを保持したいと考えます。そのため、指定する必要があります。

ただし、treetop を文字列に適用する前に、省略可能な場所から空白を破棄する「迅速かつ汚い」正規表現ベースのアルゴリズムを実行してみてください。それでも、これは文法で空白を指定するよりもはるかに難しいかもしれません。

于 2011-05-25T04:34:45.643 に答える