Browse Source

* some stuff to the overview added

florian 27 years ago
parent
commit
a1cdc96c84
1 changed files with 44 additions and 8 deletions
  1. 44 8
      docs/internal.tex

+ 44 - 8
docs/internal.tex

@@ -56,7 +56,7 @@ writing. Since the compiler is under continuous development, some of the
 things described here may be outdated. In case of doubt, consult the
 things described here may be outdated. In case of doubt, consult the
 \file{README} files distributed with the compiler.
 \file{README} files distributed with the compiler.
 The \file{README} files are, in case of conflict with this manual,
 The \file{README} files are, in case of conflict with this manual,
- authoritative.
+authoritative.
 
 
 I hope, my poor english is quite understandable. Feel free to correct
 I hope, my poor english is quite understandable. Feel free to correct
 spelling mistakes.
 spelling mistakes.
@@ -71,7 +71,7 @@ spelling mistakes.
 
 
 The ultimate source for information about compiler internals is
 The ultimate source for information about compiler internals is
 the compiler source, though it isn't very well documented. If you
 the compiler source, though it isn't very well documented. If you
-need more infomration you should join the developers mailing
+need more information you should join the developers mailing
 list or you can contact the developers.
 list or you can contact the developers.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -79,15 +79,46 @@ list or you can contact the developers.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Overview}
 \chapter{Overview}
 
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% History
+\section{History}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The compiler passes
+\section{The compiler passes}
+
+It isn't easy to divide the compilation process of \fpc into passes
+how it is described by many thesis about compiler building,
+but I would say \fpc does the compilation in five passes:
+
+\begin{enumerate}
+\item Scanning and Parsing. The compiler reads the input file,
+does preprocessing (i. e.
+reading include files, expanding macros ...) (\ref{ch:scanner})
+and the parser (\ref{ch:parser}) creates a parse tree (\ref{ch:parse_tree}).
+While this pass the compiler builds also the symbol tables
+(\ref{ch:symbol_tables}).
+\item Semantic analysis. This pass checks if semantic of
+the code is correct, i.e. if the types of expressions matches
+to the operators (\ref{ch:semantical_analysis}). This pass determines
+also how many registers are needed to evalute an expression, this
+information is used by the code generator later.
+\item Code generation
+\item Optimizing of the assembler
+\item Assembler writing
+\end{enumerate}
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The scanner
 % The scanner
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The scanner}
 %% \chapter{The scanner}
+\label{ch:scanner}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The symbol tables
 % The symbol tables
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{The symbol tables}
 \chapter{The symbol tables}
+\label{ch:symbol_tables}
 
 
 The symbol table is used to store information about all
 The symbol table is used to store information about all
 symbols, declarations and definitions in a program.
 symbols, declarations and definitions in a program.
@@ -130,37 +161,42 @@ To make it more clear let's have a look at the fields of tdef:
 % The parse tree
 % The parse tree
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The parse tree}
 %% \chapter{The parse tree}
+\label{ch:parse_tree}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The parser
 % The parser
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The parser}
 %% \chapter{The parser}
+\label{ch:parser}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The semantical analysis
 % The semantical analysis
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The semantical analysis}
 %% \chapter{The semantical analysis}
+\label{ch:semantical_analysis}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The code generation
 % The code generation
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The code generation}
 %% \chapter{The code generation}
+\label{ch:code_generation}
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The assembler writers
 % The assembler writers
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{The assembler writers}
 \chapter{The assembler writers}
+\label{ch:assembler_writers}
 
 
 \fpc doesn't generate machine language, it generates
 \fpc doesn't generate machine language, it generates
 assembler which must be assembled and linked.
 assembler which must be assembled and linked.
 
 
 The assembler output is configurable, \fpc can create
 The assembler output is configurable, \fpc can create
-assembler for the GNU AS, the NASM (Netwide assembler) and
+assembler for the \file{GNU AS}, the \file{NASM} (Netwide assembler) and
 the assemblers of Borland and Microsoft. The default assembler
 the assemblers of Borland and Microsoft. The default assembler
-is the GNU AS, because it is fast and and available on
-many platforms. Why don't we use the NASM? It is 2-4 times
-slower than the GNU AS and it is created for
-hand-written assembler, while the GNU AS is designed
+is the \file{GNU AS}, because it is fast and and available on
+many platforms. Why don't we use the \file{NASM}? It is 2-4 times
+slower than the \file{GNU AS} and it is created for
+hand-written assembler, while the \file{GNU AS} is designed
 as back end for a compiler.
 as back end for a compiler.
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -366,7 +402,7 @@ procedure test;
 \section{Future plans}
 \section{Future plans}
 \label{se:future_plans}
 \label{se:future_plans}
 
 
-\Appendix
+\appendix
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Coding style guide
 % Coding style guide