definition module scanner import StdEnv, general // RWS Proof ... :: SearchPaths :== [String] :: SearchPaths = { sp_locations :: [(String, String)] // (module, path) , sp_paths :: [String] } :: ModTimeFunction f :== ({#Char} f -> *(!{#Char}, !f)) // ... RWS :: * ScanState :: FilePosition = {fp_line :: !Int, fp_col :: !Int} instance <<< FilePosition :: Token = IdentToken !.String // an identifier | UnderscoreIdentToken !.String// an identifier that starts with a '_' | QualifiedIdentToken !String !.String // a qualified identifier | IntToken !.String // an integer | RealToken !.String // a real | StringToken !.String // a string | CharToken !.String // a character | CharListToken !.String // a character list '{char}*' | BoolToken !Bool // a boolean | OpenToken // ( | CloseToken // ) | CurlyOpenToken // { | CurlyCloseToken // } | SquareOpenToken // [ | SquareCloseToken // ] | DotToken // . | SemicolonToken // ; | ColonToken // : | DoubleColonToken // :: | CommaToken // , | ExclamationToken // ! | BarToken // | | ArrowToken // -> | DoubleArrowToken // => | EqualToken // = | DefinesColonToken // =: | ColonDefinesToken // :== | WildCardToken // _ | BackSlashToken // \ | DoubleBackSlashToken // \\ | LeftArrowToken // <- | LeftArrowColonToken // <-: | LeftArrowWithBarToken // <|- | DotDotToken // .. | AndToken // & | HashToken // # | AsteriskToken // * | LessThanOrEqualToken // <= | ModuleToken // module | ImpModuleToken // implementation | DefModuleToken // definition | SysModuleToken // system | ImportToken // import | FromToken // from | SpecialToken // special | ForeignToken // foreign | IntTypeToken // Int | CharTypeToken // Char | RealTypeToken // Real | BoolTypeToken // Bool | StringTypeToken // String | FileTypeToken // File | WorldTypeToken // World | ClassToken // class | InstanceToken // instance | OtherwiseToken // otherwise | IfToken // if | WhereToken // where | WithToken // with | CaseToken // case | OfToken // of | LetToken Bool // let!, let | SeqLetToken Bool // Let!, Let | InToken // in | DynamicToken // dynamic | DynamicTypeToken // Dynamic | PriorityToken Priority // infixX N | CodeToken // code | InlineToken // inline | CodeBlockToken [String] // {...} | NewDefinitionToken // generated automatically | EndGroupToken // generated automatically | EndOfFileToken // end of file | ErrorToken String // if an error occured | GenericToken // generic | DeriveToken // derive | GenericOpenToken // {| | GenericCloseToken // |} | GenericOfToken // of | GenericWithToken // with | ExistsToken // E. | ForAllToken // A. :: ScanContext = GeneralContext | TypeContext | FunctionContext | CodeContext | GenericContext | ModuleNameContext :: Assoc = LeftAssoc | RightAssoc | NoAssoc :: Priority = Prio Assoc Int | NoPrio DefaultPriority :: Priority class getFilename state :: !*state -> (!String,!*state) instance getFilename ScanState class tokenBack state :: !*state -> *state instance tokenBack ScanState class nextToken state :: !ScanContext !*state -> (!Token, !*state) instance nextToken ScanState class currentToken state :: !*state -> (!Token, !*state) instance currentToken ScanState /* class insertToken state :: !Token !ScanContext !*state -> *state instance insertToken ScanState class replaceToken state :: !Token !*state -> *state instance replaceToken ScanState */ class getPosition state :: !*state -> (!FilePosition,!*state) // Position of current Token (or Char) instance getPosition ScanState fopenInSearchPaths :: !{#Char} !{#Char} !SearchPaths !Int (ModTimeFunction *Files) !*Files -> (Optional (*File, {#Char}, {#Char}),!*Files) openScanner :: !*File !String !String -> ScanState closeScanner :: !ScanState !*Files -> *Files setUseLayout :: !Bool !ScanState -> ScanState UseLayout :: !ScanState -> (!Bool, !ScanState) dropOffsidePosition :: !ScanState -> ScanState setUseUnderscoreIdents :: !Bool !ScanState -> ScanState isLhsStartToken :: ! Token -> Bool isOffsideToken :: ! Token -> Bool isEndGroupToken :: ! Token -> Bool instance == Token instance <<< Token instance toString Token, Priority /* Sjaak ... */ // instance < Priority determinePriority :: !Priority !Priority -> Optional Bool /* ... Sjaak */ setNoNewOffsideForSeqLetBit :: !ScanState -> ScanState clearNoNewOffsideForSeqLetBit :: !ScanState -> ScanState