pyparsing 中的注释

Jel*_*lby 5 python pyparsing

我有一个非常简单的语法。基本上它由块组成,每个块都以一个&名称开头,并向下延伸到下一个或文件末尾。此外,还有两种注释:单行注释,从 a*到行尾,以及 C 风格的注释,包含在/* */. 注释也可以在块内。到目前为止我的尝试:

#!/usr/bin/env python
from pyparsing import *

NL = Suppress( LineEnd() )
restOfLineNL = restOfLine + NL

LineComment = Literal('*') + restOfLineNL
BlockComment = nestedExpr('/*', '*/')
Comment = BlockComment | LineComment

ModuleName = LineStart() + Word( '&', alphanums + '_', min=2 ) + NL
Module = ModuleName + SkipTo( StringEnd() | ModuleName, include=False)
Grammar = ZeroOrMore( Module )
Grammar.ignore(Comment)

result = Grammar.parseString('''
&keyword1

*comment

&keyword2
arbitrary lines
* with comments interspersed
possibly empty

/*
&keyword3
c-style comments
are allowed too
*/

&keyword4

''', parseAll=False)

for line in result:
  print('|'+line.rstrip()+'|')
Run Code Online (Sandbox Code Playgroud)

这导致:

|&keyword1|
||
|&keyword2|
|arbitrary lines
* with comments interspersed
possibly empty

/|
|&keyword3|
|c-style comments
are allowed too|
|&keyword4|
||
Run Code Online (Sandbox Code Playgroud)

这有几个问题:

  1. &keyword2 中的注释不会被删除。
  2. &keyword3 周围的 C 样式注释不会被删除。

任何想法如何解决这一问题?或者一些替代的python包来解析这种文件?