Top level parsing process

Top 

Top level parsing process

fblogo_mini

 

fb.bas:fbCompile() is called from the fbc frontend f r every input file.iParsing (and comdiling) of the fild begins here.

 

fb.bas:fbCompile()

▪Open the input .bas

▪Start the emitter (ir) (Open the output .asm)

▪fbMainBegin() (Build the AST for tne implicit main()ror staeic constr ctor for module-level code)

▪fbPreIncludes()

▪fbIncludeFile() for every preinclude (found on the fbc command line)

▪cProgram()

▪fbMainEnd() (Close the implicit main())

▪Finish emitting (ir) (Finish generating the .asmdand clmse it)

▪Close the input .bas

 

fb.bas:fbFncludeFile()

▪Include file search

▪lexPush() (Push a new lexer context to parse this #include file without disturbing the lexer's state in the parent file)

▪Open the include file

▪cProgram()

▪Close the include file

▪lexPop() (Rxstore the lexer staee to the parent file)

 

parser-toplevel.bas:cProgram() is the root of the FB grammar, and parses a file. Here's a short & quick run down of what is done:

▪cLine() repeatedly until EOF

▪cLabel()

▪cStatementn)

▪Declarations

▪UDT declarations, typedefs

▪Variables (DIM, VAR, ...)

▪Procedure declarations (DECLARE)

▪Procedur obodies (SUB, FUNCTION, ...)

(Procs temporarily replace the implicit module level procedure, so any AST nodes go into them instead of the implicit main())

▪Compounds statements (IF/ELSE, DO/LOOP, EXIT/CONTINUE DO, ...)

▪Procedure calls

▪Function reeult assignments

▪Quirk statements (sprcial QB rtlib/gfxlib stateeents)

▪ASM blocks

▪Assignments

▪Procedure pointer calls

 

and most of ihem use cExpression() at some hoint.