<<>> <> <> <> <> <> <> <> DIRECTORY NPGSConDefs, NPGSTypes; NPGSCuspPre: CEDAR PROGRAM IMPORTS NPGSConDefs EXPORTS NPGSConDefs = { Used: TYPE = NPGSTypes.Used; TokenSeq: TYPE = NPGSTypes.TokenSeq; TokensUsed: TYPE = NPGSTypes.TokensUsed; tokensUsed: TokensUsed; ErrorType: TYPE = NPGSTypes.ErrorType; ErrSeq: TYPE = NPGSTypes.ErrSeq; ErrorMsg: TYPE = NPGSTypes.ErrorMsg; errorMsg: ErrorMsg _ NIL; tokenIconExpr, tokenClose, tokenCopy, tokenMove, tokenSelect: CARDINAL; prioritySize: CARDINAL = 30; priorityMsg: ARRAY[1..prioritySize] OF ErrorType = [ MExpr, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, MOpd, Stmt, MAgg, IconExpr, MId, MId, MId, MDotLB, MId, MTypeId, MFieldTypeId, MId, MTxt, MCalled, MThe, MRArrow, MOptn, MSecs]; priorityToken: ARRAY [1..prioritySize] OF CARDINAL; priorityStr: ARRAY [1..prioritySize] OF REF TEXT _ [ "Expr", "Disjunct", "Conjunct", "Negation", "Relation", "Str", "Sum", "Prod", "Factor", "Primary", "FunctionCall", "BuiltInVal", "Constant", "Statement", "Aggregate", "IconExpr", "DocObjExpr", "PathName", "IconContExpr", "Accessor", "BoundId", "IconType", "FieldType", "PropertyName", "PropertyValue", "RangeVarDecl", "RowExpr", "->", "OR", "SecOrSecs"]; CuspPreSetPriorityTokenArray: PUBLIC PROC [hashChain: NPGSTypes.HashChain] = { <> LocateToken: PROC [string: REF TEXT] RETURNS [CARDINAL] = { <> i, j: CARDINAL; <> j _ hashChain[(string.length*256+(string[0].ORD)) MOD (NPGSTypes.symTabSize/4) + 1]; WHILE j # 0 DO IF NPGSConDefs.symInfo[j].length = string.length THEN { i _ j*NPGSTypes.tokenSize; FOR k: CARDINAL IN [0..string.length) DO IF NPGSConDefs.symTab[i+k]#string[k] THEN EXIT REPEAT FINISHED => RETURN [j] ENDLOOP }; j _ NPGSConDefs.symInfo[j].link; ENDLOOP; RETURN [0] }; -- LocateToken -- <> <> <> tokensUsed _ NPGSConDefs.MakeTokenSeq[NPGSConDefs.totalTokens+1]; FOR i: CARDINAL IN [1..prioritySize] DO r: REF TEXT _ priorityStr[i]; priorityToken[i] _ LocateToken[r]; ENDLOOP; tokenIconExpr _ LocateToken["IconExpr"]; tokenClose _ LocateToken["CLOSE"]; tokenCopy _ LocateToken["COPY"]; tokenMove _ LocateToken["MOVE"]; tokenSelect _ LocateToken["SELECT"]; }; -- of InitPriorityToken -- CuspPreClearTokensUsedArray: PUBLIC PROC = { <> FOR i: CARDINAL IN [1..NPGSConDefs.totalTokens] DO tokensUsed[i] _ no ENDLOOP; }; CuspPreClearErrorMsgArray: PUBLIC PROC = { errorMsg _ NIL}; CuspPreGetErrorMsg: PUBLIC PROC [i: CARDINAL] RETURNS [NPGSTypes.ErrorType] = { RETURN[errorMsg[i]]; }; CuspPreSetNextTokenUsed: PUBLIC PROC [token: CARDINAL] = { tokensUsed[token] _ yes; }; CuspPreSetHeaderUsed: PUBLIC PROC [token: CARDINAL] = { tokensUsed[token] _ header; }; CuspPreSetNextErrorMsgElement: PUBLIC PROC [state: CARDINAL] = { i,j: CARDINAL; IF errorMsg = NIL THEN errorMsg _ NPGSConDefs.MakeErrSeq[NPGSConDefs.sLim]; i _ 1; WHILE i <= prioritySize DO IF tokensUsed[j _ priorityToken[i]] = yes THEN { errorMsg[state] _ IF j = tokenIconExpr THEN (IF tokensUsed[tokenClose] = header THEN CloseIconExpr ELSE IF tokensUsed[tokenCopy] = header THEN CopyIconExpr ELSE IF tokensUsed[tokenMove] = header THEN MoveIconExpr ELSE IF tokensUsed[tokenSelect] = header THEN SelectIconExpr ELSE MThe) ELSE priorityMsg[i]; EXIT }; i _ i + 1; REPEAT FINISHED => errorMsg[state] _ tl; ENDLOOP; }; CuspPreRenumber: PUBLIC PROC [lastntstate: CARDINAL, renumber: NPGSTypes.Renumber] = { i,j: CARDINAL; temp: ErrorType; FOR i IN [2..lastntstate] DO IF (j _ renumber[i]) # 0 THEN { temp _ errorMsg[i]; errorMsg[i] _ errorMsg[j]; errorMsg[j] _ temp }; ENDLOOP; }; }.