Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Manipulation de fichiers
- # File.write(fichier, texte) - écrit à la suite du fichier
- # File.rewrite(fichier, texte) - réécrit tout le fichier
- # File.writeline(fichier, texte) - écrit dans une nouvelle ligne du fichier (à la fin)
- # File.writefirstline(fichier, texte) - écrit dans une nouvelle ligne du fichier (au début)
- # File.open(fichier, mode) - permet d'ouvrir le fichier avec un mode
- # File.read(fichier) - permet de lire le fichier
- # File.readline(fichier, ligne) - permet de lire une ligne spécifique du fichier
- # File.close(fichier) - permet de fermer le fichier
- # Manipulation des textes
- # String.lower(texte) -
- # String.upper(texte) -
- # String.length(texte) -
- # Manipulation de la console
- # Console.clean. - Efface tout le contenu (ce qui est écrit) de la console
- # Console.print "Texte" - Affiche un texte sur la ligne courante
- # Console.println "Texte" - Affiche un texte sur une nouvelle ligne
- # Manipulation des int et des float
- # Math.round 12.5 -
- # Math.ceil 12.5 -
- # Math.floor 12.5 -
- # Math.random 12.5 -
- # Manipulation des tableaux
- # Array.in(element, array) - Retourne true si l'element se trouve dans l'array
- # Array.empty(array) -
- # Array.size(array) -
- # Définition des variables globales
- # *Non obligatoire signifie qu'il est possible de créer la fonction dans un script BM
- # mais c'est mieux si nous on créer la fonction plutôt que de déléguer ça aux développeurs
- opcodes = [
- # fonction entre adresse
- ["nop", '\0', "\x00\x00"], #
- ["#", '\0', "\x00\x01"], #
- ["if", ' ', "\x00\x02"], #
- ["elseif", ' ', "\x00\x03"], #
- ["else", '\0', "\x00\x04"], #
- ["end", '\0', "\x00\x05"], #
- ["continue", '\0', "\x00\x06"], #
- ["break", '\0', "\x00\x07"], #
- ["Program.exit", '\0', "\x01\x00"], #
- ["Console.clean", '\0', "\x02\x01"], #
- ["Console.print", ' ', "\x02\x01"], #
- ["Console.println", ' ', "\x02\x02"], #
- ["Console.sleep", ' ', "\x02\x03"], #
- ["String.lower", '(', "\x03\x00"], #
- ["String.upper", '(', "\x03\x01"], #
- ["String.length", '(', "\x03\x02"], #
- ["Math.floor", '(', "\x04\x00"], #
- ["Math.round", '(', "\x04\x01"], #
- ["Math.ceil", '(', "\x04\x02"], #
- ["Math.random", '(', "\x04\x03"], #
- ["Array.in", '(', "\x05\x00"], # Non obligatoire
- ["Array.empty", '(', "\x05\x01"], # Non obligatoire
- ["Array.size", '(', "\x05\x02"], # Non obligatoire
- ["File.open", '(', "\x06\x00"], #
- ["File.write", '(', "\x06\x01"], #
- ["File.writeLine", '(', "\x06\x02"], #
- ["File.writeFirstLine", '(', "\x06\x03"], #
- ["File.rewrite", '(', "\x06\x04"], #
- ["File.isEmpty", '(', "\x06\x05"], #
- ["File.read", '(', "\x06\x06"], #
- ["File.readLine", '(', "\x06\x07"], #
- ["File.close", '(', "\x06\x08"], #
- ["File.countLine", '(', "\x06\x09"] #
- ]
- nbrWarnings = 0
- nbrErrors = 0
- # Fonction de compilation
- compile (File Src, File Dst)
- Data = [][] # contient le fichier source [ligne][colonne]
- nbrLignes = File.countLine(Src) # nombre de lignes du fichier
- print "Compilation de \"" . Src . "\" -> \"" . Dst . "\"...\n"
- if !File.open(Src, "r") # Si le fichier source est inaccessible en lecture on affiche une erreur
- exit "Le fichier source \"" . Src . "\" n'a pu être ouvert en lecture."
- end
- for i = 0 to nbrLignes
- if File.readline(Src, Data[i]) != 1
- exit "Le fichier source \"" . Src . "\" n'a pu être lu correctement."
- end
- File.close(fpSrc)
- end
- if File.isEmpty(Src)
- exit "Le fichier source \"" . Src . "\" est vide.\n"
- end
- if File.open(Dst, "wb") == null # Si le fichier de destination n'a pas pu être ouvert en écriture on affiche une erreur
- exit "Le fichier de destination \"" . Dst . "\" n'a pu être ouvert en écriture."
- end
- File.write(Dst, "BM01")
- for y = 0 to nbrLignes
- if Data[y][0] == '\0'
- continue
- end
- for x = 0 to Array.size(opcodes)
- if Array.in(Data[y][x], opcodes)
- File.write(Dst, [j].code)
- k = 0
- # ---------------------------- #
- # début partie en modification #
- # ---------------------------- #
- if [j].nextCar != '\0'
- if [j].nextCar == ' '
- for (k=strlen (opcodes [j].str) ; Data [y][k]==' ' && k < strlen (Data [y]) ; k++)
- end
- else
- for (k=strlen (opcodes [j].str) ; (Data [y][k]!=opcodes [j].nextCar || Data [y][k]==' ') && k < strlen (Data [y]) ; k++)
- end
- end
- if k >= strlen (Data[y])
- exit "Instruction invalide dans le fichier " . Src . ":" . (y + 1) . "."
- break
- end
- end
- # -------------------------- #
- # fin partie en modification #
- # -------------------------- #
- else.
- exit "Instruction inconnue : \"" . Data[y] . "\" dans le fichier " . Src . ":" . (y + 1) . "."
- end
- end
- end
- File.close(Dst)
- print "Compilation terminée (" . nbrErrors . " erreur(s) et " . nbrWarnings . " warning(s))"
- if (nbrErrors > 0)
- return false
- end
- return true
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement