Jump to content
'ra

Bahasa Aturcara Melayu?

Recommended Posts

Hi!

Agak-agak bilakah kita dapat melihat perisian pengaturcaraan buatan tempatan. Tidak kiralah dalam bahasa Inggeris ke, Melayu ke, ada tak di antara saudara/saudari yang lebih berpengetahuan dari saya ni, mampu membina satu compiler ataupun interpreter ringkas?

Melihatkan semakin banyak perisian yang penghasil perisian (compiler) kini dalam bentuk sumber terdedah (Open Source), tidak siapakah dari kita yang mempunyai keinginan untuk membina satu penghasil perisian yang berciri-ciri pemikiran tempatan (kita)?

Ataupun, membina satu penterjemah perisian seperti dari bahasa Basic ke Assembly yang menyokong pelantar/flatform 32bit?

Diharapkan, sudi-sudilah membincangkan hal ini. Saya mempunyai minat yang tinggi untuk menyertai sebarang projek yang mempunyai dasar open source untuk membina bahasa pengaturcaraan kita sendiri. Sekurang-kurangnya, sebagai penguji-gunanya (beta-tester).

Share this post


Link to post
Share on other sites

hai again..

anyway kalau nak buat satu compiler kena guna bahasa pengaturcaraan SML maksud nyer functional language..

anyway memang masa kat universiti dulu kita org kena buat bahasa sendiri base on yg ada kat internet...

cuba check kat functional programming atau SML.. now SML.NET dah kuar..

anyway memang lama tinggal benda nii..

tapi b4 this memang minat nak buat bahasa sendiri but bila fikir2 bahasa melayu memang tak sesuai.. cu check this code i mean syntax.

kalau i = 5 kemudian

keluar

kalautak ...

tamat kalau.

anyway dulu buat macam ni tapi hmm i dont know la .. maybe we need some new syntax for malay..

what da ya think

anyway i really like to continued this thing using sml.net...

or other way we can develop RAD for malay.. like using VB or REalbasic or create new language like VBMalay or somethin else..

have an idea??

Share this post


Link to post
Share on other sites

sudah ada tetapi tidak dikormesialkan (internal use only). apa yang dia orang buat adalah scripting engine dengan menggunakan bahasa simplified c++ & java. vm pula based on java vm machine.

Share this post


Link to post
Share on other sites

tapi b4 this memang minat nak buat bahasa sendiri but bila fikir2 bahasa melayu memang tak sesuai.. cu check this code i mean syntax.

kalau i = 5 kemudian

keluar

kalautak ...

tamat kalau.

anyway dulu buat macam ni tapi hmm i dont know la .. maybe we need some new syntax for malay..

biggrin.gif memang kelakar. tapi ia boleh diperbaiki lagi sintaksnya dengan seringkas yang boleh. Contohnya:

Jika i = 5 Maka           ' If.. then
    Benda.Kiri = 14       ' Object.Left i.e. Form
    Benda.Atas = 20       ' Object.Top
    Benda.Pamer           ' Object.Show
JikaLain i = 7 Maka       ' ElseIf..then
    Benda.Sorok           ' Object.Hide
Lain                      ' Else
    Borang.Tutup          ' Object.Close
Dah Jika                  ' End If
Kalau diperhatikan betul-betul, ianya macam bahasa pasar. Yang penting bahasa yang mudah tu ramai yang faham dan senang nak belajar. Kalau nak kira mula-mula Basic keluar dulu, orang putih tu ketawakan kerana guna 'broken language'. Nak simple punya pasal, lama-lama semua orang tahu apa itu Basic compiler. Tu Bill Gates punya kerjalah, dia tak tahu programming. Partner dia Allen sape ntah seorang programmer. Teruk dia kena kerjakan mengubah-suai Basic compiler yang original. Agak sukar juga kalau nak pilih perkataan yang sesuai untuk Jenis Data Pernomboran seperti Long, Short, Single, Byte, Word, Dword dan Double. Tapi boleh cuba juga, macam:
Nak Abu     sbg Luas    'Dim x As Long
Nak Siti    sbg Dekat   'Dim x As Short
Nak Suiz    sbg Tunggal 'Dim x As Single
Nak Tombol  sbg Ganda   'Dim x As Double
Nak Secubit sbg Bait    'Dim x As Byte
Nak Nilai   sbg Nombor  'Dim x As Integer
Nak Julie   sbg BerDua  'Dim x As Dword
Nak Joe     sbg SeDua   'Dim x As Word

SiLuas  Karim = 1        'DEFLNG x  sama dgn DIM x AS LONG
SiDekat Labu (1 hingga 10) = {1,2,3,4,5,6,7,8,9,10}

Saya rasa tak sesusah yang dijangka dalam pemilihan sintaks untuk arahan-arahan dan jenis-jenis data. Cuma bagi pengaturcara yang dah biasa dengan bahasa HLL Inggeris akan merasa kekok. Bagi orang baru, ianya boleh masuk otak lebih pantas dari menghabiskan secawan kopi sambil bersembang kat kedai mamak.

Sebaik-baiknya, ia bermula dengan sesuatu yang ringkas dan menangani isu pengiraan dulu sebelum sintaks dan object untuk fungsi-fungsi yang lebih kompleks. Ataupun suatu experiment boleh dilakukan menggunakkan perisian yang telah ada dengan menggunakan sintaks directive, seperti:

$DEFINE SBG  AS

$DEFINE LUAS LONG

$DEFINE JIKA IF

$DEFINE LAIN ELSE

$DEFINE DAH  END

Kemudian secara beransur-ansur, pemindahan kod asas ke 'compiler' Melayu dilakukan setelah ujian dasar memberikan hasil yang memuaskan.

Ini hanyalah pandangan secara logik ringkas saya sebagai orang biasa.

Share this post


Link to post
Share on other sites

kalau awak bersungguh2 nak buat...

kan bagus awak mulakan dulu...

nanti ada hasil sket..so orang boleh tengok dan join sekali

Hi zeph,

Keinginan tu ada. Masalahnya macam bertepuk sebelah tangan. Saya cuma menguasai satu bahasa aturcara saya iaitu Basic menggunakan Rapid-Q basic. Jadi, jika saya nak membuat sekurang-kurangnya 'translator' ke bahasa aturcara yang lain, kenalah mendalami bahasa aturcara yang lagi satu.

Jika dilakukkan dalam projek berkumpulan, contohnya kod akhir 'compiler' Melayu ini akan disusun-ikat menggunakan Assembler seperti Fasm, kenalah ada salah seorang dari ahli kumpulan itu tahu bahasa Assembly Fasm. Dengan adanya intergrasi dua pengetahuan ini pastinya prototaip awal dapat dihasilkan dan diuji.

Lebih-lebih lagi saya tiada asas pendidikkan IT peringkat tinggi, untuk mempelajari satu lagi bahasa aturcara secara sendirian akan mengambil masa yang agak panjang. Yang ada cuma ilham dalam kepala ni je. Jadi kena cari 'team' nak buat projek ni. Barulah boleh Ilham tu di turunkan ke atas kertas sebagai 'blue-print' untuk model 'compiler' Melayu ni..

Pada pendapat patiklah, pacal yang hina ni rolleyes.gif

Share this post


Link to post
Share on other sites

benda ni xmustahil.. cuma pertama sekali kena buat kajian terperinci untuk senarai term dlm bahasa melayu yg akan digunakan :

contohnye utk "if"... nak guna perkataan "JIKA" ke, "andaikata" ke, "bilamana" ke, "jikalau" ke, "kalau" ke, etc. pasal sume perkataan ni merefer pada perkataan yg sama ("if")...

jadi selagi pemilihan perkataan tu masih tersangkut... xbole la proceed ke next stage (create compiler ape sume)

Share this post


Link to post
Share on other sites

yang pastinya... benda ni bukannya boleh dikomersilkan.. dan hanya utk kegunaan orang malaysia yang faham bahasa melayu. projek ni hanya utk hobbyist..

and kalau berjaya.. memang tak dinafikan berapa banyak ilmu pengetahuan yg kita dapat timba...

1. yang penting sekali macam mana nak design language..limitation dia, oop ke structural, etc.

2. compiler/interpreter construction

links:

http://dinosaur.compilertools.net/

http://epaperpress.com/lexandyacc/index.html

http://catalog.compilertools.net/

good reading

http://www.softpanorama.org

Edited by zeph

Share this post


Link to post
Share on other sites

jadi selagi pemilihan perkataan tu masih tersangkut... xbole la proceed ke next stage (create compiler ape sume)

Pada sayalah, perkataan untuk sintaks/arahan adalah hasil sebuah 'compiler'. 'Compiler' tersebut belum dihasilkan lagi. Jadi kerja asas ialah membuat enjin 'compiler' itu dahulu.

yang pastinya... benda ni bukannya boleh dikomersilkan.. dan hanya utk kegunaan orang malaysia yang faham bahasa melayu. projek ni hanya utk hobbyist..

Wawasannya adalah utk jangka masa yg panjang. Bila ada Penyusun-ikat (compiler) dalam bahasa Melayu, lebih ramai lagi akan belajar mengenainya. Walaupun utk perbelajaran, ianya menyediakan pengetahuan asas utk kumpulan pelajar dalam teknologi perisian. Bila mereka sudah biasa dengan pengaturcaraan asas, memasuki institusi pengajian untuk memperlajari teknologi penghasilan perisian menjadi lebih mudah. Lebih ramai yang mempelajarinya, lebih ramai Graduan dalam bidang ini boleh menampung keperluan didalam teknologi perisian. (mimpi disiang hari la ko 'ra...). laugh.gif

Sememangnya didalam process penghasilannya, hobbyist menjadi faktor menyumbang kepada teknologi baru. Bila hasilnya diperolehi, barulah ada pihak-pihak swasta dan persorangan yang bermurah hati untuk menyumbangkan sokongan dalam bentuk material seperti wang ataupun peralatan sokongan untuk memajukan lagi hasilnya. Dari sinilah peruntukkan seperti ruang web dan lain-lain peralatan datang dengan sendirinya. Cuma di Malaysia ni, saiznya adalah kecil. Kecualilah individu2 dan pihak2 berkaitan dari negara jiran kita (Indonesia dan Singapura) juga menaruh minat kepada projek ini maka saiz sokongannya akan menjadi lebih besar. Itulah kelebihan Open-source. Jika hanya utk keuntungan hari ini saja, projek semacam ini tak akan menjadi kenyataan di hari perancangannya lagi. Kecualilah ianya dihasilkan oleh Syarikat komersil. Itupun Bajet R&D dan pembangunan terlalu tinggi kerana syarikat komersil kena mengeluarkan produk yang berkualiti sebelum boleh menjualkannya. Maka, risiko dan tekanannya amat tinggi.

Berbeza bagi hobbyist, mereka melakukan kerana kepuasan, peningkatan upaya dan pengetahuan diri sendiri dan tiada tekanan dalam projek seperti ini. Ini kerana walau macamana pun hasilnya, ianya adalah untuk orang yang berminat sahaja. Jika ianya sangat bagus, lebih ramai lagi yang berminat dan ceritanya akan berterusan...

;------------------------------

Kembali kepada topik asal, ini adalah rujukkan utk dikongsi bersama yang saya sediakan hasil dari permerhatian dan bacaan yang terdapat di Internet. Kemungkinan ada beberapa kesilapan kerana kurang pengetahuan saya terhadap bahasa pengaturcaraan yang lain. Diharapkan silalah perbetulkan yang mana salah.

Perbandingan arahan-arahan pengiraan bahasa2 pengaturcaraan

-----------+-----------+-----------+----------------+----------------
    Basic   |  Pascal   |   C/C++   |   Assembler    | Komen(Asm Melayu?)
-----------+-----------+-----------+----------------+----------------
    A=0     |  A:=0;    |  A=0;     |   mov A,0      | masuk 0    ke A
-----------+-----------+-----------+----------------+----------------
    A=A+1   |  A:=A+1;  |  A++;     |   inc A        | tambah 1   ke A
-----------+-----------+-----------+----------------+----------------
    A=A+B   |  A:=A+B;  |  A=A+B;   |   add A,B      | campur B   ke A
-----------+-----------+-----------+----------------+----------------
    A=B*6   |  A:=B*6;  |  A=B*6;   |   mov eax,B    | masuk B    ke eax
            |           |           |  imul eax,6    | darab 6    ke eax
            |           |           |   mov A,eax    | masuk eax  ke A
-----------+-----------+-----------+----------------+----------------
   A=B*C+D  | A:=B*C+D; |  A=B*C+D; |   mov eax,B    | masuk B    ke eax
            |           |           |   mov ebx,C    | masuk C    ke ebx
            |           |           |  imul ebx      | darab ebx  ke eax
            |           |           |   add eax,D    | campur D   ke eax
            |           |           |   mov A,eax    | masuk eax  ke A
-----------+-----------+-----------+----------------+----------------
  H=X:X=Y   | H:=X;X:=Y;| H=X;X=Y;  |   mov eax,X    | masuk X    ke eax
  Y=H       | Y:=H;     | Y=H;      |  xchg Y,eax    | salin eax  ke Y
            |           |           |   mov x,eax    | masuk eax  ke X
-----------+-----------+-----------+----------------+----------------
  A=B/15    | A:=B div  |  A=B/15;  |   xor edx,edx* | lekat edx* ke edx
            | 15;       |           |   mov eax,B    | masuk B    ke eax
            |           |           |   mov ebx,15   | masuk 15   ke ebx
            |           |           |  idiv ebx      | belah ebx  ke eax
            |           |           |   mov A,eax    | masuk eax  ke A
-----------+-----------+-----------+----------------+----------------

ps - zeph, terima kasih untuk pautan2 web mengenai pembangunan 'Compiler'.

Edited by 'ra

Share this post


Link to post
Share on other sites

nampaknya awak dah buat research sedikit sebanyak..

mungkin jika awak lebih bersungguh,, projek yg awak mimpi2kan ni akan tercapai..

sokongan drp orang2 lain juga amat penting.. susah jugak nak buat sorang..

tunggu la kalau ada orang lain yg berminat terutama sekali bebudak yang ambik course Computer Science/IT

dia orang kebanyakan belajar pasal theory compiler..

cya

Share this post


Link to post
Share on other sites

Sebelum perbincangan ini menjadi lebih giat lagi atau terhenti setakat di sini, saya ingin mengucapkan ribuan terima kasih kepada saudara dan saudari yang sudi meluangkan sedikit masa melayan persoalan saya mengenai Aturcara Bahasa Melayu?. sebarang komen yang telah diketengahkan di atas, adalah amat membantu dan memberikan maklumat yang tak ternilai bagi saya.

Saya cuma boleh berharap pada sesiapa yang pernah mempelajari teori penghasilan compiler ketika belajar dahulu, berilah sebarang komen-komen yang membina dan yang tak membina asalkan berkaitan dengan topik ini. Kemungkinan pengetahuan anda itu tidak lagi diperlukan di dalam tugas anda hari ini, tetapi walau macamana kaburnya ingatan mengenainya, setiap cebisan maklumat itu amat bernilai kepada orang seperti saya dan mungkin juga pelawat2 lain sememang tercari-cari topik seperti ini.

Cukuplah utk saya hari ini, mungkin esok akan lebih ramai lagi berminat utk membincangkan topik ini. Jika lebih ramai yg berminat, saya akan menambahkan lagi maklumat untuk rujukkan bersama hasil dari rujukkan yang telah saya buat sebelum ini.

Sila teruskan dengan pandangan dan pendapat anda... smile.gif

Share this post


Link to post
Share on other sites

btw...awak boleh gunakan thread ni untuk report progress..

Terima kasih zeph.

Untuk hari ini, saya telah membuat satu eksperimen ke atas pembuat compiler merujuk kepada penulisan Jack Crenshaw yang bertajuk "Let's Build A Compiler". Ianya hanya sebuah enjin compiler yang sangat ringkas dan hanya menerima Huruf sebagai variable dan nombor digit sebagai nilai. Dan ianya lebih kepada bentuk Interpreter dan bukannya Compiler yang lengkap.

Adaptasi ini di-olah mengunakan perisian Rapid-Q Basic dan tidak lah sukar untuk membuat sedikit pindaan untuk di compile menggunakan VB atau QuickBasic.

Penyediaan Fail Sumber Arahan

Cara penggunaannya, sediakan satu fail yang mengandungi barisan-barisan arahan dan diakhiri dengan noktah tanda (.). Anda boleh gunaka notepad ataupun sebarang text editor untuk menulis fail sumber arahan ini dan simpan dengan nama fail yang mempunyai sambungan ".par" atau ".txt". Ini adalah contoh kandungan fail cuba.par:

A=10-2
!A
?C
?D
B=A*(D-(C/2))
!B
E=10-6*4/2
!E
F=(10-6)*4/2
!F
.

Penggunaan Program Cara melancarkan Interpreter ini, ialah dari Command-line pada mod konsol (DOS PROMPT) dan dengan memberikan nama fail yang hendak ditafsir dan dilancarkan arahan-arahannya. Contohnya:
PAR.EXE CUBA.PAR

ataupun:
PAR.EXE CUBA.TXT

Pangawal Ralat Jika anda melancarkan program ini tanpa sebarang masukkan nama fail, ia akam memaparkan skrin Ralat dengan keterangan ringkas mengenai penggunaannya seperti yang ditunjukkan di bawah:
----------------------------------------
    PAR - Pentafsir Arahan Ringkas
----------------------------------------
Arahan: Elak guna [SPACE] atau [TAB]
Kod     Mesti diakhiri dgn noktah (.)
!       Pamer nilai wakil pada skrin
?       Tunggu dari papan kekunci
A-Z     Sebanyak 26 wakil boleh diguna
+-*/=() Pengendali yang boleh digunakan
----------------------------------------
RALAT: Cara Guna: PAR.EXE NAMAFAIL.PAR
----------------------------------------
        tekan ENTER untuk keluar
Fail Sumber Kod Utama Berikut adalah kod lengkap dari fail yang saya olah kepada Bahasa Basic dan failnya diberi nama PAR.BAS:
'--------------------------------------------------------------------------
' Adaptasi dari buku "Let's build a compiler" 
' oleh Jack Crenshaw ke Rapid-Q Basic oleh 'ra.
' Nama Fail: Par.bas
'--------------------------------------------------------------------------
$APPTYPE CONSOLE                                ' Perisian Konsol
$TYPECHECK ON                                   ' Pastikan Jenis Data
'--------------------------------------------------------------------------
const TRUE       = 1                            ' Nilai keadaan yang sah
const FALSE      = NOT (TRUE)                   ' Nilai sebaliknya
const fmBukaBaca = 0                            ' Cara buka sesuatu fail
const ctab$      = CHR$(9)                      ' kunci Tab (sebagai string$).
const CR         = 13                           ' kunci ENTER sbg nilai ASCII.
const LF         = 10                           ' Baris Baru sbg nilai ASCII.
'--------------------------------------------------------------------------
declare sub ERROR (s$ as STRING)                ' Hantar Ralat keluar ke fail.
declare sub ABORTCOMP (s$ as STRING)            ' Lapor Ralat dan Pemberhentian.
declare sub EXPECTED (s$ as STRING)             ' Lapor setiap yang ditunggu.
'--------------------------------------------------------------------------
declare function UPCASE (x as SHORT) as SHORT   ' Beri kod ASCII huruf besar
                                                ' jika terima huruf kecil.
declare function LOWCASE (x as SHORT) as SHORT  ' Beri kod ASCII huruf kecil
                                                ' jika terima huruf besar.
'--------------------------------------------------------------------------
declare function ISALPHA(x as SHORT) as SHORT   ' Kenalpasti huruf Alpha
declare function ISDIGIT(x as SHORT) as SHORT   ' Kenalpasti nombor digit
declare function ISADDOP(x as SHORT) as SHORT   ' KenalPasti pengendali + -
declare function ISMULOP(x as SHORT) as SHORT   ' Kenalpasti pengendali * /
'--------------------------------------------------------------------------
declare sub GETCHAR                             ' Baca satu huruf dari salur
                                                ' masuk. Sebagai "Pam" utama.
declare sub NEWLINE                             ' Kenalpasti dan lompat ke
                                                ' barisan baru.
declare sub MATCH (x as SHORT)                  ' Padankan sesuatu huruf masuk
declare function GETNAME as SHORT               ' Ambil sesuatu penanda.
declare function GETNUM  as SHORT               ' Ambil sesuatu nombor.
'--------------------------------------------------------------------------
declare sub ASSIGNMENT                          ' Hantar dan terjemah satu
                                                ' penyataan.
'--------------------------------------------------------------------------
declare function TERM       as SHORT            ' Hantar dan terjemah dialek
declare function FACTOR     as SHORT            ' Hantar dan terjemah faktur
declare function EXPRESSION as SHORT            ' Hantar dan terjemah penyata
'--------------------------------------------------------------------------
declare sub CONSINPUT                           ' Kendali kemasukkan
declare sub CONSOUTPUT                          ' Kendali pengeluaran
'--------------------------------------------------------------------------
declare sub INITTABLE                           ' Sediakan ruang Pewakil
declare sub INITIALIZE                          ' Penyediaan Pentafsir
declare sub ENDCOMP                             ' Penyelesaian yg berjaya
declare sub INTERPRET                           ' Mula Kilang utama
'--------------------------------------------------------------------------
'_______________________________ PEWAKILAN ________________________________
'--------------------------------------------------------------------------
DEFSHORT look = 0         ' Pemerhati Char(0..255) sbg 16bit (lebih stabil)
dim vtable(0 to 25) as SHORT     ' 26 susunan utk pemboleh-ubah huruf ALPHA
'--------------------------------------------------------------------------
'_______________________________ QOBJECTS _________________________________
'--------------------------------------------------------------------------
dim InputFile as QFILESTREAM                    ' Pengendali kandungan fail
'--------------------------------------------------------------------------


'_____________________________ SUB PROGRAMS _______________________________
'---------------------- Pengeluaran & Lapor Ralat -------------------------
sub ERROR (s$ as STRING)            ' hantar pesanan Ralat pada pengeluaran
    print "----------------------------------------"
    print "    PAR - Pentafsir Arahan Ringkas"
    print "----------------------------------------"
    print "Arahan: Elak guna [SPACE] atau [TAB]"
    print "Kod     Mesti diakhiri dgn noktah (.)"
    print "!       Pamer nilai wakil pada skrin"
    print "?       Tunggu dari papan kekunci"
    print "A-Z     Sebanyak 26 wakil boleh diguna"
    print "+-*/=() Pengendali yang boleh digunakan"
    print "----------------------------------------"
    print "RALAT: "+s$               ' Pamer ralat pada skrin utk rujukkan 
    print "----------------------------------------"
    input "        tekan ENTER untuk keluar";s$ 'sleep 5
end sub

sub ABORTCOMP (s$ as STRING) '___________________' Lapor Ralat dan hentikan
    ERROR s$
    end
end sub

sub EXPECTED (s$ as STRING) '_____________________' Lapor apa yang ditunggu
    ABORTCOMP s$+" dinantikan"
end sub '__________________________________________________________________


'---------- Pewakil dari PASCAL disesuaikan dgn 1 SHORT (16bits). ---------
function UPCASE (x as SHORT)  ' beri kod ASCII utk huruf besar bila terima
                               ' huruf kecil
    if (x >= 97 and x <= 122) then 
       UPCASE = x - 32 
    else 
       UPCASE = x
    end if
end function

function LOWCASE (x as SHORT) ' beri kod ASCII utk huruf kecil bila terima 
                               ' huruf besar.
    if (x >= 65 and x <= 90) then 
       LOWCASE = x + 32 
    else 
       LOWCASE = x
    end if
end function '_____________________________________________________________


'------------ Hantar 0 jika bukan, selainnya sah, 16 bits -----------------
function ISALPHA(x as SHORT) as SHORT '________ Kenalpasti satu huruf ALPHA
    ISALPHA = (UPCASE(x) >= 65 and UPCASE(x) <= 90)
end function

function ISDIGIT(x as SHORT) as SHORT '_______ Kenalpasti satu nombor digit
    ISDIGIT = (x >= 48 and x <= 57)
end function

function ISADDOP(x as SHORT) as SHORT '__________ Kenalpasti pengendali + -
    ISADDOP = (x = ASC("+") or x = ASC("-"))
end function

function ISMULOP(x as SHORT) as SHORT '__________ Kenalpasti pengendali * /
 ISMULOP = (x = ASC("*") OR x = ASC("/"))
end function '_____________________________________________________________

'--------------------------------------------------------------------------
sub GETCHAR '_______ Baca huruf baru dari salur penerima. "Pam" masuk utama
    look = InputFile.ReadNum(1)
end sub

sub MATCH (x as SHORT ) '_________ Padankan simbol dgn satu huruf yg masuk
    if look <> x then EXPECTED "'"+CHR$(x)+"'"
    GETCHAR
end sub

sub NEWLINE '________________________ Kenalpasti jika baris baru dan turun
    if look = CR then
       GETCHAR
       if look = LF then
          GETCHAR
       end if
    end if
end sub

function GETNAME () as SHORT '_______________________ Dapatkan pengenalan
    if not ISALPHA(look) then EXPECTED "Nama"       ' Pewakil 
    GETNAME = UPCASE(look)
    GETCHAR
end function

function GETNUM () as SHORT '____________________________ Asingkan Nombor
    DEFINT value = 0                   ' Pewakil utk kegunaan dalaman shj.
    if not ISDIGIT(look) then EXPECTED "Nombor"
    while ISDIGIT(look)
       value = (10 * value) + (look-48)       ' 48 ialah "0" dalam ASCII
       GETCHAR
    wend
    if (value > 32767) or (value < -32768) then EXPECTED "Nombor 16bit"
    GETNUM = (value)
end function '_____________________________________________________________

'--------------------------------------------------------------------------
sub ASSIGNMENT '________________ Tukar dan Tafsir kandungan sesuatu penyata
    DEFSHORT iname                      ' Pewakil utk kegunaan dalaman shj.
    iname=GETNAME
    MATCH ASC("=")
    vtable(iname-65) = EXPRESSION
end sub

function FACTOR () as SHORT '_______________________ Beri satu nilai faktor
    if look = ASC("(") then
       MATCH ASC("(")
       FACTOR = EXPRESSION
       MATCH ASC(")")
    elseif ISALPHA(look) then
       FACTOR = vtable(GETNAME-65)                         ' 65 = ASCII "A"
    else
       FACTOR = GETNUM
    end if
end function

function TERM () as SHORT '_________ Tukar dan Tafsir satu maksud pengiraan
    DEFINT value = 0                    ' Pewakil utk kegunaan dalaman shj.
    value = FACTOR
    while ISMULOP(look)
       select case look
          case ASC("*")
               MATCH ASC("*")
               value = value * FACTOR
          case ASC("/")
               MATCH ASC("/")
               value = value / FACTOR
          case ELSE
               EXPECTED "Pengendali gandaan" ' MULOP
       end select
    wend
    TERM = value
end function

function EXPRESSION () as SHORT '__________________ Beri sesuatu penyataan
    DEFINT value = 0                                     ' Pewakil dalaman
    if ISADDOP(look) then 'cuba mula dgn 0. Utk tolak:(0-1) dari guna (-1)
       value = 0
    else
       value = TERM
    end if
    while ISADDOP(look)
       select case look
          case ASC("+")
               MATCH ASC("+")
               value = value + TERM
          case ASC("-")
               MATCH ASC("-")
               value = value - TERM
          case ELSE
               EXPECTED "Pengendali tambahan" ' ADDOP
       end select
    wend
    EXPRESSION = value
end function '_____________________________________________________________

sub CONSINPUT '_________________________________________ Kendali kemasukkan
    MATCH ASC("?")
    input vtable(GETNAME-65)
end sub

sub CONSOUTPUT '_______________________________________ Kendali pengeluaran
    MATCH ASC("!")
    print vtable(GETNAME-65)
end sub '__________________________________________________________________

'--------------------------------------------------------------------------
sub INITTABLE '_____________________________________ Sediakan ruang pewakil
    DEFSHORT i                          ' Pewakil utk kegunaan dalaman shj.
    for i = 0 to 25
        vtable(i) = 0
    next
end sub '__________________________________________________________________

sub INITIALIZE '"mulakan pam utama"----------------------------------------
    if COMMANDCOUNT <> 1 then ABORTCOMP "Cara Guna: PAR.EXE NAMAFAIL.PAR"
    if FILEEXISTS(COMMAND$(1)) = False then ABORTCOMP "MENUNGGU Fail Masuk"
    InputFile.Open(COMMAND$(1), fmBukaBaca)
    if InputFile.Size = 0 then ABORTCOMP "Tiada maklumat di dalam fail"
    print "----------------------------------------" ' Garis hiasan mula
                                                     ' pelancaran.
    INITTABLE                                        ' panggil penyedia utk
                                                     ' ruang "ingatan".
    GETCHAR                                          ' Mula "pam" utama
end sub

sub ENDCOMP '_________________________________________ Tutup pentafsir ini
    print "----------------------------------------" ' Garis hiasan penutup
                                                     ' penggunaan.
    InputFile.Close                                  ' tutup pengendali fail
end sub '___________________________________________________________________

'---------------------------------------------------------------------------
sub INTERPRET '______________________________________ Gelungan program utama
    INITIALIZE                                      ' sediakan pelancaran
    do
       select case look
          case ASC("?")
               CONSINPUT
          case ASC("!")
               CONSOUTPUT
          case else
               ASSIGNMENT
       end select
       NEWLINE
    loop until look = ASC(".")   ' Perhatikan simbol utk tamat penggunaan(.)
    ENDCOMP                                              ' penafsiran tamat.
end sub '___________________________________________________________________

'__________________________ MULAKAN PROGRAM ________________________________
'---------------------------------------------------------------------------

INTERPRET                                   ' Lancar process pentafsir utama
end

Jika terdapat sebarang pertanyaan mengenai syntax yang ingin ditukarkan ke Bahasa Aturcara lain, silalah ajukan di dalam thread ini ataupun topik Rapid-Q Basic. Hasil Pelancaran Ketika ianya dilancarkan ia akan mempamerkan nilai A (8) dan kemudian akan berkelip-kelip menunggu anda masukkan sesuatu nombor digit untuk nilai C. Anda harulah tekan ENTER untuk meneruskannya. Kemudian, ia akan berkelip-kelip lagi menunggu and memasukkan nilai D. Selepas itu, tiada lagi menunggu sebarang masukkan dari pengguna dan terus menunjukkan nilai B. E dan F dan keluar dari program. Lihat hasil yang ditunjukkan di bawah ini:
----------------------------------------
8
34 <- nilai C dari pengguna
26 <- nilai D dari pengguna
72
-2
8
----------------------------------------

Nota mengenai nilai 34 dan 26 adalah tambahan dari saya untuk menunjukkan di mana sesuatu masukkan itu dibuat. Ini semua bergantung dengan kod arahan yang ada tulis. Sila rujuk fail cuba.par di atas.

Kesimpulan

Dari asas sumber kod compiler PAR di atas, peningkatan keupayaannya boleh lagi ditingkatkan. Apa yang saya ingin lihat atau harapkan, ada di antara para pengguna perisian lain seperti C/C++ ataupun Assembler, mengubah-suaikan sumber kod ini kepada bahasa aturcara masing-masing dan dikongsi bersama setelah ianya berjaya di compile dan di-uji.

Share this post


Link to post
Share on other sites

Hai `ra,

Mencipta sebuah programming language dalam bahasa melayu termasuk dalam salah satu angan-angan saya.

Pada pendapat saya,

1. pembangunan bahasa baru ini tidak semestinya merupakan terjemahan langsung dari mana-mana bahasa yg ada

2. bahasa yg dibangunkan mestilah boleh dijadikan sebagai penggalak kepada lebih ramai programmers melayu, bermula dari sekolah rendah - inilah visi sebenar! Mungkin suatu hari- budak sekolah rendah boleh start belajar programming dari sini!

3. tapi bukanlah sebuah bahasa yg level bebudak sahaja, tetapi cukup powerful untuk develop useful application.

4. can be extended, using open source libraries.

5. tak perlu go on komersil, tapi biarlah viable jika nak apply research grant (contohnya MSC) - biarpun peringkat awal ni bukan nak apply apa-apa grant pun.

okay..

Share this post


Link to post
Share on other sites

Hai Shanai,

1. pembangunan bahasa baru ini tidak semestinya merupakan terjemahan langsung dari mana-mana bahasa yg ada

Sebenarnya, tiada peraturan mengenainya yang menentukan reka-bentuk bahasa "baru" untuk tujuan pembelajaran dan target audience tempatan. Yang menjadi perkara penting ialah adakah ianya mudah untuk dipelajari? Bagi saya, jika saya pernah mengeluarkan beberapa versi compiler sebelum ini, barulah saya mampu menghasilkan suatu yang sepenuhnya berbeza dari yang lain.

Untuk permulaan, biarlah belajar merangkak dahulu, kemudian diakhiri dengan belajar berlari. Tak lupa juga belajar bagai mana nak berhenti... wink.gif

2. bahasa yg dibangunkan mestilah boleh dijadikan sebagai penggalak kepada lebih ramai programmers melayu, bermula dari sekolah rendah - inilah visi sebenar! Mungkin suatu hari- budak sekolah rendah boleh start belajar programming dari sini!

Saya setuju dengan pendapat ini. Tidak dipertikaikan lagi. Straight to the point. No hanky-panky.

3. tapi bukanlah sebuah bahasa yg level bebudak sahaja, tetapi cukup powerful untuk develop useful application.

4. can be extended, using open source libraries.

Ia adalah lebih bergantung kepada progress sesuatu projeck bahasa aturcara itu berkembang. Kalau report card dia selalu merah aje, tak semua bahasa aturcara mampu berkembang maju kehadapan. Ade juga yang layu bila baru nak memperkenalkan penampilannya.

5. tak perlu go on komersil, tapi biarlah viable jika nak apply research grant (contohnya MSC) - biarpun peringkat awal ni bukan nak apply apa-apa grant pun.
biggrin.gif he..he.he.. ingin ikut serta dan mempunyai access kepada sumber kodnya? Biar kita lihat dari perspetif yang berbeza. Saya setuju kepada koncep Open-Source, dan paling pentingnya, ahli-ahli yang terlibat dalam project seperti ini dengan sendiri mempelajari pelbagai perkara-perkara baru mengenai teknologi penghasilan compiler.

Seperti dalam kenyataan saya terdahulu di atas, projek seperti ini dimulai dengan minat ataupun sebagai hobi. sebabnya, banyak yang perlu dipelajari seperti:-

Mengatasi Pepijat/debugging yang menjadi kesukaran bagi semua pengeluar perisian. Tak kira yang kecil atau pun besar.

Khidmat bantuan pengguna/Users support services. Bahagian ini adalah kritikal untuk membantu meningkatkan pendedahan perisian dan penyelesai kepada penggunaan dan kerasian terhadap berbagai versi Sistem Operasi yang menjadi 'rumah' kepada sesuatu program aturcara. Juga tentang perpindahan penggunaan kepada pelantar/flatform yang berbeza. Keserasian adalah kuci utama di sini.

Jika anda memulakan satu bahasa aturcara baru dan terus sahaja mengkomersilkan dengan angan-angan yang menyatakan ia akan popular dalam sekelip mata, saya ucapkan "Selamat berjaya. Kalau ada masa datang jumpa kami lagi bermain pula dengan compiler kami. Kami sentiasa terbuka dan menerima sesiapa sahaja yang ingin menyumbang."

Projek seperti ini juga akan menjadi sumber kepada sesiapa saja yang ingin mengambil sebahagian atau hampir keseluruhan sumber kod untuk dikomersilkan. Tetapi, tanggung-jawab terhadap risiko yang dihadapi tidak akan mempunyai sangkut-paut dengan mana-mana ahli yang terlibat dalam projek sumber terbuka ini. Perkara seperti ini haruslah diperjelaskan dahulu agar tiada tanggungan yang bakal diterima oleh penyumbang teknikal terhadap tindakan individu-individu yang mempunyai penilaian kormersil yang lemah dan tidak bertanggung-jawab.

saya pernah terjumpa laman web MalayBasic. tapi dah lama dah benda ni. mcm tak update jer. setahun lebih dah sy since my last visit kat sana.

Hai DarkWan,

Nampaknya, ianya terhenti setakat tahun November 2001 sahaja. Kemungkinan mempunyai kelemahan pengurusan dan user supports seperti yang saya nyatakan di-atas. Sayang sekali, jika ianya mempunyai dasar terbuka, mungkin ianya dapat dilihat di gunakan dengan meluas walaupun untuk kegunaan tempatan.

Nampaknya, hampir keseluruhan syntax-nya mudah digunakan, cuma terdapat terlalu banyak simbol-simbol yang tak perlu dilekatkan bersama keywords-nya menjadikan ianya "berbulu-bulu". Ini akan mengelirukan bila merujuk semula sumber kod untuk menambah perubahan-perubahan baru.

CASE STUDY

Saya tertarik dengan pendekat Negara India dalam memperkembangkan pengetahuan IT mereka. Mereka menghasilkan perisian percuma untuk mengatasi masalah yang amat nyata seperti keperluan sektor pertanian yang agak lemah dari segi pengurusan dan kurang teratur. Dengan membina satu perisian mudah dan di pasang di dalam PDA yang ringkas, ia di berikan percuma kepda ketua-ketua kampung di seluruh daerah untuk membantu penjadualan musim dan pengiraan hasil pertanian di sesuatu kampung.

Oleh kerana pennggunanya tidak tahu mengenai komputer, mereka telah menterjemahkan kepada bahasa tamil yang mudah dan antara-muka pengguna yang minima untuk penggunaan. Bayangkan sebuah kalkulator. Hampir semua orang tahu menggunakkannya. Begitulah konsep yang diguna-pakai.

Setiap tahun juga gaduan IT dalam teknologi perisian di India, mampu mengaturcara dan menghasilkan perisian database dan akauntasi lengkap untuk kegunaan perniagaan. Di sini, graduan kita yang keluar masih tak tahu perbezaan ah, ax dan eax (register 8bit, 16bit dan 32bit). Bukan nak merendahkan, tapi kenyataan yang hari-hari saya dengar. Maka saya ni yang belajar tak setinggi mana, nak tukarlah situasi itu dengan wawasan kecil ini sekurang-kurangnya dengan membantu dari segi pengujian jika ada projek-projek seperti ini.

Edited by 'ra

Share this post


Link to post
Share on other sites

harap2 projek 'ra jadi kenyataan.

sy hya mampu beri sokongan dari jauh. nak menolong .. tak mampu. why .. i am not a good programmer .. even belajar assembly, c++, java, asp (vbscript) pon .. tp scr rambang je.

kat sini (malaysia), (kebanyakan) programmer baru start program masa kat U/kolej/IPT. tengok kat Luar, masa internet-boom dulu, ada dh jadik jutawan kecik silicon valley sbb usia blom masuk skolah menengah lagi dh jual syarikat dot com dengan harga juta-juta US.

bayangkan programmer ni ibarat pokok kelapa sawit. masa tanam, tak ada hasil. lepas 3 tahun, baru dpt hasil. tapi hasil dia tu tak matang lagi la. mmg boleh dituai, tp tak berapa besar lagi. lepas 10 tahun, baru matang betul. baru sedap. so, programmer kita kat sini, lepas kuar U, mana la reti sangat nk program nih. kalo buat pun, tak tentu mantap lagi. maklumla .. baru 3 tahun. (mmg ada yg terer giler walau baru belajar setahun .. tp ini RARE cases yg sy penah jumpa .. hrp programmer kt sini jgn marah ngan statement sy nihs ok)

my lecturer .. pompuan - keluarga kaya .. program PASCAL masa umur 9 tahun. skarang ni, mmg otai la. dah pun jadi timbalan pengarah akademik kt sini.(skang ni umur dia pun dah 40+)

bg sy, mslh kita mgkn terletak kat penggunaan bahasa inggeris. in the age of 7 to 9, mgkn agak sukar derang nk differentiate int, char mcm dlm C berbanding Dim yg digunakan dlm VB. penggunaan english can lead to confusion .. maklumla kkadang english ni taboo sket dlm msykt Melayu.

(skang ni sy blom kawin lagi. tp mmg sy dh tanam cita2 sejak 4 tahun yg lepas .. bila aku dh ada anak nnt .. aku nk expose dia ngan ilmu programming since dia 7 tahun lagi wink.gif )

Share this post


Link to post
Share on other sites

aku ader bahasa pengaturcaraan melayu aku sendirik. Guna fasm macro wink.gif. Contoh ringkas :

macro salin destinasi, sumber {
    mov destinasi, sumber
}

macro tambah dest, sumber {
    add dest, sumber
}

salin eax, ebx
tambah eax, ecx

bleh laaa kannnnnn...

Share this post


Link to post
Share on other sites

salin eax, ebx

tambah eax, ecx

Woi Ancient One! biggrin.gif

Kenapelah tak terfikir menggunakan FASM punya macro yang semudah itu! Caya lah! awak punya penyelesaian adalah yang paling simple!

Care to spend a little time to help us creating most frequently used fasm keywords in Malay macro-instruction sets? Boleh gak nanti guna fasm sebagai back-end compiler. Senang sikit nak check dia punya asm translations dari front-end compiler. Awak faham fasm lebih dari yang lain. Jadi, kurang lah sikit kesilapan maksud bagi setiap Commands, Target Register dan Operand dia.

Sebelum ni saya dok fikir terus guna assembly dengan buat macro instructions untuk syntax compiler Melayu ni. Tapi susah nak maintain dan debugging mesti pening habis. Kalau breakdown-kan dia jadi dua compiler module (front and back end) lebih mudah nak maintain bagi mana-mana group yang menyelenggaranya.

Lebih-lebih lagi, dapatlah kite semua belajar assembly dengan lebih singkat dari biasa. smile.gif

Edited by 'ra

Share this post


Link to post
Share on other sites

Setiap tahun juga gaduan IT dalam teknologi perisian di India, mampu mengaturcara dan menghasilkan perisian database dan akauntasi lengkap untuk kegunaan perniagaan. Di sini, graduan kita yang keluar masih tak tahu perbezaan ah, ax dan eax (register 8bit, 16bit dan 32bit). Bukan nak merendahkan, tapi kenyataan yang hari-hari saya dengar. Maka saya ni yang belajar tak setinggi mana, nak tukarlah situasi itu dengan wawasan kecil ini sekurang-kurangnya dengan membantu dari segi pengujian jika ada projek-projek seperti ini.

masalah yang kita hadapi sebenarnya kat sini..

aku rasa sepatutnya computer programming fundamental kena ajar kat sekolah rendah lagi..

lagi satu.. aku tak berapa setuju kat kolej/universiti ajar semaksimum programming language.. java,c,c++,cobol,vb,etc

lebih baik ajar 1-2 programming language jer..

dalam programming ni,,yang penting sekali ialah implementation data structure, algorithm.. kalau reti semua programming lang sekalipun..and tak reti nak implement something,..memang totally useless..

just my humble opinion

Share this post


Link to post
Share on other sites

lagi satu.. aku tak berapa setuju kat kolej/universiti ajar semaksimum programming language.. java,c,c++,cobol,vb,etc

lebih baik ajar 1-2 programming language jer..

dalam programming ni,,yang penting sekali ialah implementation data structure, algorithm.. kalau reti semua programming lang sekalipun..and tak reti nak implement something,..memang totally useless..

IMHO, syllabus yang di sediakan untuk IPTA/S lebih mementing keperluan untuk perniagaan secara umum dan jangka pendek. seharusnya ia lebih specific seperti teknologi perisian, Assembly programming seharusnya menjadi bahasa aturcara yang paling pertama di ajar sebelum lain-lain bahasa HLL (High Level Language).

Kalau kat luar negara, mana-mana graduan yang tak ader atau tak familiar dengan Assembly programming kira setakat cukup makan. Kenapa Assembly? Ia adalah bahasa yang paling dekat sekali dengan bahasa mesin(CPU). Programming sebenarnya adalah untuk menghasilkan penyelesaian. Utk menyelesaikan masalah perkomputeran, seseorang programmer itu bagaikan seorang penimbang-tara. Harus mengetahui memahami situasi kedua-dua belah pihak. Situasi mesin dan pengguna yang request kepada sesuatu penyelesaian.

Bila memahami kedua-duanya, suatu penyelesaian yang dihasilkan itu adalah tepat, tidak membazir masa dan wang. Sebab itu lebih-kurang 10 tahun dulu, seorang programmer itu juga adalah seorang system analyst yang memahami system architecture. Lebih-lebih pada masa sekarang setiap komputer itu menjadi lebih canggih yang mempunyai berbagai-bagai interface yang mudah dicapai oleh pengguna. Tetapi adalah sukar bagi programmer kerana tidak memahami binaan/architechture sesuatu mesin/pc baru secara mendalam.

Sebagai contoh, Setiap kali sesuatu sistem baru dikeluarkan oleh Intel, lihat ruang webnya dibahagian developer. Berpuluh-puluh mega-bait maklumat mengenai register baru dan opcode dikeluarkan dengan percuma agar para programmer dan system analyst dapat menyesuaikan dengan perisian binaan mereka. Dari aspect lain, pengeluar system seperti Intel dan lain-lain juga masih mengekalkan keserasian dengan struktur binaan 80386. Ini kerana kebanyakkan mata-pelajaran yang di sediakan di IPTA masih bemula dengan mengenali struktur system jenis ini. Jika keserasian ini tidak di-ambil kira, pelanggan mungkin tidak mahu membeli sistem mereka lagi kerana tiada sesiapa yang dapat menyesuaikannya dengan penghasilan perisian baru.

Mungkin anda pernah mendengar M$ tidak pernah menggalak penggunanya menggunakan bahasa assembly untuk menghasilkan perisian. Mereka lebih menggalakkan menggunakan perisian HLL keluaran mereka seperti C++, VB dan .NET series. Ini kerana, jika ramai mengetahui bahasa Assembly, perisian mereka akan kurang dijual. Kerana, ramai yang akan tahu apakah keperluan mesin/pc ketika membina perisian baru.

Walaupun begitu perisian HLL ini ada sama penting untuk keperluan di bidang-bidang yang spesifik untuk memudahkan tugas dan menjimatkan masa. Yang sebaiknya sebelum menggunakan bahasa aturcara HLL, haruslah mempunyai sedikit pendedahan dan pengetahuan mengenai Assembly ataupun sekurang-kurangnya bahasa C yang mempunyai keupayaan kepada penggunaan inline assembly.

Bagi kebanyakkan hobbyist, bahasa BASIC dan C yang mempunyai access kepada penggunaan Assembly sering digunakan utk keperluan mereka sendiri di samping meningkatkan pengetahuan mereka tentang mesin komputer. Kebanyakkan remaja di luar negara menggunakan perisian ini untuk mengisi masa lapang mereka dalam projek-projek persendirian. Oleh itu, anda sering lihat projek Open Source Basic dan C di Internet.

ps - takde sape-sape ke yang berminat menterjemah contoh sumber compiler yang saya berikan kat atas tu kepada bahasa aturcara lain? Ia nampak terlalu ringkas dan tak grand macam compiler yang lengkap. Tapi, cuba perhatikan betul-betul, macam mana si kecil tu dapat menyelesaikan masalah arithmatic/matematik dengan baik. Pada dasarnya itulah asas sebuah compiler. Penyelesaian pengiraan. Kemudian barulah tambah kepada keupayaan yang lain seperti pengurusan huruf dan ayat-ayat (string). Komputer hanya tahu bahasa nombor. Jadi kita guna nombor utk mengarahkannya kepada tugas-tugas yang lain.

Share this post


Link to post
Share on other sites

ako punye dok pikir name Basic yang mamat tu buat, tak ingat2 ako. naseb baek ko ingat biggrin.gif

aah site tu tak update2 langsung. ako takut tripod akan remove page tu je pasal inactive dah lame. so since PDP ko tengah rajin tu elok ko pegi mirror site tu.

Share this post


Link to post
Share on other sites

Trend orang sekarang, diaorang bukan setakat reka bahasa pengaturcaraan baru lagi, tapi

juga "machine" yang baru. Basically hasilnya adalah language seperti Java, dan seimbas

lalu kiter bleh tengok C# (specifically) adalah jawapan M$ kepada Sun Java. Java is not

just a language. Ia define architecture machine tersebut, so kiter bleh bina pemproses

di mana bahasa aras rendahnya adalah java assembly. Thats why Windows/UNIX platform kiter

perlukan "virtual" machine untuk run application written in Java language. Kebaikannya

seperti yang kiter tau - it can run on any machine yang ader java virtual machine (jvm),

tak kira ler mesin basuh ke, microwave ke, jam ke. Running applications dalam virtual machine

dah tentulah ader slack sikit tang speed since vm kena interpret setiap arahan dan convert

plak kepada native instructions yang difahami oleh host platform. Since kiter define abstract

machine kat sini, so basically takde hal biler kiter nak bina, let say C/C++ compiler yang

convert C/C++ source code into java machine instruction instead of machine instruction native to the

compiler.

Seperti yang dikatakan oleh 'ra, penggunaan bahasa melayu sebagai bahasa pengaturcaraan

memang sukar diterima biler kiter dah terbiasa dengan bahasa omputih. Memangla benda baru

agak sukar nak sebati dengan kiter. Sama la macam kiter dengar/belajar bahasa omputih kecik2

dulu. Let say kiter ader bahasa pengaturcaraan baru yang dibina dengan bahasa melayu seperti

Selagi (i > 0) Buat {
    ...
    i = i - 1;
}
Of course pertama kali kiter tengok nampak pelik. Yang peliknya... kiter tak plak rase pelik biler tengok versi omputihnya
while (i < 0) do {
    ...
    i = i - 1;
}
Tapi biler kiter dah terbiasa dengan Selagi (...) Buat {...}, takla rase pelik sangat biler tengok plak perkataan melayu yang lain dalam bahasa pengaturcaraan. Actually banyak gak syntax dan bahasa yang pelik2 dalam bahasa pengaturcaraan yang sedia ader terutamanya kalau kiter biasa buat shell script dan juga beberapa scripting languages yang popular sekarang. Benda ni actually bleh diatasi kalau LECTURERs kiter kat IPT ni ader inisiatif sendiri untuk membina pengkompil dan design suatu bahasa pengaturcaraan yang baru. Kemudian jadikan bahasa ni sebagai alat bantu pengajaran (atau sebagai medium untuk mempelajari bahasa pengaturcaraan lain). Bagi para pelajar yang benar2 baru dalam bidang sains komputer ni, diaorang akan rase tertarik dan tahap rase pelik diaorang bila tengok kod dalam melayu sama je bila tengok kod yang ditulis dalam bahasa omputih since diaorang tak pernah tengok aper2 bahasa pengaturcaraan pun. Kat maner lagi nak mula kalau bukan kat IPT ye tak. Lagipun kat IPT la tersimpannya para cerdik pandai kiter. Actually kiter ader dua masalah kat sini. (1) Language Design. (2) Compiler Writing. Kiter perlukan PAKAR dalam kedua bidang ni. Trime je la kenyataan dalam aper jua bidang pun, kalau setakat ader MINAT tak kire sedalam maner pun, kiter takkan berjaya merealisasikan perkara ni. Kiter kena ader resources yang cukup untuk RESEARCH. Aku rase la, part research ni ler yang orang kiter lemah. Kiter kena ader resources yang cukup dari segi pengetahuan, masa, wang dan lain2 lagi. Kiter kena tau kat maner kemampuan kiter setakat ni. Biler dah tau tuh, kiter kena evaluate plak kemampuan kiter. Cukup ke tak. Kalau tak cukup tu pepandai la nak cukupkan. Taun lepas aku ader laa nak test buat java program (*.class format) using x86 assembler (fasm). Lagipun aku suka gunakan fasm sebagai file generator instead of assembler smile.gif. Tapi memandangkan ader slack sikit part nak hasilkan constant pool table (fasm nyer directives and macros tak cukup power) dan ader beberapa jvm instructions aku tak reti nak encode (tableswitch, for example) so tak lengkap laaa. Lagipun aku kena ngaku fasm tak cukup hebat. This is just keje sampingan maser aku nak create class file disassembler untuk sorang client dulu. Bleh amik kat sini. Seperti yang korang tengok, part nak tulis kod tu dah ok dah. Nampak automatik. Tapi part nak insert item kat constant pool table tuh (tu aku just buat secara manual). Biler aku buat menda alah ni, aku pun teringin nak cuba gantikan arahan assembly x86 dengan bahasa melayu, atau buat macroinstructions dalam bahasa melayu untuk "menyembunyikan" arahan2 native. Tapi aku takleh dapat sintaks yang menarik dan natural plak dah (aku rase RosAsm lebih baik dalam hal nih). Lagipun asm dalam bahasa melayu? aper yang aku dapat selain daripada ringkasan perkataan? Kemudian nak try design asm aku sendirik.. buat nyer buat, pikir nyer pikir.. tak jadik plak.. hehehe.. payah gak keje lone ranger nih. Meh kiter define satu "virtual machine" dengan bahasa himpunan kiter sendiri. Firstly, kiter kena design environment dia dulu. Contohnya, 10 registers (temporary storage) yang setiap satunya bersaiz 32 bits. Kiter bagi laaa aper2 nama untuk mewakili setiap registers ni dalam kod. Contohnya S0 hingga S9 (S maknanya STOR, tempat simpan barang smile.gif). Brape banyak memory yang machine kiter bleh addresskan dan sebagainya laaa. Kemudian kiter define plak instruction set untuk virtual machine ni. Contohnya SIMPAN, TAMBAH, TOLAK dan sebagainya laahh.. Kalau nak lebih advanced lagi, kiter bukan setakat define basic machine, tapi complete machine yang lengkap ngan input/output so kiter bleh la define instruction yang dapatkan input dan paparkan output smile.gif. Ataupun kalau dah payah sangat, kiter amik je processor yang antik (8 bit processors la at least) cam 6502 ke (teringat maser main Super Mario series kat NES). Nak dapat feels pasal instruction ni kiter bleh la try dulu kod aper2 pun :
    SIMPAN 10 > S1
    SIMPAN 20 > S2
    TAMBAH S2 < S1
Basically format instruction kiter seperti di atas laa. Kat tengah tu bleh jadik > atau < untuk instruction yang terima 2 operands dan ia menunjukkan "arah" instruction tersebut. Dalam kes
    SIMPAN 10 > S1
maknanya kiter simpan constant bernilai 10 kepada stor S1. Dengan penunjuk arah ni, bleh ler kiter nak tulis kod yang lebih fleksible, e.g SIMPAN S1 < 10 dan sebagainya. Tapi ia akan jadi kompleks plak. Arahan TAMBAH plak tambah dua operands dan simpannya di dalam stor yang ditunjuk oleh > atau <. Aper yang kod kat atas buat adalah secara matematiknya camni :
    S1 = 10
    S2 = 20
    S2 = S1+S2
Biler kiter buat sedikit keje dengan virtual machine instructions kiter, InsyaAllah kiter akan dapat menambahkan idea secara tak langsung. Kat sini juga kiter mungkin bleh ringkaskan arahan ni (e.g buang a,e,i,o,u dalam perkataan). Let say kiter tambah plak arahan untuk melompat (jump/branching) :
    SMPN    S3 < 100
    SMPN    S4 < 0
Label:
    SMPN    10 > S1
    SMPN    S2 < 10
    TMBH    S2 < S1
    TLK     S3 < 1
    BNDG    S3 < S4
    LJLB    Label
Sekarang, SMPN mewakili SIMPAN, TMBH mewakili TAMBAH, TLK mewakili TOLAK, BNDG mewakili BANDING, LJLB mewakili LOMPAT JIKA LEBIH BESAR. Walaupun sekarang tak nampak elok (aku sendiri pun rase segan gak smile.gif), tapi biler kiter dah selalu gunakan arahan seperti ni, lama kelamaan kiter akan terbiasa dengannya. Maner tau suatu hari nanti kiter rase pelik plak biler tengok arahan MOV, SUB, ADD, JG dan sebagainya smile.gif. Sekarang kiter dah ader bahasa himpunan dengan bahasa kiter sendiri (ringkasan jerrr), lain kali kiter bleh plak create new compiler untuk cipta bahasa aras tinggi yang akan dikompil kepada bahasa himpunan virtual machine kiter. Tapi jangan luper plak since kiter define "virtual machine" kat sini, kiter kena la bina interpreter plak. Untuk interpret dan laksanakan arahan2 bahasa himpunan ni. Untuk encode bahasa himpunan kat atas plak, kiter blehla allocate 1 byte untuk pegang arahan. Contohnya opcode untuk SMPN adalah 0x01, TMBH - 0x02 dan sebagainya laaa. So dalam interpreter kiter ader la kononnya main loop yang akan amik opcode ni dan process.
    /*main loop of interpreter*/
    do {
        CurrentInstructionPointer += ProcessInstruction(CurrentInstructionPointer);
    } while (!EndOfProgram())

Walaupun realitinya tak semudah ni, tapi cukup laa kan, sekadar sebagai introduction. Lebih baik daripada

takde langsung! Kiter bleh tengok contoh yang dilakukan oleh banyak bahasa aras tinggi (mostly object oriented) seperti .NET (using MSIL, M$ Intermediate Language).

BABAI...

Share this post


Link to post
Share on other sites

Kenapelah tak terfikir menggunakan FASM punya macro yang semudah itu! Caya lah! awak punya penyelesaian adalah yang paling simple!

Care to spend a little time to help us creating most frequently used fasm keywords in Malay macro-instruction sets? Boleh gak nanti guna fasm sebagai back-end compiler. Senang sikit nak check dia punya asm translations dari front-end compiler. Awak faham fasm lebih dari yang lain. Jadi, kurang lah sikit kesilapan maksud bagi setiap Commands, Target Register dan Operand dia.

Sebelum ni saya dok fikir terus guna assembly dengan buat macro instructions untuk syntax compiler Melayu ni. Tapi susah nak maintain dan debugging mesti pening habis. Kalau breakdown-kan dia jadi dua compiler module (front and back end) lebih mudah nak maintain bagi mana-mana group yang menyelenggaranya.

Lebih-lebih lagi, dapatlah kite semua belajar assembly dengan lebih singkat dari biasa. smile.gif

Well.. aku dengan senang hatinya bleh membantu.. fasm memang sesuai jadik back-end compiler sebab dia ader multipass assembler dan bleh optimize asm code (not modify it!) dengan lebih baik. Nanti aku balik rumah pikir pasal ni..

Share this post


Link to post
Share on other sites

tahniah kepada 'ra atas inisiatif yang baik ni..

tapi saya sebenarnya rasa idea yg lebih baik ialah mencipta konsep dan tools yg dpt menolong menghasilkan aplikasi dgn jangkamasa lebih pantas, spt RAD tools, etc (mcm konsep webforms dlm ASP.NET).. bukan nak kata projek 'ra ni tidak baik, tapi ni mcm reinventing the wheel je.. kesannya utk 'ra mungkin sgt baik, utk menambah ilmu dsb, tapi utk org lain tak seberapa kot..rasanya sekarang ni masa utk kita mencipta IC (integrated circuit), bukan lagi masa pencipta transistor..

ini cuma pendapat saya semata2, bukan nak jatuhkan semangat 'ra dsb.. sekali lagi inisiatif 'ra ni cukup baik, teruskan.. satu lagi saya tak berapa pandai dlm low level programming, mungkin kelebihan yg dilihat dari sudut itu saya tak nampak..

jealous sebenarnya tgk org rajin buat projek ni, saya satu projek hapa pun takde.. rolleyes.gif

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...