modulepermissive-water// Key idea: WATER is the inverse of LAYOUTcontext-free syntax// Allow WATER on places where LAYOUT may occurLAYOUT.WATER = WATERlexical sortsWATERWATERTOKENSTARTWATERTOKENSEPARATORlexical syntax// Separate water regions into smaller chunks for recovery costs calculationWATER = WATERTOKENWATER = WATERTOKENSEPARATOR// Allow to skip over identifier strings
= WATERTOKENSTART [A-Za-z0-9\_]*
WATERTOKENSTART = [A-Za-z0-9\_] {recover}
// Allow to skip over special characters that are neither part of identifiers nor whitespace charactersWATERTOKENSEPARATOR = ~[A-Za-z0-9\_\ \t\12\r\n\*] {recover}
lexical restrictionsWATERTOKEN -/- [A-Za-z0-9\_]