lexer foo_lexer { @trivia() Whitespace <- p"[ \n\r\t]+" family alphanumericals { Def <- "def" Var <- "var" } family alphanumericals { Error <- "error" Example <- "example" Null <- "null" KwA <- "kwA" KwB <- "kwB" KwC <- "kwC" KwD <- "kwD" KwE <- "kwE" KwF <- "kwF" } family punctuation { Comma <- "," Dot <- "." Semicolon <- ";" Colon <- ":" LPar <- "(" RPar <- ")" LBrace <- "{" RBrace <- "}" Equal <- or("=" | ":=") Plus <- "+" } Minus <- "-" LessThan <- "<" LessThanOrEqual <- "<=" GreaterThan <- ">" GreaterThanOrEqual <- ">=" @unparsing_spacing(with=alphanumericals) family alphanumericals { Number <- p"[0-9]+|0x[0-9a-f]+" @symbol() Identifier <- p"[a-zA-Z_][a-zA-Z0-9_]*" } String <- p"\"[^\"]*\"" family comments { @with_unparsing_newline @trivia(comment=true) Comment <- p"#(.?)+" } }