在Pharo解析PetitParser的评论

Dam*_*sou 10 smalltalk pharo petitparser

是否有更简单的方法来解析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) ]
Run Code Online (Sandbox Code Playgroud)

我特别不确定(#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
Run Code Online (Sandbox Code Playgroud)

Luk*_*gli 6

为什么下面的注释解析器也不能正常工作?

'//' asParser , #newline asParser negate star
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望将注释解析包含在解析的空白区域中trim:(如果语法允许),因此您不必一直考虑它.