Как разобрать комментарии C ++ с lark? - PullRequest
0 голосов
/ 10 марта 2020

Как мне написать правило для разбора комментариев C ++ в одной строке или после другого кода?

Я перепробовал множество комбинаций, последняя из которых:

?comment: "//" /[^\n]*/ NEWLINE

Ответы [ 2 ]

0 голосов
/ 17 марта 2020

У вас была правильная идея, но вы должны определить комментарии как один терминал (т.е. не структуру), для производительности, а также чтобы вы могли их игнорировать.

COMMENT: "//" /[^\n]*/ NEWLINE

%ignore COMMENT

Пример грамматики:

from lark import Lark

g = r"""
!start: "hello"

COMMENT: "//" /[^\n]*/ _NEWLINE
_NEWLINE: "\n"
%ignore COMMENT
%ignore " "
"""

parser = Lark(g)
print(parser.parse("hello // World \n"))
0 голосов
/ 11 марта 2020

Использование: ?comment: /\/\/[^\n]*/

Затем я должен был обработать комментарий как lark.lexer.Token.

...