module pegged.examples.strings; import pegged.grammar; mixin(grammar(` String: # Example of a rule for double-quoted strings String <~ doublequote (!doublequote Char)* doublequote Char <~ backslash ( doublequote # '\' Escapes / quote / backslash / [bfnrt] / [0-2][0-7][0-7] / [0-7][0-7]? / 'x' Hex Hex / 'u' Hex Hex Hex Hex / 'U' Hex Hex Hex Hex Hex Hex Hex Hex ) / . # Or any char, really Hex <- [0-9a-fA-F] `)); unittest { assert(String(`"Hello, World!"`).successful); assert(String(`"Hello, World!"`).successful); assert(String(`""`).successful); assert(String(`"\'\""`).successful); assert(String(`"\\"`).successful); assert(String(`"\n\t\r"`).successful); assert(String(`"\60\61\7\111"`).successful); assert(String(`"\x40\x41"`).successful); assert(String(`"\u00A0\u00FF"`).successful); assert(String(`"\U000000A0\U000000B2"`).successful); // Failures assert(!String(`"Hello, World!`).successful); assert(!String(`Hello, World!"`).successful); assert(!String(`Hello, World!`).successful); }