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
- Basit (primitif) veri tipileri ve karmasik veri tipleri (int, char, struct, array(int, char))
- Kontrol yapilari (if, else, while) coklu girisikleme
- Tip tanimlama/Structs (typedef typname aliasname; , typedef struct { int re, int im; } complx; )
- Aritmetik und mantiksal operatörler (+, -, *, /, %, ==, !=, >, < , >=, <= ||, &&)
- Infix yazim tarziyla istenildigi kadar parentez kombinasyonu
- Kaynak kodunda sözdizimi (syntax) hatalarinin tanimlanmasi icin hata yönetimi
- Arrays (tek boytulu)
- Isaretci(&) (Pointer)
- Fonsiyonlar (deger ile cagirma, referans ile cagirma)
- File I/O (FOP (open), FCL (close), FRD (read), FWR (write))
- Ayri derleme (separat)
- Sembol tabelasi
- EBNF
- Heap
- Baglayici (Linker)
- Obje dosyasi olusturma
- Sanal Makine
- RISC kodu üretme
Daha detayli bilgi Download sayfasinda bululabilir.
Y. Özbek, M. Kleber
04.03.2012