Игнорирование комментариев в стиле C в синтаксическом анализаторе Scala - PullRequest
9 голосов
/ 10 мая 2011

Какой самый простой способ заставить мой парсер уважать (игнорировать) комментарии в стиле Си. Меня интересуют оба типа комментариев, хотя также приветствуется решение только для одного типа.

В настоящее время я просто расширяю JavaTokenParsers.

1 Ответ

11 голосов
/ 10 мая 2011

Вы можете использовать простое регулярное выражение, если вы не вкладываете комментарии.Поместите это внутрь 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)
...