11

これよりも1行のコメントを解析する簡単な方法はありますか?

comment
    ^ '//' asParser ,
      (#any asParser starLazy: (#newline asParser)) ,
      #newline asParser
                  ==> [ :result | nil "Ignore comments" ]
program
    ^ (comment / instruction) star
        ==> [ :result | N2TProgramNode new
                                setNodes: (result copyWithout: nil) ]

(#newline asParser)と#copyWithout:の繰り返しについては特にわかりません。

Lukasの答えの後、私はもっと簡単な次の解決策を思いつきました。

program
    ^ programEntity star
        ==> [ :result | N2TProgramNode new setNodes: result]

programEntity
    ^ instruction trim: ignorable

ignorable
    ^ comment / #space asParser

comment
    ^ '//' asParser ,  #newline asParser negate star
4

1 に答える 1

6

次のコメント パーサーも同様に機能しないのはなぜですか?

'//' asParser , #newline asParser negate star

また、コメントの解析をtrim:(文法で許可されている場合) で解析する空白に含めることもできます。そのため、常にそれについて考える必要はありません。

于 2013-02-12T17:16:50.683 に答える