<> <> <> <> <> DIRECTORY Commander USING [CommandProc, Register], CommandTool USING [ArgumentVector, Failed, Parse], FS USING [Error, StreamOpen], IO USING [STREAM, PutF, PutRope, rope], ArpaLex822, Rope USING [ROPE, Cat, Length, Equal]; ArpaTestLex: CEDAR PROGRAM IMPORTS Commander, CommandTool, FS, IO, Rope, ArpaLex822 = BEGIN LexMessage: Commander.CommandProc = { argv: CommandTool.ArgumentVector = CommandTool.Parse[cmd ! CommandTool.Failed => {cmd.out.PutRope[errorMsg]; GOTO GoAway}]; file: IO.STREAM _ FS.StreamOpen[argv[1] ! FS.Error => {cmd.out.PutRope[error.explanation]; GOTO GoAway}]; token, whiteSpace: Rope.ROPE; tokType: ArpaLex822.TokenType; DO token _ ArpaLex822.LexFieldName[file].fieldName; IF Rope.Equal[token, "\n"] THEN ERROR ELSE IF token.Length[] = 0 THEN EXIT; cmd.out.PutRope[token.Cat["\n"]]; DO [token, whiteSpace, tokType] _ ArpaLex822.LexToken[file]; IF tokType = errorTok THEN cmd.out.PutRope["** Error **\n "]; cmd.out.PutF["\"%h\", \"%h\"\n", IO.rope[whiteSpace], IO.rope[token]]; IF tokType = EOLTok THEN EXIT; ENDLOOP; ENDLOOP; EXITS GoAway => NULL }; Commander.Register["ArpaLex822", LexMessage, "Do a lexical analysis of a message (in a file)."]; END.