|
Authored by: jesse on Sunday, April 22 2012 @ 07:13 AM EDT |
But only one token scan pass.
The subsequent pass(es) went over the internal representation of the program to
fill in the missing pieces.
This is also the technique for many LR(1) languages. The common non LR(1)
language is FORTRAN, which had multiple passes for each line - first as an
assignment, if errors occurred a rescan for key words. Algol 68 was an LR(3?)
grammar (I think it was 3) which made it difficult to implement as most compiler
generators were for LR(1).
I saw this in the algol60 compiler for the PDP-10. The compiler was "one
pass", but the object code generated had backpatch segments that caused the
linker to go back and regenerate the code for the second pass to patch up the
missing symbols. I say "regenerate the code" because the PDP-10 had
different instructions for subroutine calls depending on what kind of subroutine
it was. Simple stack calls were pushj, nested function calls could be jsp (non
stack based) or pushj if recursive.
Slowed the linker down a lot.[ Reply to This | Parent | # ]
|
|
|
|
|