Ignoring C-style comments in a Scala combinator parser

后端 未结 1 394
旧巷少年郎
旧巷少年郎 2021-02-06 02:38

What is the most simple way to make my parser respect (ignore) C-style comments. I\'m interested in both comment types, though a solution for only one type is also welcome.

1条回答
  •  闹比i
    闹比i (楼主)
    2021-02-06 02:50

    You can use a simple regular expression, as long as you don't nest comments. Put it inside whiteSpace:

    scala> object T extends JavaTokenParsers {
         |    protected override val whiteSpace = """(\s|//.*|(?m)/\*(\*(?!/)|[^*])*\*/)+""".r
         |    def simpleParser = ident+
         | }
    defined module T
    
    scala> val testString = """ident // comment to the end of line
         | another ident /* start comment
         | end comment */ final ident"""
    testString: java.lang.String = 
    ident // comment to the end of line
    another ident /* start comment
    end comment */ final ident
    
    scala> T.parseAll(T.simpleParser, testString)
    res0: T.ParseResult[List[String]] = [3.27] parsed: List(ident, another, ident, final, ident)
    

    0 讨论(0)
提交回复
热议问题