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.
I'm currently simply extending JavaTokenParsers.
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)
来源:https://stackoverflow.com/questions/5952720/ignoring-c-style-comments-in-a-scala-combinator-parser