All pastes #394290 Raw Edit

Cody Brocious

public python v1 · immutable
·published 2007-03-14 05:22 UTC
rendered paste body
import sysfrom pyparsing import *ParserElement.enablePackrat()def DelimitedList(expr, delim=',', combine=False):    return delimitedList(expr, delim=delim, combine=combine) + Optional(Suppress(delim))filename = sys.argv[1]code = file(filename).read()hlslFile = Forward()hlslStructDefinition = Forward()hlslExpression = Forward()hlslNoArithmeticExpr = Forward()hlslNoComparisonExpr = Forward()hlslNoLogicalExpr = Forward()hlslNoTernaryExpr = Forward()hlslStatement = Forward()hlslFunctionBody = Forward()hlslFunctionLine = Forward()hlslLine = Forward()hlslComment = cppStyleComment hlslIdentifier = Regex(r'[a-zA-Z_][a-zA-Z0-9_]*')hlslHexNumber = Regex(r'0x[0-9a-fA-F]+')hlslNumber = hlslHexNumber ^ Regex(r'-?[0-9]+(\.[0-9]*f?)?')hlslString = QuotedString(quoteChar='"', escChar='\\', multiline=True)hlslSubscript = Suppress('[') + hlslExpression + Suppress(']')hlslObjectReference = Suppress('.') + hlslExpressionhlslOperand = Group(hlslIdentifier + ZeroOrMore(hlslObjectReference ^ hlslSubscript))hlslArray = Group(Suppress('{') + DelimitedList(hlslExpression) + Suppress('}'))hlslGroup = Suppress('(') + hlslExpression + Suppress(')')hlslVariableDecl = \Group(    OneOrMore(hlslIdentifier) +    Optional(Suppress('<') + hlslIdentifier + Suppress('>')) +     hlslIdentifier +     Optional(hlslSubscript) +     Optional(Group(Suppress(':') + hlslIdentifier)))hlslAssignmentOp = Group(Optional(Regex(r'[\-+/*%\^&^]')) + Suppress('='))hlslAssignment = (hlslVariableDecl ^ hlslOperand ^ hlslIdentifier) + hlslAssignmentOp + hlslExpressionhlslStructMember = \Group(    OneOrMore(hlslIdentifier) +     hlslIdentifier +     ZeroOrMore(hlslSubscript) +     Optional(Suppress(':') + hlslIdentifier) +     Optional(Suppress('=') + hlslExpression) +     Suppress(';'))hlslStructDefinition << \(    Keyword('struct') + hlslIdentifier +     Suppress('{') +     ZeroOrMore(hlslStructMember) +     Suppress('}') + Suppress(';'))hlslFunctionArgs = \Group(    OneOrMore(hlslIdentifier) +     Optional(hlslSubscript) +     Optional(Suppress('<') + hlslIdentifier + Suppress('>')) +     Optional(hlslIdentifier) +     Optional(Suppress(':') + hlslIdentifier))hlslMaxVertex = Group(Suppress('[') + Keyword('maxvertexcount') + Suppress('(') + hlslNumber + Suppress(')') + Suppress(']'))hlslFunctionDefinition = \(    Optional(hlslMaxVertex) +     OneOrMore(hlslIdentifier) +     Suppress('(') + Optional(DelimitedList(hlslFunctionArgs)) + Suppress(')') +     Optional(Suppress(':') + hlslIdentifier))hlslStateDecl = \Group(    hlslIdentifier + Optional(hlslSubscript) + Suppress('=') +     (hlslIdentifier ^ hlslNumber) +     Suppress(';'))hlslSamplerState = \Group(    Keyword('SamplerState') + hlslIdentifier +     Suppress('{') +     ZeroOrMore(hlslStateDecl) +     Suppress('}') + Suppress(';'))hlslBlendState = \Group(    Keyword('BlendState') + hlslIdentifier +     Suppress('{') +     ZeroOrMore(hlslStateDecl) +     Suppress('}') + Suppress(';'))hlslDepthStencilState = \Group(    Keyword('DepthStencilState') + hlslIdentifier +     Suppress('{') +     ZeroOrMore(hlslStateDecl) +     Suppress('}') + Suppress(';'))hlslRasterizerState = \Group(    Keyword('RasterizerState') + hlslIdentifier +     Suppress('{') +     ZeroOrMore(hlslStateDecl) +     Suppress('}') + Suppress(';'))hlslCBuffer = \Group(    Keyword('cbuffer') + hlslIdentifier +    Suppress('{') +     ZeroOrMore((hlslAssignment ^ hlslVariableDecl) + Suppress(';')) +     Suppress('}') + Suppress(';'))hlslForLoop = \Group(    Optional(Suppress('[') + Keyword('unroll') + Suppress(']')) +    Keyword('for') + Suppress('(') +    hlslExpression + Suppress(';') +     hlslExpression + Suppress(';') +     hlslExpression + Suppress(')') +     Optional(        (            Suppress('{') +             hlslFunctionBody +             Suppress('}')        ) |         hlslFunctionLine    ))hlslIfStatement = \Group(    Optional(Keyword('branch') ^ Keyword('flatten')) +     Keyword('if') + Suppress('(') + hlslExpression + Suppress(')') +    (hlslFunctionLine | (Suppress('{') + hlslFunctionBody + Suppress('}'))) +    Optional(        Suppress('else') +         ((Suppress('{') + hlslFunctionBody + Suppress('}')) ^ hlslFunctionLine)    ))hlslPass = Keyword('pass') + hlslIdentifier + Suppress('{') + Group(ZeroOrMore(hlslLine)) + Suppress('}')hlslTechnique = Group(Keyword('technique10') + hlslIdentifier + Suppress('{') + Group(ZeroOrMore(hlslPass)) + Suppress('}') + Optional(Suppress(';')))hlslFunctionCall = hlslOperand + Suppress('(') + Group(Optional(DelimitedList(hlslExpression))) + Suppress(')')hlslReturnStatement = Keyword('return') + Optional(hlslExpression)hlslArithmeticOp = Regex(r'[\-+/*%\^&|]')hlslArithmetic = hlslNoArithmeticExpr + hlslArithmeticOp + hlslExpressionhlslPreIncDec = (Literal('--') ^ Literal('++')) + (hlslOperand ^ hlslIdentifier)hlslPostIncDec = (hlslOperand ^ hlslIdentifier) + (Literal('--') ^ Literal('++'))hlslNegative = Literal('-') + hlslExpressionhlslNot = Literal('!') + hlslExpressionhlslUnary = hlslPreIncDec ^ hlslPostIncDec ^ hlslNegative ^ hlslNothlslComparison = hlslNoComparisonExpr + Regex(r'(<=|<|>=|>|==|!=)') + hlslExpressionhlslLogicalAndOr = hlslNoLogicalExpr + Regex(r'(\|\||&&)') + hlslExpressionhlslTernary = hlslNoTernaryExpr + Suppress('?') + hlslExpression + ':' + hlslExpressionhlslCast = Suppress('(') + hlslIdentifier + Suppress(')') + FollowedBy(hlslExpression)hlslNoArithmeticExpr << \Group(    Optional(hlslCast) +     (        hlslAssignment ^         hlslFunctionCall ^         hlslOperand ^         hlslIdentifier ^         hlslNumber ^        hlslUnary ^        hlslArray ^        hlslGroup ^        hlslString    ))hlslNoComparisonExpr << \Group(    Optional(hlslCast) +     (        hlslAssignment ^         hlslFunctionCall ^         hlslOperand ^         hlslIdentifier ^         hlslNumber ^         hlslArithmetic ^        hlslUnary ^        hlslArray ^        hlslGroup ^        hlslString    ))hlslNoLogicalExpr << \Group(    Optional(hlslCast) +     (        hlslAssignment ^         hlslFunctionCall ^         hlslOperand ^         hlslIdentifier ^         hlslNumber ^         hlslArithmetic ^         hlslUnary ^         hlslComparison ^        hlslArray ^        hlslGroup ^        hlslString    ))hlslNoTernaryExpr << \Group(    Optional(hlslCast) +     (        hlslAssignment ^         hlslFunctionCall ^         hlslOperand ^         hlslIdentifier ^         hlslNumber ^         hlslArithmetic ^         hlslUnary ^         hlslComparison ^        hlslArray ^        hlslGroup ^        hlslLogicalAndOr ^        hlslString    ))hlslExpression << \Group(    Optional(hlslCast) +     (        hlslAssignment ^         hlslFunctionCall ^         hlslOperand ^         hlslIdentifier ^         hlslNumber ^         hlslArithmetic ^         hlslUnary ^         hlslComparison ^        hlslArray ^        hlslGroup ^        hlslLogicalAndOr ^        hlslTernary ^        hlslString    ))hlslStatement << Group(hlslReturnStatement ^ hlslVariableDecl ^ hlslExpression)hlslLine << (hlslStatement + Suppress(';'))hlslBlock = Group(Suppress('{') + hlslFunctionBody + Suppress('}'))hlslFunctionLine << (hlslLine | hlslIfStatement | hlslForLoop | hlslBlock)hlslFunctionBody << Group(ZeroOrMore(hlslFunctionLine))hlslFunction = Group(hlslFunctionDefinition + Suppress('{') + hlslFunctionBody +        Suppress('}'))hlslAssignStmt = Group((hlslAssignment | hlslVariableDecl) + Suppress(';'))hlslBlock = \(    hlslFunction ^     hlslTechnique ^     hlslAssignStmt ^     hlslStructDefinition ^     hlslSamplerState ^     hlslBlendState ^     hlslDepthStencilState ^    hlslRasterizerState ^    hlslCBuffer)hlslFile << (ZeroOrMore(hlslBlock) + StringEnd())hlslFile.ignore(hlslComment)#hlslFile.validate()try:    print hlslFile.parseString(code)except ParseException, pe:    print "Parsing failed"    print pe.markInputline()    print pe.lineno, pe.column, pe.msg