Skip to content

Alexander7474/Compilateur

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mes ajouts

Du code pascal d'exemple est dans le dossier PascalTestCode

Les fonctions ajoutés par moi même se trouve au ligne 544-784
Les autres parties du code modifiés ou ajoutés par moi même sont entre des commentaires //CODE AJOUTE------------

Fonctions ajoutés:

// ForStatement := "For" ID ":=" Expression ("TO"|"DOWNTO") Expression "DO" Statement

Une boucle for avec un STEP fonctionnel
Exemple: for_loop_to_step.p for_loop_downto_step.p for_loop.p

//CaseListELement := [Constant ":" Statement]
//CaseStatement := "CASE" ID "OF" CaseListElement "END"

Le SwitchCase à été optimisé pour les valeurs entière avec peut d'écart, il utilise une jump table de la même manière que certain compilateur C/C++
Si l'écart est trop grand, le case est simplement une suite de cmp/je
L'écart max d'utilisation de la jump table est défini par la constante MAX_CASE_GAP_JMPT
Exemple: case_big_gap_int.p case_tiny_gap_int.p case_char.p

CERIcompiler

A simple compiler. From : Pascal-like imperative LL(k) langage To : 64 bit 80x86 assembly langage (AT&T)

Download the repository :

git clone git@framagit.org:jourlin/cericompiler.git

Build the compiler and test it :

make test

Have a look at the output :

gedit test.s

Debug the executable :

ddd ./test

Commit the new version :

git commit -a -m "What's new..."

Send to your framagit :

git push -u origin master

Get from your framagit :

git pull -u origin master

This version Can handle :

// Program := [DeclarationPart] StatementPart
// DeclarationPart := "[" Identifier {"," Identifier} "]"
// StatementPart := Statement {";" Statement} "."
// Statement := AssignementStatement
// AssignementStatement := Identifier ":=" Expression

// Expression := SimpleExpression [RelationalOperator SimpleExpression]
// SimpleExpression := Term {AdditiveOperator Term}
// Term := Factor {MultiplicativeOperator Factor}
// Factor := Number | Letter | "(" Expression ")"| "!" Factor
// Number := Digit{Digit}
// Identifier := Letter {(Letter|Digit)}

// AdditiveOperator := "+" | "-" | "||"
// MultiplicativeOperator := "*" | "/" | "%" | "&&"
// RelationalOperator := "==" | "!=" | "<" | ">" | "<=" | ">="
// Digit := "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9"
// Letter := "a"|...|"z"

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors