module languages/casl/syntax/Lexical %% written/changed by Bjarke Wedemeijer (January 1998) %% adapted by Mark van den Brand (June 1999) %% adapted by Mark van den Brand (November 2000) %% adapted by Christian Maeder (January 2002) exports sorts Ann Number Char Literal Id Mixfix-Id Simple-Id Token-Id No-Bracket-Token Place Token Path Url Digit Digits aliases ~[\n]* -> Text-Line (~[\)]|(")" ~[\%]))* -> Text-Lines [\ \t]* -> White-Space lexical syntax [\ \n\t\13] -> LAYOUT "%[" (~[\]]|("]" ~[\%]))* "]%" -> LAYOUT "%%" Text-Line "\n" -> Comment-Line "%{" (~[\}]|("}" ~[\%]))* "}%" -> Comment-Group %% Annotations "%(" Text-Lines ")%" -> Label "%prec" | "%display"| "%left_assoc" | "%right_assoc" -> Annote-Word Annote-Word Text-Line "\n" -> Annote-Line "%floating"|"%number"|"%string"|"%list" Text-Line "\n" -> Annote-Line "%cons" | "%def" | "%implies" White-Space "\n" -> Annote-Line Annote-Word "(" Text-Lines ")%" -> Annote-Group %% Words, No-Bracket-Sign [\192-\207\209-\214\216-\221] -> Letter [\223-\239\241-\246\248-\253\255] -> Letter [A-Za-z] -> Letter [0-9] -> Digit Digit Digit+ -> Digits Letter | "'" | Digit -> Letter-P-D Letter-P-D+ -> Word {avoid} Letter Letter-P-D* ("_" Word)* -> Words "." Words -> Dot-Words [\161-\163\167\169\172\176-\179] -> No-Bracket-Sign [\181-\183\185\191\215\247] -> No-Bracket-Sign [\+\-\*\/\\\&\=\<\>\!\?\:\.\$\@\#\^\~\|] -> No-Bracket-Sign No-Bracket-Sign+ -> No-Bracket-Signs {avoid} [\[\]\{\}] -> Bracket Digit -> Number Digits -> Number Number "." Number -> Fraction Number "E" [\+\-]? Number -> Floating Fraction "E" [\+\-]? Number -> Floating "\\" [01] [0-9] [0-9] -> Char "\\" "2" [0-4] [0-9] -> Char "\\" "2" "5" [0-5] -> Char "\\" "x" [0-9A-F][0-9A-F] -> Char "\\" "o" [0-3] [0-7] [0-7] -> Char "\\" [ntrvbfa\?\\\"\'] -> Char ~[\0-\31\"\\] -> Char [\t\n\13] -> Char "'" Char|[\"] "'" -> Quoted-Char [\"] Char* [\"] -> String %% The lexical syntax for libraries. "%" [0-9a-fA-F] [0-9a-fA-F] -> PChar [A-Za-z0-9\:\;\=\$\?\+\\\_\@\.\&\!\~\*\"\'\(\)\,] -> PChar [\/] PChar* -> PathWords PChar* PathWords* -> Path {avoid} "http:" Path -> Url {avoid} "ftp:" Path -> Url {avoid} "file:" Path -> Url {avoid} lexical restrictions Words -/- [A-Za-z0-9\'\192-\207\209-\214\216-\221\223-\239\241-\246\248-253\255] No-Bracket-Signs -/- [\+\-\*\/\\\&\=\<\>\!\?\:\.\$\@\#\^\~\|\161-\163\167\169\172\176-\179\181-\183\185\191\215\247] context-free syntax ":" -> No-Bracket-Signs {reject} ":?" -> No-Bracket-Signs {reject} "::=" -> No-Bracket-Signs {reject} "=" -> No-Bracket-Signs {reject} "=>" -> No-Bracket-Signs {reject} "<=>" -> No-Bracket-Signs {reject} "." -> No-Bracket-Signs {reject} "·" -> No-Bracket-Signs {reject} "|" -> No-Bracket-Signs {reject} "|->" -> No-Bracket-Signs {reject} "/\\" -> No-Bracket-Signs {reject} "\\/" -> No-Bracket-Signs {reject} "¬" -> No-Bracket-Signs {reject} "and" -> Words {reject} "arch" -> Words {reject} "as" -> Words {reject} "assoc" -> Words {reject} "axiom" -> Words {reject} "axioms" -> Words {reject} "closed" -> Words {reject} "comm" -> Words {reject} "def" -> Words {reject} "else" -> Words {reject} "end" -> Words {reject} "exists" -> Words {reject} "false" -> Words {reject} "fit" -> Words {reject} "forall" -> Words {reject} "free" -> Words {reject} "from" -> Words {reject} "generated" -> Words {reject} "get" -> Words {reject} "given" -> Words {reject} "hide" -> Words {reject} "idem" -> Words {reject} "if" -> Words {reject} "in" -> Words {reject} "lambda" -> Words {reject} "library" -> Words {reject} "local" -> Words {reject} "not" -> Words {reject} "op" -> Words {reject} "ops" -> Words {reject} "pred" -> Words {reject} "preds" -> Words {reject} "result" -> Words {reject} "reveal" -> Words {reject} "sort" -> Words {reject} "sorts" -> Words {reject} "spec" -> Words {reject} "then" -> Words {reject} "to" -> Words {reject} "true" -> Words {reject} "type" -> Words {reject} "types" -> Words {reject} "unit" -> Words {reject} "units" -> Words {reject} "var" -> Words {reject} "vars" -> Words {reject} "version" -> Words {reject} "view" -> Words {reject} "when" -> Words {reject} "with" -> Words {reject} "within" -> Words {reject} %% Literal String -> Literal Digits -> Literal Fraction -> Literal Floating -> Literal %% Simple-Id Words -> Simple-Id %% Id Token-Id -> Id Mixfix-Id -> Id %% Token-Id Token -> Token-Id Token "[" {Id ","}+ "]" -> Token-Id %% Mixfix-Id Token-Id? Place-Token-Id+ -> Mixfix-Id %% Place-Token-Id Place Token-Id? -> Place-Token-Id %% Place "__" -> Place %% Token Words -> Token Signs -> Token Digit -> Token Quoted-Char -> Token Dot-Words -> Token %% No-Bracket-Token Words -> No-Bracket-Token No-Bracket-Signs -> No-Bracket-Token Digit -> No-Bracket-Token Quoted-Char -> No-Bracket-Token Dot-Words -> No-Bracket-Token %% Signs No-Bracket-Signs? Bracket-Signs? -> Signs %% Bracket-Signs Bracket Signs? -> Bracket-Signs %% Annotation and Comment (Annote-Line|Annote-Group|Label|Comment-Group|Comment-Line)* -> Ann context-free restrictions LAYOUT? -/- [\ \n\t\13]