quote = "\"" singleQuote = "\'" backslash = "\\" #NumberChar = "0" (base:"b" {value:'0-1'})|(base:"x" {value:'0-9|A-F'})|(base:"d" {value:digit}) #SingleChar = (backslash backslash:("b"|"r"|"t"|"n"|backslash|quote|singleQuote)) | anyChar CharacterToken = singleQuote [notToken:notToken] {|orToken character1:(NumberChar|SingleChar) ["-" character2:(NumberChar|SingleChar)]} singleQuote StringToken = (quote {charTokens:(CharacterToken | SingleChar)} quote) | singleChar:CharacterToken letter = 'a-z|A-Z' digit = '0-9' exprOpen = "(" exprClose = ")" optionOpen = "[" optionClose = "]" arrayOpen = "{" arrayClose = "}" notToken = "!" orToken = "|" transientToken = "#" equals = "=" Jump = "\r\n"|"\r"|"\n" Space = " "|"\t" allToken = "*" Identifier = firstLetter:letter [{idName:(letter|digit)}] ignore = {Space|Jump} SearchName = id:Identifier ":" LineHeader = [trans:transientToken] id:Identifier equals TokenSearchToken = [not:notToken] ([trans:transientToken] id:Identifier)|string:StringToken|allToken ArraySearchToken = [{minSize:digit} "-"] arrayOpen [orToken left:SearchToken] {searches:SearchToken} [right:SearchToken orToken] arrayClose ["-" {maxSize:digit}] OptionalSearchToken = optionOpen {searches:SearchToken} optionClose BracketSearchToken = exprOpen {searches:SearchToken} exprClose OrSearchToken = 2-{searches:#SearchToken orToken|} #SearchToken = ([searchName:SearchName] searchToken:(TokenSearchToken|ArraySearchToken|OptionalSearchToken|BracketSearchToken)) | searchToken:OrSearchToken Line = header:LineHeader {searchTokens:SearchToken} anyChar = '*'