Add a new index page to be the Flang documentation mainpage instead of Overview.md, which jumps straight into the compiler Design. The index file needs to be in .rst format to use the toctree directive to create table of contents. Also use the sphinx_markdown_tables extension to generate html tables form markdown. A number of additional style changes to the existing docs were needed to make this work well: * Convert all headings to the # style, which works better with toctree's titlesonly option. Ensure that there is only one top-level heading per document. * Add a title to documents that don't have one for rendering on the index. * Convert the grammar docs from .txt to .md. for better rendering * Fixed broken link to a section in another document - sphinx does not seem to support anchor links in markdown files. Depends on D87226 Reviewed By: sameeranjoshi Differential Revision: https://reviews.llvm.org/D87242
3.4 KiB
Overview of Compiler Phases
.. contents::
:local:
Each phase produces either correct output or fatal errors.
Prescan and Preprocess
See: Preprocessing.md.
Input: Fortran source and header files, command line macro definitions, set of enabled compiler directives (to be treated as directives rather than comments).
Output:
- A "cooked" character stream: the entire program as a contiguous stream of normalized Fortran source. Extraneous whitespace and comments are removed (except comments that are compiler directives that are not disabled) and case is normalized.
- Provenance information mapping each character back to the source it came from. This is used in subsequent phases to issue errors messages that refer to source locations.
Entry point: parser::Parsing::Prescan
Command: f18 -E src.f90 dumps the cooked character stream
Parse
Input: Cooked character stream.
Output: A parse tree representing a syntactically correct program,
rooted at a parser::Program.
See: Parsing.md and ParserCombinators.md.
Entry point: parser::Parsing::Parse
Command:
f18 -fdebug-dump-parse-tree -fparse-only src.f90dumps the parse treef18 -funparse src.f90converts the parse tree to normalized Fortran
Validate Labels and Canonicalize Do Statements
Input: Parse tree.
Output: The parse tree with label constraints and construct names checked,
and each LabelDoStmt converted to a NonLabelDoStmt.
See: LabelResolution.md.
Entry points: semantics::ValidateLabels, parser::CanonicalizeDo
Resolve Names
Input: Parse tree (without LabelDoStmt) and .mod files from compilation
of USEd modules.
Output:
- Tree of scopes populated with symbols and types
- Parse tree with some refinements:
- each
parser::Name::symbolfield points to one of the symbols - each
parser::TypeSpec::declTypeSpecfield points to one of the types - array element references that were parsed as function references or statement functions are corrected
- each
Entry points: semantics::ResolveNames, semantics::RewriteParseTree
Command: f18 -fdebug-dump-symbols -fparse-only src.f90 dumps the
tree of scopes and symbols in each scope
Check DO CONCURRENT Constraints
Input: Parse tree with names resolved.
Output: Parse tree with semantically correct DO CONCURRENT loops.
Write Module Files
Input: Parse tree with names resolved.
Output: For each module and submodule, a .mod file containing a minimal
Fortran representation suitable for compiling program units that depend on it.
See ModFiles.md.
Analyze Expressions and Assignments
Input: Parse tree with names resolved.
Output: Parse tree with parser::Expr::typedExpr filled in and semantic
checks performed on all expressions and assignment statements.
Entry points: semantics::AnalyzeExpressions, semantics::AnalyzeAssignments
Produce the Intermediate Representation
Input: Parse tree with names and labels resolved.
Output: An intermediate representation of the executable program. See FortranIR.md.