(s-expression . (choice comment (comment "Expression is read in case-sensitive mode" (seq "#cs" s-expression)) (comment "Expression is read in case-insensitive mode" (seq "#ci" s-expression)) (comment "SRFI-10 constructor" (seq "#,(" symbol (zero-or-more expression) ")")) (comment "Improper list" (seq "(" (one-or-more s-expression) "." s-expression ")")) (comment "Proper list" (seq "(" (zero-or-more s-expression) ")")) (comment "Vector" (seq "#(" (zero-or-more s-expression) ")")) string shorthand keyword symbol (comment "Special EOF object" "#!eof") number )) (comment . (choice (comment "Script marker comment" (choice (seq "#!/" (zero-or-more character) newline) (seq "#!" whitespace (zero-or-more character) newline))) (comment "Multi-line block comment" (seq "#|" (zero-or-more character) "|#")) (comment "Expression comment" (seq "#;" s-expression)) (comment "Traditional comment" (seq ";" (zero-or-more character) newline)) )) (string . (choice (comment "String" (seq "\"" (zero-or-more string-character) "\"")) (comment "Multiline tagged string" (seq "#<<" symbol newline (zero-or-more character) symbol newline)) (comment "Multiline tagged string\nAllows embedded # or #{}" (seq "#<#" symbol newline (zero-or-more character) symbol newline)))) (shorthand . (choice (comment "(cond-expand ( ) (else))" (seq "#+" symbol s-expression)) (comment "(location )" (seq "#$" s-expression)) (comment "(foreign-declare \"...\")" (seq "#>" (zero-or-more string-character) "<#")) (comment "(quote " (seq "'" s-expression)) (comment "(quasiquote " (seq "`" s-expression)) (comment "(unquote " (seq "," s-expression)) (comment "(unquote-splicing " (seq ",@" s-expression)) )) (keyword . (choice (seq ":" symbol) (seq "#:" symbol) (seq symbol ":"))) (symbol . (choice (seq "|" (one-or-more character) "|") (seq "#%" (one-or-more symbol-subsequent-character)) (seq symbol-first-character (zero-or-more symbol-subsequent-character)) "+" "-" "..." "#!optional" "#!rest" "#!key")) (symbol-first-character . "[a-zA-Z!$%&*/:<=>^?_]") (symbol-subsequent-character . (choice symbol-first-character "[0-9+-.@]"))