<commit_before>Projet Compilateur 3INFO
=========

Le but est d'implémenter un compilateur Yaka vers assembleur intel 8086, en utilisant javacc.

Projet durant presque un semestre, il s'agit de l'aboutissement des modules d'assembleur et de grammaire et languages.


Syntaxe Yaka
=========

Un exemple sera probablement plus explicite, même si la grammaire est nécessaire pour saisir toutes les subtilités du language.


Exemple
========

	PROGRAMME max2
	VAR ENTIER i,j, max;
	    LIRE(i);
	    ALALIGNE;
	    LIRE(j);
	    ALALIGNE;

	    SI i > j ALORS
	        max = i;
	    SINON
	        max = j;
	    FSI;
	    ECRIRE(max);

	    ECRIRE("IT'S THE FINAL COUNTDOWN")
	    ALALIGNE;
	    TANTQUE max > 0 ALORS
	    	ECRIRE(max);
	    	ALALIGNE;
	    	max = max - 1;
	    FAIT;
	FPROGRAMME



Grammaire
========

- prog ::= PROGRAMME ident bloc FPROGRAMME
- bloc ::= { declConst }* { declVar }* suiteInstr

- declConst ::= CONST defConst {,defConst}*
- defConst ::= ident = valConst
- valConst ::= entier | ident | VRAI | FAUX

- declVar ::= VAR type ident {, ident }*
- type ::= ENTIER | BOOLEEN

- suiteInstr :: = {instruction {; {instruction}+ }* }+

- instruction ::= affectation | lecture | ecriture | iteration | conditionnelle

- affectation ::= ident = expr

- lecture ::= LIRE ( ident )

- ecriture ::= { ECRIRE ( expression | chaine ) } | ALALIGNE

- iteration ::= TANTQUE expr FAIRE suiteInstr FAIT

- conditionnelle ::= SI expr ALORS suiteInstr {SINON suiteInstr}+ FSI


- expr ::= terme { opAdd terme }*
- terme ::= facteur { opMult facteur }*
- facteur ::= opNeg primaire | primaire
- valeur ::= entier | ident | VRAI | FAUX
- opRel ::= > | < | >= | <= | = | <>
- opAdd :: = + | - | OU
- opMult ::= * | / | ET
- opNef ::= - | NON


Howto
=========

Requirements
========
- Jdk
- javacc 5
- python3


Compiling
========

	javacc Yaka.jj
	javac *.java

Running
========

	java Yaka <fileToCompile>

Multiple tests
========

	edit the test list in launchTest.py
	./launchTest.py<commit_msg>readme, again<commit_after>Projet Compilateur 3INFO
================

Le but est d'implémenter un compilateur Yaka vers assembleur intel 8086, en utilisant javacc.

Projet durant presque un semestre, il s'agit de l'aboutissement des modules d'assembleur et de grammaire et languages.


Syntaxe Yaka
========

Un exemple sera probablement plus explicite, même si la grammaire est nécessaire pour saisir toutes les subtilités du language.


Exemple
====

	PROGRAMME max2
	VAR ENTIER i,j, max;
	VAR BOOLEEN c1,c2;
	    LIRE(i);
	    ALALIGNE;
	    LIRE(j);
	    ALALIGNE;

	    SI i > j ALORS
	        max = i;
	    SINON
	        max = j;
	    FSI;
	    ECRIRE(max);

	    ECRIRE("IT'S THE FINAL COUNTDOWN")
	    ALALIGNE;
	    TANTQUE max > 0 ALORS
	    	ECRIRE(max);
	    	ALALIGNE;
	    	max = max - 1;
	    FAIT;

	    c1 = VRAI;
	    c2 = FAUX;
	    ECRIRE(c1 ET c2);
	FPROGRAMME



Grammaire
====

- prog ::= PROGRAMME ident bloc FPROGRAMME
- bloc ::= { declConst }* { declVar }* suiteInstr

- declConst ::= CONST defConst {,defConst}*
- defConst ::= ident = valConst
- valConst ::= entier | ident | VRAI | FAUX

- declVar ::= VAR type ident {, ident }*
- type ::= ENTIER | BOOLEEN

- suiteInstr :: = {instruction {; {instruction}+ }* }+

- instruction ::= affectation | lecture | ecriture | iteration | conditionnelle

- affectation ::= ident = expr

- lecture ::= LIRE ( ident )

- ecriture ::= { ECRIRE ( expression | chaine ) } | ALALIGNE

- iteration ::= TANTQUE expr FAIRE suiteInstr FAIT

- conditionnelle ::= SI expr ALORS suiteInstr {SINON suiteInstr}+ FSI


- expr ::= terme { opAdd terme }*
- terme ::= facteur { opMult facteur }*
- facteur ::= opNeg primaire | primaire
- valeur ::= entier | ident | VRAI | FAUX
- opRel ::= > | < | >= | <= | = | <>
- opAdd :: = + | - | OU
- opMult ::= * | / | ET
- opNef ::= - | NON


Howto
========

Requirements
====

- Jdk
- javacc 5
- python3


Compiling
====

	javacc Yaka.jj
	javac *.java

Running
====

	java Yaka <fileToCompile>

Multiple tests
====

	edit the test list in launchTest.py
	./launchTest.py
{'fraction_non_alphanumeric': 0.14633546483030005, 'fraction_numerical': 0.006394490900147565, 'mean_word_length': 2.9332688588007736, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '437306', 'n_tokens_mistral': 1611, 'n_tokens_neox': 1482, 'n_words': 420}