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