xerial.core.io.text
A trait for defining expression grammars.
trait MyGrammar extends Grammar { // Define expression patterns using expr blocks // '~' denotes a sequence of matches def comment = expr { "#" ~ untilEOF } def expr = expr { value | string | "(" ~ expr ~ ")" } def value = expr { "0" - "9" | "A" - "Z" | "a" - "z" } // Range of characters // repetition of patterns and syntactic predicate (!->). def string = expr { "\"" ~ repeat("\\" !-> not("\"") | escapeSequence) ~ "\"" } def escapeSequence = expr { "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t" | "u" ~ hexDigit ~ hexDigit ~ hexDigit ~ hexDigit) } def digit = expr { "0" - "9" } def hexDigit = expr { digit | "A" - "F" | "a" - "f" } // Define tokens to ignore def whiteSpace = expr { " " | "\t" | "\n" | "\r" } ignore(whiteSpace) }
Syntax grammar
A trait for defining expression grammars.
Example: