我的语法非常简单。基本上它是由块组成的,每个块都是
以&
和一些名称开头,并向下延伸到下一个或结尾
的文件。此外,还有两种评论:单行评论,
从*
到行尾,以及/* */
中包含的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|
||
有几个问题:
任何想法如何解决这个问题?或者一些替代python包来解析这种文件?