Program <- (Function / Comment / Line)* EndOfFile Function <- _ ReturnType _ '(' _ FunctionName _ ')'_ Parameters Parameters <- '('_ This _ ','? _ ( _ Param _ ','?)*_ ');' FunctionName <- CallType _ '*' _ This <- Type _ 'This' Param <- InOut? _ Type _ Name _ ArraySize? ReturnType <- Type <- (TypeQualifier _)? Name Pointer? TypeQualifier <- 'const' ~CallType <- '__export'? ('STDMETHODCALLTYPE' / 'STDMETHODVCALLTYPE' / 'STDAPICALLTYPE' / 'STDAPIVCALLTYPE' / '__cdecl' / '__stdcall') ~InOut <- '_'Name ArraySize <- '[' _ _ ']' Pointer <- _<('*'/'const '/'const')+> Name <- <([a-z]/[A-Z]/'_'/[0-9])+> Number <- <[0-9]+> ~Line <- <(!EndOfLine !EndOfFile .)*> (EndOfLine / EndOfFile) ~EndOfStatement <- ';' ~EndOfLine <- '\r\n' / '\n' / '\r' EndOfFile <- !. End <- EndOfLine / EndOfFile ~_ <- (Comment / [ \t\r\n])* Indent <- [ \t] ~Space <- [ \t] Comment <- [ \t]*<('/*' (!'*/' .)* '*/' / '//') Line>