From ac890513e4c507ce99a779f6d833684d5b92485d Mon Sep 17 00:00:00 2001 From: Dale Weiler Date: Sun, 6 May 2012 17:00:16 -0400 Subject: [PATCH] readme s/\t/ /g --- README | 368 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 184 insertions(+), 184 deletions(-) diff --git a/README b/README index 052082b..92a1489 100644 --- a/README +++ b/README @@ -32,109 +32,109 @@ completeness is represented below in a table. +-------------------+-----------------------------+------------------+ Design tree: - The compiler is intended to work in the following order: - Lexical analysis -> - Tokenization -> - Parsing: - Operator precedence: - Shynting yard algorithm - Inline assembly: - Usage of the assembler subsystem: - top-down parsing and assemblation no optimization - Other parsing: - recrusive decent - -> - Abstract syntax tree generation -> - Immediate representation (SSA): - Optimizations: - Constant propagation - Value range propogation - Sparse conditional constant propagation (possibly?) - Dead code elimination - Constant folding - Global value numbering - Partial redundancy elimination - Strength reduction - Common subexpression elimination - Peephole optimizations - Loop-invariant code motion - Inline expansion - Constant folding - Induction variable recognition and elimination - Dead store elimination - Jump threading - -> - Code Generation: - Optimizations: - Rematerialization - Code Factoring - Recrusion Elimination - Loop unrolling - Deforestation - -> - Binary Generation + The compiler is intended to work in the following order: + Lexical analysis -> + Tokenization -> + Parsing: + Operator precedence: + Shynting yard algorithm + Inline assembly: + Usage of the assembler subsystem: + top-down parsing and assemblation no optimization + Other parsing: + recrusive decent + -> + Abstract syntax tree generation -> + Immediate representation (SSA): + Optimizations: + Constant propagation + Value range propogation + Sparse conditional constant propagation (possibly?) + Dead code elimination + Constant folding + Global value numbering + Partial redundancy elimination + Strength reduction + Common subexpression elimination + Peephole optimizations + Loop-invariant code motion + Inline expansion + Constant folding + Induction variable recognition and elimination + Dead store elimination + Jump threading + -> + Code Generation: + Optimizations: + Rematerialization + Code Factoring + Recrusion Elimination + Loop unrolling + Deforestation + -> + Binary Generation File tree and explination: - gmqcc.h - This is the common header with all definitions, structures, and - constants for everything. + gmqcc.h + This is the common header with all definitions, structures, and + constants for everything. - error.c - This is the error subsystem, this handles the output of good detailed - error messages (not currently, but will), with colors and such. - - lex.c - This is the lexer, a very small basic step-seek lexer that can be easily - changed to add new tokens, very retargetable. - - main.c - This is the core compiler entry, handles switches (will) to toggle on - and off certian compiler features. - - parse.c - This is the parser which goes over all tokens and generates a parse tree - and check for syntax correctness. - - typedef.c - This is the typedef system, this is a seperate file because it's a lot more - complicated than it sounds. This handles all typedefs, and even recrusive - typedefs. - - util.c - These are utilities for the compiler, some things in here include a - allocator used for debugging, and some string functions. - - assembler.c - This implements support for assembling Quake assembler (which doesn't - actually exist untill now: documentation of the Quake assembler is below. - This also implements (will) inline assembly for the C compiler. - - README - This is the file you're currently reading - - Makefile - The makefile, when sources are added you should add them to the SRC= - line otherwise the build will not pick it up. Trivial stuff, small - easy to manage makefile, no need to complicate it. - Some targets: - #make gmqcc - Builds gmqcc, creating a `gmqcc` binary file in the current - directory as the makefile. - #make test - Builds the ir and ast tests, creating a `test_ir` and `test_ast` - binary file in the current directory as the makefile. - #make test_ir - Builds the ir test, creating a `test_ir` binary file in the - current directory as the makefile. - #make test_ast - Builds the asr test, creating a `test_ast` binary file in the - current directory as the makefile. - #make clean - Cleans the build files left behind by a previous build, as - well as all the binary files. - #make all - Builds the tests and the compiler binary all in the current - directory of the makefile. + error.c + This is the error subsystem, this handles the output of good detailed + error messages (not currently, but will), with colors and such. + + lex.c + This is the lexer, a very small basic step-seek lexer that can be easily + changed to add new tokens, very retargetable. + + main.c + This is the core compiler entry, handles switches (will) to toggle on + and off certian compiler features. + + parse.c + This is the parser which goes over all tokens and generates a parse tree + and check for syntax correctness. + + typedef.c + This is the typedef system, this is a seperate file because it's a lot more + complicated than it sounds. This handles all typedefs, and even recrusive + typedefs. + + util.c + These are utilities for the compiler, some things in here include a + allocator used for debugging, and some string functions. + + assembler.c + This implements support for assembling Quake assembler (which doesn't + actually exist untill now: documentation of the Quake assembler is below. + This also implements (will) inline assembly for the C compiler. + + README + This is the file you're currently reading + + Makefile + The makefile, when sources are added you should add them to the SRC= + line otherwise the build will not pick it up. Trivial stuff, small + easy to manage makefile, no need to complicate it. + Some targets: + #make gmqcc + Builds gmqcc, creating a `gmqcc` binary file in the current + directory as the makefile. + #make test + Builds the ir and ast tests, creating a `test_ir` and `test_ast` + binary file in the current directory as the makefile. + #make test_ir + Builds the ir test, creating a `test_ir` binary file in the + current directory as the makefile. + #make test_ast + Builds the asr test, creating a `test_ast` binary file in the + current directory as the makefile. + #make clean + Cleans the build files left behind by a previous build, as + well as all the binary files. + #make all + Builds the tests and the compiler binary all in the current + directory of the makefile. //////////////////////////////////////////////////////////////////////// ///////////////////// Quake Assembler Documentation //////////////////// @@ -144,95 +144,95 @@ produced by any existing QuakeC compiler, but made cleaner to use, (so that the location of various globals or strings are not required to be known). Constants: - Using one of the following valid constant typenames, you can declare - a constant {FLOAT,VECTOR,FUNCTION,FIELD,ENTITY}, all typenames are - proceeded by a colon, and the name (white space doesn't matter). - - Examples: - FLOAT: foo 1 - VECTOR: bar 1 2 1 - STRING: hello "hello world" - + Using one of the following valid constant typenames, you can declare + a constant {FLOAT,VECTOR,FUNCTION,FIELD,ENTITY}, all typenames are + proceeded by a colon, and the name (white space doesn't matter). + + Examples: + FLOAT: foo 1 + VECTOR: bar 1 2 1 + STRING: hello "hello world" + Comments: - Commenting assembly requires the use of either # or ; on the line - that you'd like to be ignored by the assembler. You can only comment - blank lines, and not lines assembly already exists on. - - Examples: - ; this is allowed - # as is this - FLOAT: foo 1 ; this is not allowed - FLOAT: bar 2 # neither is this - + Commenting assembly requires the use of either # or ; on the line + that you'd like to be ignored by the assembler. You can only comment + blank lines, and not lines assembly already exists on. + + Examples: + ; this is allowed + # as is this + FLOAT: foo 1 ; this is not allowed + FLOAT: bar 2 # neither is this + Functions: - Creating functions is the same as declaring a constant, simply use - FUNCTION followed by a colon, and the name (white space doesn't matter) - and start the statements for that function on the line after it - - Examples: - FLOAT: foo 1 - FLOAT: bar 2 - FUNCTION: test1 - ADD foo, bar, OFS_RETURN - RETURN - - FUNCTION: test2 - CALL0 test1 - DONE - + Creating functions is the same as declaring a constant, simply use + FUNCTION followed by a colon, and the name (white space doesn't matter) + and start the statements for that function on the line after it + + Examples: + FLOAT: foo 1 + FLOAT: bar 2 + FUNCTION: test1 + ADD foo, bar, OFS_RETURN + RETURN + + FUNCTION: test2 + CALL0 test1 + DONE + Internal: - The Quake engine provides some internal functions such as print, to - access these you first must declare them and their names. To do this - you create a FUNCTION as you currently do. Adding a $ followed by the - number of the engine builtin (negated). - - Examples: - FUNCTION: print $4 - FUNCTION: error $3 + The Quake engine provides some internal functions such as print, to + access these you first must declare them and their names. To do this + you create a FUNCTION as you currently do. Adding a $ followed by the + number of the engine builtin (negated). + + Examples: + FUNCTION: print $4 + FUNCTION: error $3 Misc: - There are some rules as to what your identifiers can be for functions - and constants. All indentifiers mustn't begin with a numeric digit, - identifiers cannot include spaces, or tabs; they cannot contain symbols, - and they cannot exceed 32768 characters. Identifiers cannot be all - capitalized either, as all capatilized identifiers are reserved by the - assembler. - - Numeric constants cannot contain special notation such as `1-e10`, all - numeric constants have to be numeric, they can contain decmial points - and signs (+, -) however. - - Constants cannot be assigned values of other constants, their value must - be fully expressed inspot of the declartion. - - No two identifiers can be the same name, this applies for variables allocated - inside a function scope (despite it being considered local). - - There exists one other keyword that is considered sugar, and that - is AUTHOR, this keyword will allow you to speciy the AUTHOR(S) of - the assembly being assembled. The string represented for each usage - of AUTHOR is wrote to the end of the string table. Simaler to the - usage of constants and functions the AUTHOR keyword must be proceeded - by a colon. - - Examples: - AUTHOR: "Dale Weiler" - AUTHOR: "Wolfgang Bumiller" - - Colons exist for the sole reason of not having to use spaces after - keyword usage (however spaces are allowed). To understand the - following examples below are equivlent. - - Example 1: - FLOAT:foo 1 - Example 2: - FLOAT: foo 1 - Example 3: - FLOAT: foo 2 - - variable amounts of whitespace is allowed anywhere (as it should be). - think of `:` as a delimiter (which is what it's used for during assembly). - + There are some rules as to what your identifiers can be for functions + and constants. All indentifiers mustn't begin with a numeric digit, + identifiers cannot include spaces, or tabs; they cannot contain symbols, + and they cannot exceed 32768 characters. Identifiers cannot be all + capitalized either, as all capatilized identifiers are reserved by the + assembler. + + Numeric constants cannot contain special notation such as `1-e10`, all + numeric constants have to be numeric, they can contain decmial points + and signs (+, -) however. + + Constants cannot be assigned values of other constants, their value must + be fully expressed inspot of the declartion. + + No two identifiers can be the same name, this applies for variables allocated + inside a function scope (despite it being considered local). + + There exists one other keyword that is considered sugar, and that + is AUTHOR, this keyword will allow you to speciy the AUTHOR(S) of + the assembly being assembled. The string represented for each usage + of AUTHOR is wrote to the end of the string table. Simaler to the + usage of constants and functions the AUTHOR keyword must be proceeded + by a colon. + + Examples: + AUTHOR: "Dale Weiler" + AUTHOR: "Wolfgang Bumiller" + + Colons exist for the sole reason of not having to use spaces after + keyword usage (however spaces are allowed). To understand the + following examples below are equivlent. + + Example 1: + FLOAT:foo 1 + Example 2: + FLOAT: foo 1 + Example 3: + FLOAT: foo 2 + + variable amounts of whitespace is allowed anywhere (as it should be). + think of `:` as a delimiter (which is what it's used for during assembly). + //////////////////////////////////////////////////////////////////////// /////////////////////// Quake C Documentation ////////////////////////// //////////////////////////////////////////////////////////////////////// -- 2.39.2