mimimiC

mimimiC C programlama diliyle gelistirilmis yine c dilinde yazilmis olan okudugu kaynak kodunu analiz eden, derleyen ve calistiran bir derleyicidir. Projenin amaci C dilinde bir derleyici gelistirilmesi ve kodlanmasidir. mimimiC sadece C de yazilmis olan kaynak kodunu  kabul eden, C yazilim dilinin bir cok özelliklerini bünyesinde barindiran ve bünyesinde barindirdigi islemler icin kabul eden, sanal makine (virtual machine) icin RISC kodu üreten cok pasolu (native multipass) derleyicidir. mimimiC Linux (Debian) isletim sistemiyle gelistiriplmis olup sadece 32-Bit Linux isletim sistemlerinde calismaktadir.

mimimiC derleyici tarafindan kabul gören anahtar kelimeler asagida tanimlanmistir:

Num. Anahtar kelime Anlami Num. Anahtar kelime   Anlami
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define IDENTIFIER
#define INT
#define CHAR
#define STRUCT
#define STRUCTCHARACTER
#define ANDOPERATOR
#define CHARACTER
#define NUMERIC
#define STRING
#define IF
#define ELSE
#define WHILE
#define TYPEDEF
#define INCLUDE
#define RETURN
#define ERROR
#define ENDOFFILE
#define HASH
#define ADDITION
#define SUBTRACTION
#define DIVISION
// deg ve fonk. id.
// int
// char
// struct
// struct symbol
// &
// a|…z , A| …|Z
// 0|…|9
// string
// if
// else
// while
// typedef
// include
// return
// error
// Dosya sonu
// #
// +
// -
// /
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#define MULTIPLICATION
#define GREATER
#define LESSER
#define LOGICALAND
#define LOGICALOR
#define MODULO
#define DOT
#define COMMA
#define SEMICOLON
#define LOGICALNOT
#define LEFTPARANTHESIS
#define RIGHTPARANTHESIS
#define LEFTBRACKET
#define RIGHTBRACKET
#define LEFTBRACE
#define RIGHTBRACE
#define SINGLEQUOTE
#define DOUBLEQUOTE
#define ASSIGNMENT
#define BACKSLASH
#define NULLCHARACTER
// *
// >
// <
//&&
// ||
// %
// .
// ,
// ;
// !
// (
// )
// [
// ]
// {
// }
// ‘
// „
// =
// \
// sifir

Sanal makine tarafindan kabul edilen  mimimiC RISC ciktisi:

Komut  Anlami Komut  Anlami
ADD Addition R[a]=R[b]+R[c]; PSH Push On Stack R[b]=R[b]-c;
int col=(R[b])%4;
memory[R[b]/4][col]=R[a];
SUB Subtraction R[a]=R[b]-R[c]; BEQ Branch If Equal
if(R[a]!=0){nxt=PC+c;}
MUL Multiplication R[a]=R[b]*R[c]; BNE Branch Not Equal
if(R[a]!=0){nxt=PC+c;}
DIV Division if(R[c]!=0){R[a]=R[b]/R[c];} BLT Branch If Less Than
if(R[a]<0){nxt=PC+c;}
MOD Modulo R[a]=R[b]%R[c]; BGE Branch If Greater Than Or Equal
if(R[a]<=0){nxt=PC+c;}
CMP Compare R[a]=R[b]-R[c]; BLE Branch If Less Than Or Equal
if(R[a]==0||R[a]<=0){nxt=PC+c}
OR Logical Or R[a]=(R[b]||R[c]); BGT Branch If Greater Than
if(R[a]>0){nxt=PC+c;}
AND Logical And R[a]=(R[b]&&R[c]); JSR Jump To Subroutine R[31]=PC+1; nxt= c;
ADDI Immediate Addition R[a]=R[b]+c; RET Returnnxt=R[c];
SUBI Immediate Subtraction R[a]=R[b]-c; FOP File Open
ANDI Immediate And R[a]=(R[b]&&c); FCL File Close
LDW Load Word int col=((R[b]+c))%4;
R[a= memory[(R[b]+c)/4][col];
FRD File Read
POP Pop On Stack int col=(R[b])%4;
R[a= memory[R[b]/4][col]; R[b=R[b]+c;
FWR File Write
STW Store Word int col=((R[b]+c))%4;
memory[(R[b]+c)/4][col]=R[a];

Özellikler

  1. Basit (primitif) veri tipileri ve karmasik veri tipleri (int, char, struct, array(int, char))
  2. Kontrol yapilari (if, else, while) coklu girisikleme
  3. Tip tanimlama/Structs (typedef typname aliasname; , typedef struct { int re, int im; } complx; )
  4. Aritmetik und mantiksal operatörler (+, -, *, /, %, ==, !=, >, < , >=, <= ||, &&)
  5. Infix yazim tarziyla istenildigi kadar parentez kombinasyonu
  6. Kaynak kodunda sözdizimi (syntax) hatalarinin tanimlanmasi icin hata yönetimi
  7. Arrays (tek boytulu)
  8. Isaretci(&) (Pointer)
  9. Fonsiyonlar (deger ile cagirma, referans ile cagirma)
  10. File I/O (FOP (open), FCL (close), FRD (read), FWR (write))
  11. Ayri derleme (separat)
  12. Sembol tabelasi
  13. EBNF
  14. Heap
  15. Baglayici (Linker)
  16. Obje dosyasi olusturma
  17. Sanal Makine
  18. RISC kodu üretme

Daha detayli bilgi Download sayfasinda bululabilir.

Y. Özbek, M. Kleber