Ни в одном из выражений xxxStyleComment
, определенных в pyparsing, нет ничего, что заставляло бы их игнорировать. Они здесь для удобства, тем более, что в некоторых форматах комментариев легко ошибиться. Они не будут проигнорированы, если вы не вызовете метод ignore
для своей более крупной грамматики, например:
cHeaderParser.ignore(cStyleComment)
(где cHeaderParser
может быть чем-то, что вы написали для чтения файлов .h, например, для извлечения информации об API.)
И наличие встроенного обратного вызова обработчика pyparsing, просто используйте cStyleComment.setParseAction(commentHandler)
. Pyparsing может обрабатывать действия синтаксического анализа с любой из этих сигнатур:
def commentHandler(inputString, locn, tokens):
def commentHandler(locn, tokens):
def commentHandler(tokens):
def commentHandler():
Если ваш commentHandler возвращает строку или список строк или новый ParseResults, они будут использоваться для замены входных токенов — если он возвращает None или опускает оператор return, то используется объект tokens. Вы также можете изменить объект маркеров на месте (например, добавить новые имена результатов).
Таким образом, вы можете написать что-то вроде этого, чтобы ваши комментарии были прописными:
def commentHandler(tokens):
return tokens[0].upper()
cStyleComment.setParseAction(commentHandler)
(такое простое действие синтаксического анализа можно было бы даже записать cStyleComment.setParseAction(lambda t:t[0].upper())
)
При написании подобного преобразования синтаксического анализа можно было бы использовать transformString
, а не parseString
,
print cStyleComment.transformString(source)
Это напечатает исходный код, но все комментарии будут в верхнем регистре.
person
PaulMcG
schedule
10.02.2012