scanner.txt 1901 lines, SCANNER.DEF/MOD)Lexer + source window + tiny allocators. All parsers call
GetSym/Accept/Expect/Test.
| old | proposed | role |
|---|---|---|
| global2 | scanOptions |
0=list, 9=caseSens, 12=noHalt |
| global3 | curChar |
377C=EOF |
| global5 | curSym |
token 0..60; 10=ident |
| global6 | isLiteral |
after number/string |
| global7 | cardVal |
integer literal |
| global8/9 | curNode/identKind |
found node / 0=ident,1=num/str,6=with,7=other |
| global11 | tokenBuf[0..128] |
ident/number text + 0C |
| global12 | curType |
CARD/REAL/LONGREAL/... of literal |
| global13 | curScopeWalk |
SymTab.global9 chain |
| global14/17 | realVal/longVal |
via Doubles.StrToDouble |
| global16 | srcFile |
Files.ReadBytes/SetPos/Open |
| global4 | codeFile |
output of Compile |
| global21/22/23 | codeBuf/codeSize/listing |
GENZ80 4K buffer |
| global24 | charClass[0..255] |
10=letter, 11=digit, 12=quote ... |
| global25/26 | tokPos/tokCol |
start of token |
| procPtr27 | keywordHash |
(ADR(tokenBuf),case)->CARD |
| buffer/bufIndex/filePos/column | same | 128B window at 0080H/006CH/006EH/0070H |
| stackLimit | same | heap guard at 0316H, FREEMARKER=3AE3H |
Pipeline: OpenSource(proc29) -> InitScan(proc28) -> NextChar(proc2) ->
scanNextToken(proc39) -> GetSym(proc1) + Number/SkipComment helpers.
128B window: bufIndex=128 = empty; NextChar calls Refill(proc34)
(ReadBytes 128, pad EOT=032C), else buffer[bufIndex++],
INC(filePos), echo if 0 IN options (EchoChar proc33).
| old | proposed |
|---|---|
| proc1 | GetSym |
| proc39 | ScanNextToken |
| NUMBER | ParseNumber (base *10/*8/*16, .->real, D/E exp, H/O/C/L suffix) |
| proc38 | SkipComment (nested (* *), $L+- toggles options) |
| proc2/34/28/29 | NextChar/RefillBuffer/InitScan/OpenSource |
| proc32/33 | ListPrefix/EchoChar |
| proc4/8/9/10/11 | Accept/Expect/TestSet/Test40/Test13 |
| proc12/13/21 | NeedIdent/ExpectKind/ExpectString |
| proc3 | PushWithScope |
| proc25 | AddExtension |
| proc26 | ScanError -> Errors.proc1 |
| proc27 | EnterSymtabKey |
| proc7=Allocate | HeapAlloc (was Z80) |
| proc5/6 | GetStackMark/CheckStack |
proc22/23/24=FindIdent/StrCmp/StrLen |
keyword/scope search (were Z80) |
| proc16/15/14 | CopyString/NewNode/NewSizedNode |
| proc18/19/20/17 | MkIdent/DeclIdent/InsertSym/NewScope |
proc30=COMPIL |
Compile (top driver) |