rendered paste bodyimport sys
from pyparsing import *
filename = sys.argv[1]
code = file(filename).read()
hlslComment = cppStyleComment
hlslIdentifier = Regex(r'[a-zA-Z_][a-zA-Z0-9_]*')
hlslNumber = Regex(r'[0-9]+(\.[0-9]*f)?')
hlslFile = Forward()
hlslFunctionArgs = Group(hlslIdentifier + hlslIdentifier + Suppress(':') +
hlslIdentifier)
hlslFunctionDefinition = (hlslIdentifier + hlslIdentifier + Suppress('(') +
delimitedList(hlslFunctionArgs) + Suppress(')') + Suppress(':') +
hlslIdentifier)
hlslExpression = Forward()
hlslStatement = Forward()
hlslLine = hlslStatement + Suppress(';')
hlslPass = Keyword('pass') + hlslIdentifier + Suppress('{') + Group(ZeroOrMore(hlslLine)) + Suppress('}')
hlslTechnique = Group(Keyword('technique10') + hlslIdentifier + Suppress('{') + Group(ZeroOrMore(hlslPass)) + Suppress('}'))
hlslAssignment = hlslIdentifier + Keyword('=') + hlslExpression
hlslFunctionCall = hlslIdentifier + Suppress('(') + Group(Optional(delimitedList(hlslExpression))) + Suppress(')')
hlslReturnStatement = Keyword("return") + hlslExpression
hlslExpression << (hlslAssignment | hlslFunctionCall | hlslIdentifier | hlslNumber)
hlslStatement << Group(hlslReturnStatement | hlslExpression)
hlslFunctionBody = Group(ZeroOrMore(hlslLine))
hlslFunction = Group(hlslFunctionDefinition + Suppress('{') + hlslFunctionBody +
Suppress('}'))
hlslBlock = hlslFunction | hlslTechnique
hlslFile << (ZeroOrMore(hlslBlock) + StringEnd())
hlslFile.ignore(hlslComment)
try:
print hlslFile.parseString(code)
except ParseException, pe:
print "Parsing failed"
print pe.markInputline()
print pe.msg