pyparsing中的评论

时间:2015-06-01 15:44:54

标签: python pyparsing

我的语法非常简单。基本上它是由块组成的,每个块都是 以&和一些名称开头,并向下延伸到下一个或结尾 的文件。此外,还有两种评论:单行评论, 从*到行尾,以及/* */中包含的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()+'|')

这导致:

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

/|
|&keyword3|
|c-style comments
are allowed too|
|&keyword4|
||

有几个问题:

  1. 未删除& keyword2中的评论。
  2. 不删除围绕& keyword3的C风格评论。
  3. 任何想法如何解决这个问题?或者一些替代python包来解析这种文件?

0 个答案:

没有答案