Разбор комментариев с помощью PetitParser в Pharo

Есть ли более простой способ разбора однострочных комментариев, чем этот?

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:.

После ответа Лукаса я придумал гораздо более простое решение:

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

programEntity
    ^ instruction trim: ignorable

ignorable
    ^ comment / #space asParser

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

person Damien Cassou    schedule 12.02.2013    source источник


Ответы (1)


Почему не работает следующий анализатор комментариев?

'//' asParser , #newline asParser negate star

Также вы можете захотеть включить синтаксический анализ комментариев в синтаксический анализ пробелов с помощью trim: (если это позволяет грамматика), чтобы вам не приходилось думать об этом все время.

person Lukas Renggli    schedule 12.02.2013