Motivasi Hidup

Hanya orang yang berani gagal total,akan meraih keberhasilan total (Jhon F.Kennedy)

Kamis, 08 Desember 2016

Animasi Bandul

Membuat Animasi Bandul...

codingnya.....

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package javaapplication7;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
/**
 *
 * @author Elpido SC
 */
public class bandul extends Applet implements Runnable  {
    double x,y,w,z,waktu =2,waktu1 =3.28;int terang;
    public void init()
    {
        this.setSize (600,600);
            }
    public void start()
    {
        Thread trit= new Thread (this);
        trit.start();
    }
    public void run ()
    {
        while(true)
        {
            while (waktu<=3)
            {
                waktu+=0.02;
                hitung();
                repaint ();
               
                try  {
                    Thread.sleep(10);
                } catch (Exception e) {
                    System.out.print(e);
                }
            }
            while (waktu1<=4.28)
            {
                waktu1+=0.02;
                hitung();
               
                repaint();
                try {
                    Thread.sleep(10);
                } catch (Exception e){
                    System.out.print(e);
                }
            }
             while (waktu1>=3.28)
            {
                waktu1-=0.02;
                hitung();
               
                repaint();
                try {
                    Thread.sleep(50);
                } catch (Exception e){
                    System.out.print(e);
                }
            }
             while (waktu>=2)
            {
                waktu-=0.02;
                hitung();
               
                repaint();
                try {
                    Thread.sleep(50);
                } catch (Exception e){
                    System.out.print(e);
                }
            }
        }
    }
    public void hitung()
    {
        y=Math.cos(waktu) * 250;
        x= Math.sin(waktu) * 250;
        w=Math.cos(waktu1) * 250;
        z= Math.sin(waktu1) * 250;
    }
    public void paint (Graphics g)
    {
        hitung();
        g.setColor (Color.red);
        g.fillRect(50, 120, 450,30);
        g.drawLine(270,150,290-(int)x,150-(int)y);
        g.drawLine(270,150,255-(int)z,150-(int)w);
        g.setColor(Color.GREEN);
       g.fillOval(260-(int)x, 150-(int)y,50, 50);
       g.setColor(Color.YELLOW);
       g.fillOval(240-(int)z, 150-(int)w, 50, 50);                
       
    }
   

}


maka output yang dihasilkan dari coding diatas sperti gambar dibawah ini




Kamis, 10 November 2016

POLYLINE DENGAN JUMLAH TITIK 9 Bagaimana jika jumlah titik kurang dari sembilan atau lebih.........

PolyLine...
Coding dibawah ini membentuk hasil seperti gambar dibawahnya...

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Dominggo
 */
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class polyline extends JPanel {

  public void paint(Graphics g) {
      int[] xs = {25, 75, 125, 85, 125, 75, 25, 65, 25};
      int[] ys = {50, 90, 50, 100, 150, 110, 150, 100, 50};
      g.drawPolyline(xs, ys, 9);
      }
  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.getContentPane().add(new polyline());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200,200);
    frame.setVisible(true);
  }
}



Apabila ......Polyline dengan jumlah 9 
Pada coding ---->   g.drawPolyline(xs, ys, 9);
maka hasilnya sperti gambar berikut...

 


Apabila ......Polyline dengan jumlah 8 
Pada coding ---->   g.drawPolyline(xs, ys, 8);
maka hasilnya sperti gambar berikut...

ini membuktikan garis tidak terhubung (putus)

















Apabila ......Polyline dengan jumlah 5 
Pada coding ---->   g.drawPolyline(xs, ys, 5);
maka hasilnya sperti gambar berikut...

ini membuktikan garis tidak terhubung (putus)



Apabila ......Polyline dengan jumlah lebih (>9)
Pada coding ---->   g.drawPolyline(xs, ys,12);
maka hasilnya sperti gambar adalah kosong
mengapa demikian karena jumlah titik x dan y yang terbentuk tidak sama dengan 12 (>9)



Mengapa sampai terjadi demikian
dari gambar dengan jumlah titik 9 maka dihasilakn gambar yang utuh dimana saling terhubung dan apabila salah satu titik dihilangkan saja atau jumlah titik nol maka ada bagian atau sisi-sisi yang tidak terhubung sehingga tidak membentuk PolyLine....

Lingkaran

Membuat lingkaran seperti gambar dibawah ini.......
dengan menggunakan Java Netbeans....

















berikut kodingnya.....
lumayan susah bro...
puying...puying lihat codingnya...

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gui_java;

/**
 *
 * @author Dominggo
 */
import java.awt.*;
public class Gui_java extends Panel{
    Gui_java(){
    setBackground(new Color(227, 227, 227));// warna background
    }
    public void paint(Graphics A){
    A.setColor(Color.black);
    A.drawArc(229,29, 152, 151, 0, 360);//draw lingkaran kepala

    A.setColor(new Color(237, 202, 39));
    A.fillArc(230,30, 150, 150, 0, 360);//warnai lingkaran kepala
   
    A.setColor(Color.WHITE);
    A.fillArc(265,70, 20, 40, 0, 360);//mata putih kiri
   
    A.setColor(Color.WHITE);
    A.fillArc(325,70, 20, 40, 0, 360);//mata putih kanan
   
    A.setColor(Color.BLACK);
    A.fillArc(325,75, 20, 30, 0, 360);//mata hitam kanan
   
    A.setColor(Color.BLACK);
    A.fillArc(265,75, 20, 30, 0, 360);//mata hitam kiri
   
    A.setColor(Color.red);
    A.fillArc(275,100, 65, 60, 0, -180);//fill mulut
     
    }
         
    public static void main(String[] args) {
        // TODO code application logic here
        Frame f1 = new Frame();
        Gui_java H = new Gui_java();
        f1.add(H);
        f1.setSize(600, 300);
        f1.setVisible(true);
    }
}

Selasa, 08 November 2016

Metode Parsing Top Down Brute-Force & Recursive-Descent

METODA PARSING

Ada 2 metoda parsing : top-down dan bottom-up.
  • Parsing top-down : Diberikan kalimat x sebagai input. Parsing dimulai dari simbol awal S sampai kalimat x nyata (atau tidak nyata jika kalimat x memang tidak bisa diturunkan dari S) dari pembacaan semua leaf dari pohon parsing jika dibaca dari kiri ke kanan.

  • Parsing bottom-up : Diberikan kalimat x sebagai input. Parsing dimulai dari kalimat x yang nyata dari pembacaan semua leaf pohon parsing dari kiri ke kanan sampai tiba di simbol awal S (atau tidak sampai di S jika kalimat x memang tidak bisa diturunkan dari S)


Parsing Top-Down Ada 2 kelas metoda parsing top-down, yaitu kelas metoda dengan backup dan kelas metoda tanpa backup. Contoh metoda kelas dengan backup adalah metoda Brute-Force, sedangkan contoh metoda kelas tanpa backup adalah metoda recursive descent.

A. Metoda Brute-Force

Kelas metoda dengan backup, termasuk metoda Brute-Force, adalah kelas metoda parsing yang menggunakan produksi alternatif, jika ada, ketika hasil penggunaan sebuah produksi tidak sesuai dengan simbol input. Penggunaan produksi sesuai dengan nomor urut produksi.Metoda Brute-Force tidak dapat menggunakan grammar rekursi kiri, yaitu grammar yang mengandung produksi rekursi kiri (left recursion) : A → A . Produksi rekursi kiri akan menyebabkan parsing mengalami looping tak hingga.

B. Metoda Recursive-Descent

  • Kelas metoda tanpa backup, termasuk metoda recursive descent, adalah kelas metoda parsing yang tidak menggunakan produksi alternatif ketika hasil akibat penggunaan sebuah produksi tidak sesuai dengan simbol input. Jika produksi A mempunyai dua buah ruas kanan atau lebih maka produksi yang dipilih untuk digunakan adalah produksi dengan simbol pertama ruas kanannya sama dengan input yang sedang dibaca. Jika tidak ada produksi yang demikian maka dikatakan bahwa parsing tidak dapat dilakukan.


  • Ketentuan produksi yang digunakan metoda recursive descent adalah : Jika terdapat dua atau lebih produksi dengan ruas kiri yang sama maka karakter pertama dari semua ruas kanan produksi tersebut tidak boleh sama. Ketentuan ini tidak melarang adanya produksi yang bersifat rekursi kiri.

untuk lebih dimengerti kita lihat contoh aja ya.......



1.PARSING Down  Metode Brute-Force







Gunakan metode Brute Force untuk melakukan analisa terhadap kalimat
X = edok

      a. Penyelesaian pertama
      
  •        Menggunakan Parse Tree







  •        Menggunakan Derivasi








Maka tidak berhasil  menyelesaikan kalimat dengan Ook


 b.Penyelesaian kedua

  •      Menggunakan Parse Tree














  • Menggunakan Derivasi


Maka berhasil  menyelesaikan kalimat dengan OK


2. PARSING Down  Metode Recursive-Descent




Gunakan metode recursive descent untuk melakukan analisis sintak terhadap kalimat  X = amsal

 Penyelesaiannyaa...

  •             Menggunakan Parse Tree






  •        Menggunakan Derivasi









Maka Parsing Gagal  hal ini karena S tidak mengandung sal melainkan sol dan tol 



Selasa, 11 Oktober 2016

Pembuktian bahasa regulerrrrrrr


Buktikan :

Bukti :

 1.    Bahasa reguler   (011)* 1 = 0 (111)*

yooo...
kita butikan......!!!!!
 ternyata  (011)* 1 = 0 (111)* ---> tidak terbukti.....

2. Bahasa reguler 1(01)* = (10)1

yoo...kita buktikan...


   
 ternyata  1(01)* = (10)1        ---> tidak terbukti.....



Cara kerja mesin penterjemahan bahasa pemograman

Bahasa Pemrograman

Manusia  dapat  melakukan   interaksi  secara  efektif  dengan  menggunaka media bahasa. Bahasa memungkinkan penyampaian gagasan dan pemikiran, tanpa itu komunikasi akan sulit terjadi. Dalam lingkungan pemrograman komputer, bahasa pemrograman  bertindak  sebagai  sarana  komunikasi  antara  manusia  dan permasalahannya dengan komputer yang dipakai untuk membantu memperoleh pemecahan.


Bahasa pemrograman berdasarkan tingkat ketergantungannya dengan mesin bisa meliputi:
1.   Bahasa Mesin

Merupakan bentuk terendah dari bahasa komputer. Setiap instruksi dalam program direpresentasikan dengan kode numerik, yang secara fisik berupa deretan angka 0 dan 1.
2.   Bahasa Assembly

Merupakan bentuk simbolik dari bahasa mesin. Setiap kode operasi memiliki kode simbolik, misalnya ADD untuk penjumlahan (Addition) dan MUL untuk perkalian (Multiplication)Pada bahasa assembly tersedia alat bantu untuk diagnostik atau debug  yang tidak  terdapat  pada  bahasa  mesin.  Contoh  produk  yang ada  untuk pengembangadan debug bahasa assembly di pasaran saat ini, misalnya Turbo Assembler dari Borland, Macro Assembler dari Microsoft, Debug yang tersedia pada DOS, dan lain lain.




3.   Bahasa tingkat tinggi (User Oriented)

Disebut tingkat tinggi karena lebih dekat dengan manusia. Memberikan fasilitas yang lebih banyak, kontrol program yang terstruktur, kalang (nested), block, dan prosedur. Contohnya : Pascal, C, Basic, dan lain lain.
4.   Bahasa yang Problem Oriented

Memungkinkan penyelesaian untuk suatu masalah atau aplikasi yang spesifik. Contohnya : SQL (Structured Query Language) untuk aplikasi database, COGO untuk  aplikasi  teknik  sipil.  Bahasa  yang problem  oriented  kadang  dimasukkan pula sebagai bahasa tingkat tinggi.


Keuntungan bahasa tingkat tinggi dibandingkan bahasa tingkat rendah adalah sebagai berikut.
1.   Kemudahan untuk dipelajari.

2.   Lebih mendekati permasalahan yang akan diselesaikan.

3.   Pemrogram tidak perlu mengetahui bagaimana representasi data ke dalam bentuk internal di memory.
4.   Memberikan banyak pilihan struktur kontrol seperti :

     Kondisional (IF THEN ELSE)

     Looping

     Struktur Blok (Begin ... End)

     Nested Statement

5.   kompabilitas dan dokumentasi yang lebih baik dalam pengembangan program.



Translator

Sebuah translator  melakukan  pengubahan  source code / source program  (program sumber) ke dalam target code / object code / object program (program objek). Source code ditulis dalam bahasa sumber, sedang object code bisa berupa suatu bahasa pemrograman  lain atau  bahasa  mesin  pada  suatu  komputer.  Ada  beberapa  macam translator.
1.   Assembler

Menerjemahkalangsung dari source code ke object code. Source Code adalah bahasa assembly sedangkan object code adalah bahasa mesin. Contohnya adalah TASM.
Contoh  yang  menghasil  .Com  adalah  :  Debug,  TASM  (bila  linker  dilakukan dengan perintah Tlink/x/t), emu8086,
Contoh  yang menghasilkan  .Exe adalah : TASM  dengan  perintah  linker Tlink, HLA, MASM32, FASM

Khusus TASM terkadang file .Com yang dihasilkan akan lebih baik daripada file


         2.   Kompilator (Compiler)
SourcCode  adalah  bahasa  tingkat  tinggi  (misal  bahasa  Pascal),  object  code adalah bahasa mesin atau bahasa assembly. Source Code dan data diproses pada saat yang berbeda. Contohnya : Turbo Pascal, C++.

3.   Interpreter

Interpreter tidak membangkitkan Object Code, hasil translasi hanya dalam bentuk

Run Time Code.

Contohnya : Bahasa Basica, Dbase/Foxbase

Perbedaan antara Interpreter dengan Compile

Interpreter

1.   Menerjemahkan instruksi per instruksi

2.   Tidak menghasilkan objek program

3.   Tidak menghasilkan executable program

4.   Source program terus dipergunakan karena tidak dihasilkan executable program.



Compiler

1.   Menerjemahkan secara keseluruhan sekaligus

2.   Dihasilkan objek program

3.   Dihasilkan executable program

4.   Source program tidak dipergunakan lagi untuk menjalankan program.


Model Kompilator

Pengembangan    kompilator   untuk   sebua bahas merupaka pekerjaa yang kompleks.  Kompleksitas  kompilator  bisa  dikurangi  bilperancang  bahasa pemrograman  mempertimbangkan  bermacam  – macam faktor perancangan.  Karena kita berhubungan dengan bahasa tingkat tinggi, bagaimanapun suatu model dasar dari kompilator dapat diformulasikan.


Sebuah kompilator umumnya memiliki 2 tugas pokok :

1.   Fungsi Analisis

Fungs analisi bias disebut   sebaga Front   End Tugasny melakukan dekomposisi program sumber menjadi bagian bagian dasarnya.
2.   Fungsi Sintesis

Fungs sintesis   bias disebut    sebagai    Bac End Tugasnya    melakukan pembangkitan dan optimasi program objek.

Analisis semantik : Melakukaanalisa semantik,  biasanya dalam realisasi akan digabungkan dengan intermediate code generator (bagian yang berfungsi membangkitkan kode antara.
Seperti :

-    Triples Notation

-    Quadruples Notation

      Code Generator : Membangkitkan kode objek. Bagian ini merupakan bagian yang bersifat abstrak,  artinya  tidak dilaksanakan  oleh programmer.  Tetapi  dilakukan oleh bahasa pemrograman yang dilakukan oleh programmer dalam perancangan compiler.  Di  sini  kode  antara  dari  program  biasanya  ditranslasi  ke  bahasa assembly atau bahasa mesin.
     Code Optimizer : Upaya untuk memperkecil hasil dan mempercepat proses

      Tabel Informasi : Menyimpan semua informasi yang berhubungan dengan proses kompilasi.


Pada beberapa kompilator, bagaimanapun, fase fase kompilasi tersebut bisa dikombinasikan. Bisa kita lihat, misalnya interaksi antara scanner dan parser terdapat dua kemungkinan :
1.   Scanner  menghasilkan  suatu  token  untuk  diproses  oleh  parser.  Parser  akan memanggil scanner bila token berikutnya diperlukan.
2.   Scanner  menghasilkan  semua  token yang berhubungan  dengasource  program sebelum memneruskan ke parser. Pada kasus ini scanner telah memeriksa keseluruhan source program.


Mutu Kompilator

Misalkan saja kita pernah menggunakan kompilator untuk bahasa Basic seperti Turbo Basic dan Quick Basic. Kemudian kita bisa mengatakan bahwa salah satu lebih baik dari lainnya. Tentu ada beberapa hal yang menjadi pertimbangan kita, dalam hal ini bisa  kita  sebut  sebagai  mutu  dari  kompilator  yang  bersangkutan.  Mutu  sebuah kompilator bergantung dari beberapa faktor, yaitu :
1.   Kecepatan dan waktu proses kompilasi.

Bis Anda   bayangka misalka saat  Anda   meneka F9  (Compile dalam kompilator Turbo Pascal untuk melakukan kompilasi suatu program. Berapa lama



Anda harus menunggu untuk memperoleh hasil kompilasi itu merupakan waktu proses kompilasi.


Mutu ini tergantung dari :

   Penulisan  algoritma  kompilator  yaitu  algoritma  yang  digunakan  untuk menuliskan program kompilator tersebut. Misalkan saja bisa dikatakan bahwa suatu kompilator  lebih  cepat  melakukan  kompilasi  dibandingkan  lainnya, karena para pemrogramnya menggunakan algoritma yang lebih baik saat membuat kompilator tersebut.
    Kompilator  pengkompilasi   :  sebuah  program  khusus  yang  menghasilkan kompilator tersebut. Bisa kita bayangkan kompilator Turbo Basic, misalnya, tentu saja tidak dibuat dengan bahasa Basic, tetapi menggunakan bahasa lain dan dikompilasi.dengan   kompilator  lain.  Kalau  sebuah  kompilator  dibuat dengan bahasa C, misalnya , kompilator C tersebut juga ikut menentukan mutu
kompilator yang dibuat.


2.   Mutu Program Objek

Mutu suatu program objek (program hasil dari proses kompilasi) ditentukan oleh ukuran dan kecepatan eksekusi dari program objek. Misalkan saja kita bisa mengatakan bahwa Turbo Pascal 6 lebih baik dari Turbo Pascal 5, bila program Objek (EXE) yang dihasilkan berukuran lebih kecil dan lebih cepat dieksekusi. Hal ini tergantung dari fungsi translasi yang digunakan oleh kompilator tersebut (cara untuk melakukan perubahan dari source code ke object code). Misalkan saja kita akan membuat suatu kompilator yang memiliki instruksi untuk menuliskan suatu kalimat ke layar, kita sebut saja instruksi writekar. Kompilator ini kita buat dengan bahasa assembly. Sementara pada assembly untuk melakukan pencetakan kalimat bisa dengan Intterupt 10 atau Intterupt 21. Maka pilihan apakah instruksi



writekar tadi akan diubah ke intterupt 10 atau intterupt 21, akan ikut menentukan ukuran object code nya
.

3.   Integrated Environtment

Merupakan fasilitas fasilitas terintegrasi yang dimiliki oleh kompilator tersebut. Misalnya untuk melakukan editing, debugging, testing. Biasa disebut juga dengan IDE (Integrated Development Environtment). Misalkan saja dengan Turbo Pascal (Turbo.Exe) Anda bisa melakukan penyuntingan sekaligus kompilasi dan debug dalam satu lingkungan pemrograman. Sementara kalau menggunakan Clipper (Clipper.Exe)  Anda harus melakukan  penyuntingan  dengan menggunakan  suatu program editor (PE.Exe) ataupun notepad yang terpisah dari kompilatornya.


Pembuatan Kompilator

Pembuatan suatu kompilator dapat dilakukan dengan :

1.   Bahasa Mesin

Tingkat kesulitannya sangat tinggi, karena bahasa mesin ini sangat dekat dengan mesin  sehingga  sangat  tidak  manusiawi,  datingkat  ketergantungannya  pada mesin yang tinggi. Pembuatan kompilator dengan bahasa mesin hampir mustahil dilakukan. Bahasa mesin mungkin digunakan saat membuat assembler.
2.   Bahasa Assembly

Bahasa assembly bisa dan biasa digunakan sebagai tahap awal pada proses pembuatan sebuah kompilator. Keuntungan penggunaan bahasa assembly adalah progra hasil   (objec code yang   memilik ukura kecil Kerugiannya memerlukan usaha yang besar, karena instruksi assembly pendek pendek (sulit dimengerti)   dan   memiliki   fasilita yang   terbatas Sehingg masih   terdapat kesulitan  untuk  mengembangkan  sebuah  kompilator  yang  secara  keseluruhan dibuat dengan bahasa assembly.
3.   Bahasa tingkat tinggi

Keuntungannya  adalah proses pembuatan  kompilator  akan lebih mudah, karena menggunakan bahasa tingkat tinggi yang lebih mudah dimengerti dan fasilitasnya lebih baik dibandingkan assembly. Kerugiannya kompilator yang dihasilkan akan memiliki ukuran yang besar. Bisa dibayangkan kalau kita akan mengembangkan suatu kompilator untuk suatu bahasa dengan menggunakan Turbo Pascal.


4.   Bootstrap

Gagasan dari Bootstrap adalah kita bisa membangun sesuatu yang besar dengan lebih dulu membuat  bagian intinya. Cara ini diperkenalkan  oleh Niklaus Wirth saat membuat kompilator untuk bahasa Pascal.

Detail Rancangan

Microstructure

Microstructure  pada  dasarnya  mencakup  masalah  –  masalah  dalam  perancangan bahasa yang mempengaruhi penampilan bahasa sehingga lebih mudah dimengerti. Prinsip mendasar dari suatu microstructure adalah arti dari suatu konstruksi, seperti keyword,  harus  jelas  dari  wujudnya.  Dengan  kata  laintoken  suatu  bahasa  harus mudah dikenali apakah itu dan apa yang dilakukan.


Keyword  harus  bisa  diucapkan,  karena  akalebih  mudah  diingat.  Keyword  harus dipilih sedemikian sehingga tidak akan sama dengan identifier yang dibuat user. Misalkan  sajgunakan  operator  SIZE ketimbang  SIZ.  Jika  mungkin  jangan gunakan dua keyword yang memiliki ejaan yang mirip (misal PROGEND dengan
PROCEND). Terdapat tiga pendekatan bagaimana memisahkan keyword dengan identifier yang didefinisikan user :
1.   Keyword adalah reserved” dan tidak boleh digunakan sebagai identifier

Merupakan alternatif terbaik karena sederhana dan jarang menimbulkan masalah.

2.   Keyword dibedakan dari identifier berdasarkan konteksnya

Menyulitka pad taha parser karen jumla keywor pada   beberapa implementasi begitu besar sehingga user tidak dapat menghindarinya.
3.   Keyword diawali dengan karakter khusus untuk menandainya

Memerlukan tambahan pengetikan dan membuat program lebih susah dibaca.



Aspek lain dari Microstructure  adalah pengaturan  komentar. Salah satu pendekatan dalayang digunakan  adalah dengan  menggunakan  suatu simbol  untuk  menandai awal komentar dan kemudian apapun sampai akhir baris dianggap sebagai komentar. Pemilihan simbol yang mendahului komentar idealnya :
1.   Simbol terdiri dari dua karakter, lebih baik karakter yang sama

2.   Simbol yang jarang dipergunakan

3.   Terdiri dari karakter berlokasi sama pada keyboard

Contohnya simbol // adalah pilihan yang baik untuk menandai komentar.



Struktur Ekspresi

Salah satu topik yang berhubungan dengan ekspresi adalah urutan dari evaluasinya. Seperti dalam operasi aritmatika memiliki urutan evaluasi :
1.   Operator ’( dan operator ’)

2.   Operator *’ dan /’

3.   Operator +’ dan ’-

  
Struktur Data

Empat aspek dari struktur data adalah :

1.   Deklarasi Data

Biasanya kebutuhan bahasa pemrograman berkaitan dengan deklarasi untuk :

a Konstanta b.   Tipe
c Variabel

2.   Tipe Data

Terdapat tiga pendekatan untuk tipe data dalam bahasa pemrograman :

a Tidak  ada  sama  sekali.  Merupakan  karakteristik   yang  ada  pada  bahasa assembly
b.   Soft  Typing.  Ditentukan  suatu  jenis  tipe,  di  mana  setiap  variabel  boleh memuat nilai apapun.
c Hard typing. Ditentukan suatu jenis tipe, di mana setiap variabel hanya boleh memuat nilai yang menjadi domain dari tipe tersebut. Dari sudut pandang pemeriksaan kesalahan saat kompilasi hard typing lebih unggul.


Struktur Kontrol

Sering dipakai dengan menggunakan If then else dan juga perintah Case.



Struktur Kompilasi

Struktur  kompilasi  mencakup  aspek  dari  bahasa  yang  berkaitan  dengan  proses kompilasi, berhubungan dengan operasi pada bahasa yang dikerjakan saat kompilasi dan bagaimana kompilasi modul yang berbeda dan terpisah dari program. Salah satu fasilitas  adalah  untuk  menyisipkan  suatu  file  lain  (seperti  include  pada  bahasa  C ataupun uses pada bahasa Pascal).


Mengenali Huruf pada Suatu Input

Pengenalan  huruf  ini  penting  untuk  mengetahui  apakah  suatu  besaran  leksik  itu berupa identifier, variabel ataupun konstanta.
1)  Identifier atau Keyword

Terdiri dari deretan kata kunci pada suatu bahasa pemrograman seperti : if, else, end if, then, for, while, dll
2)  Konstanta

Berupa angka tetap

3)  Delimiter dan Operator

Terdiri  dari  rangkaian  operator,  dalam  hal  ini  adalah  operator  aritmatika  dan operator pembanding seperti : +, -, <, >, dll.


Berikut ini adalah program pada Bahasa Pemrograman Visual Basic untuk mengenali apakah suatu input itu huruf atau tidak.
Private Sub Form_Load()

a = InputBox("Masukkan Input:") For i = 1 To Len(a)
d = Mid(a, i, 1)

If (d >= "A" And d <= "Z") Or (d >= "a" And d <= "z") Then

Debug.Print "Huruf"
 Else
 Debug.Print "Bukan Huruf"
End If

Next i

End Sub


Atau, cara lain :

Private Sub Form_Load()

a = InputBox("Masukkan Input:") For i = 1 To Len(a)
d = Mid(a, i, 1)

If (Asc(d) >= Asc("A") And Asc(d) <= Asc("Z")) Or (Asc(d) >= Asc("a") And Asc(d) <= Asc("z")) Then
Debug.Print "Huruf"
Else

 Debug.Print "Bukan Huruf"

 End If


Next i

End Sub


Dengan menggunakan Bahasa Pascal :

uses crt;

var

ekspresi : String; tampung:char; i:integer;
begin

clrscr;

write('Masukkan ekspresi:');

readln(ekspresi);
for i:=1 to length(ekspresi) do begin

if   ((ekspresi[i]>=#65)    and   (ekspresi[i]<=#97))    or

((ekspresi[i]>=#97) and (ekspresi[i]<=#122)) then writeln('Huruf')
else
end.


end;

readln;

writeln('Bukan Huruf');


Dengan menggunakan bahasa C :

#include <stdio.h>

#include <conio.h>

#include <ctype.h>

#include <string.h>

void main()

{

clrscr();

char ekspresi[100];

int i;

printf("Masukkan Ekspresi:"); scanf("%s",&ekspresi); for(i=0;i<strlen(ekspresi);i++)
{

if (isalpha(ekspresi[i]))

printf("Adalah huruf\n");

else

printf("Bukan Huruf\n");

}

getch();

}


Versi II :

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{

clrscr();

char ekspresi[100];

int kar;

int i;

printf("Masukkan Ekspresi:"); scanf("%s",&ekspresi); for(i=0;i<strlen(ekspresi);i++)
{

kar=ekspresi[i];

if (((kar>=65) && (kar<=90)) || ((kar>=97) && (kar<=122)))

printf("Adalah huruf\n");

else

printf("Bukan Huruf\n");

}

getch();

}


Mengenali Angka pada Suatu Input

Private Sub Form_Load() Debug.Print "--------------"
a = InputBox("Masukkan Input:")

For i = 1 To Len(a)

d = Mid(a, i, 1)

If (Asc(d) >= Asc("0") And Asc(d) <= Asc("9")) Then

Debug.Print "Angka"

Else
Debug.Print "Bukan Angka" End If


Next i

End Sub


Cara lain :

Private Sub Form_Load()

a = InputBox("Masukkan Input:") For i = 1 To Len(a)
d = Mid(a, i, 1)

If (d >= "0" And d <= "9") Then

Debug.Print "Angka"
Else

Debug.Print "Bukan Angka"
End If
  
Next i

End Sub


Dengan menggunakan bahasa Pascal :

uses crt;

var

ekspresi : String; tampung:char; i:integer;
begin

clrscr;

write('Masukkan ekspresi:');

readln(ekspresi);
for i:=1 to length(ekspresi) do begin

if ((ekspresi[i]>=#48) and (ekspresi[i]<=#57))then writeln('Angka')
else
end.


end;

readln;

writeln('Bukan Angka');



Dengan menggunakan Bahasa C :

#include <stdio.h>

#include <conio.h>

#include <ctype.h>

#include <string.h>

void main()

{

clrscr();

char ekspresi[100];

int i;

printf("Masukkan Ekspresi:"); scanf("%s",&ekspresi); for(i=0;i<strlen(ekspresi);i++)
{

if (isdigit(ekspresi[i]))

printf("Angka\n");

else

printf("Bukan Angka\n");

}

getch();

}


Versi :

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{

clrscr();

char ekspresi[100];

int kar;

int i;

printf("Masukkan Ekspresi:"); scanf("%s",&ekspresi); for(i=0;i<strlen(ekspresi);i++)
{

kar=ekspresi[i];

if ((kar>=48) && (kar<=57))

printf("Angka\n");

else
printf("Bukan Angka\n");

}

getch();

}


Analisis Leksikal

Tugas utama penganalisis leksikal / Scanner adalah mengidentifikassemua besaran yang membangun  suatu bahasa  pada program  sumber.  Scanneadalah bagian dari kompilator yang menerima input berupa stream karakter kemudian memilah program sumber menjadi satuan leksik yang disebut dengan token. Token ini akan menjadi input bagi parser.
Pekerjaan yang dikerjakannya antara lain :

1.   Melakukan pembacaan kode sumber dengan merunut karakter demi karakter.

2.   Mengenali besaran leksik.

3. Membuang komentar : Komentar biasanya ditulis oleh programmer untuk mempermudah dalam mempelajari program yang dibuat. Dalam setiap bahasa pemrograman selalu disediakan simbol untuk mengawali / mengakhiri komentar. Oleh karena itu scanner pada analisis leksikal ini harus dapat mengenali bagian awal dan akhir setiap komentar supaya dapat dibuang atau tidak ikut dalam proses kompilasi.
4.   Menyeragamkan huruf kapital menjadi huruf kecil atau sebaliknya : Untuk bahasa bahasa – bahasa pemrograman yang bersifat non case sensitive, identifier arraySize  dan arraysize  dianggap  sama.  Oleh karena  itu,  bagian  penganalisis leksikal bertugas menyeragamkan  jenis huruf agar identifiesemacam  itu tidak dianggap berbeda.
5.   Membuang spasi

6.   Menangani kesalahan


Besaran Leksik

Besaran pembangun bahasa / leksik meliputi :

1.   Identifier

Bisa  berupa  keywords  atau  nama.  Keywords  adalah  kata  kunci  yang  sudah didefinisikan oleh suatu bahasa seperti Begin, End, If, dan Else di dalam Pascal. Nama dideklarasikan sendiri oleh pemakai seperti nama pada sebuah variabel. Misal :
Var

Nama : Integer; Suhu : Real;
2.   Nilai Konstanta

Adalah  suatu  konstanta  yang  terdapat  pada  program.  Bisa  berupa  konstanta integer, real, boolean, character, string, dan sebagainya.
Misal : Const
N := 10;

Kata := Saya

3.   Operator dan Delimiter

Operator misalnya +, -, *, dan /.



Menghilangkan Blank

Dalam pengetikan suatu program, terkadang sering terjadi adanya banyak blank yang tidak diperlukan. Salah satu dari tugas scanner atau lexical analyzer ini adalah untuk mengabaikan blank yang dimaksud. Sebagai contoh adalah :
C = A                          +                    B Maksud dari pernyataan di atas, adalah C = A + B.
Jika pernyataan  semacam  itu tidak diantisipasi  oleh compiler  maka pernyataan  ini tidak akan dapat dieksekusi, karena tidak dimengerti oleh compiler.
Berikut ini adalah program untuk menghilangkan blank.

Private Sub Form_Load()

c = InputBox("Masukkan Ekspresi:")

d = ""

flag = False

For i = 1 To Len(c)

If Mid(c, i, 1) = " " Then

If flag = False Then

d = d + Mid(c, i, 1) End If
flag = True
 Else

 d = d + Mid(c, i, 1)

flag = False
End If
Next i

Debug.Print d

End Sub


Dengan menggunakan Bahasa Pascal :

uses crt;

var

ekspresi : String; tampung:string; i:integer; flag:boolean;
begin

clrscr;

flag:=false;

write('Masukkan ekspresi:');

readln(ekspresi);
for i:=1 to length(ekspresi) do begin

if ekspresi[i]=' 'then begin
if flag=false then tampung:=tampung+ekspresi[i];
flag:=true;
end;
end else begin

 end;

  
tampung:=tampung+ekspresi[i];

flag:=false

end.

writeln(tampung);

readln;

  Dengan menggunakan Bahasa C :

#include <stdio.h>

#include <conio.h>

#include <string.h>

void main()

{



clrscr();

char ekspresi[100]; char kalimat[100]; int kar;
int i;

int hitung; int flag; hitung=0; flag=0;
printf("Masukkan Ekspresi:");

gets(ekspresi);

for(i=0;i<strlen(ekspresi);i++)

{

if (ekspresi[i]==' ')

{

if (flag==0)

{

kalimat[hitung]=ekspresi[i];

hitung=hitung+1;

}

flag=1;

}

else

{

kalimat[hitung]=ekspresi[i];

hitung=hitung+1;

flag=0;

}

}

for(i=0;i<hitung;i++)

printf("%c",kalimat[i]);

getch();

}


Pemakaian Procedure

1.   Pada Pascal

Pada Pascal pengiriman parameter dapat dilakukan dengan dua cara yaitu :

a Pengiriman parameter secara nilai

Jika  nilai  parameter  pada  prosedur  diubah  tidak  akan  mempengaruhi  nilai parameter nyata.



b.   Pengiriman parameter secara acuan.

Jika nilai parameter pada prosedur diubah akan mempengaruhi nilai parameter nyata.
Contoh pengiriman parameter secara nilai :

uses crt;

procedure hitung(a,b:integer);

var

c:integer;

begin
end;

var

c:=a+b;

writeln('Nilai c = ',c);


x,y:integer;

begin
  
end.

write('Masukkan Nilai X :');

readln(x);

write('Masukkan Nilai Y :');

readln(y); hitung(x,y); readln;



Contoh pengiriman parameter secara acuan :

uses crt;

procedure hitung(var a,b:integer);

var

c:integer;

begin
end;

var

a:=10;

c:=a+b;

writeln('Nilai c = ',c);

x,y:integer;

begin

write('Masukkan Nilai X :');

readln(x);

write('Masukkan Nilai Y :');

readln(y);
end.

hitung(x,y);

writeln('Nilai variabel x=',x);

readln;
  
2.   Pada Visual Basic

Pada VB 6, ada 4 jenis procedure yaitu :

a Procedure  Sub   procedure  yang  tidak  mengembalikan  nilai  setelah  tugasnya selesai. Sering disebut juga Procedure.
b.   Procedure  Function   Procedure  yang  mengembalikan  nilai  setelah  tugasnya selesai. Sering disebut juga Fungsi
c Procedure Event Procedure untuk sebuah event pada suatu object. Digunakan di dalam Class Module.
d.   Procedur Property Procedure untuk mengubah (Let) dan mengambil (Get) nilai property pada sebuah object. Digunakan di dalam Class Module.


Contoh pemakaian Procedure Sub :

Private Sub Form_Load()

a = InputBox("Masukkan Panjang:") b = InputBox("Masukkan Lebar:") Call hitung(Val(a), Val(b))
End Sub

 Private Sub hitung(panjang As Integer, lebar As Integer)

luas = panjang * lebar

Debug.Print luas

End Sub


3.   Pada Bahasa C

# include <stdio.h>

# include <conio.h>

void hitung(int panjang,int lebar);


void main()

{

int a,b;

clrscr();

printf("Masukkan Panjang :");
 scanf("%i",&a); printf("Masukkan Lebar:"); scanf("%i",&b); hitung(a,b);
getch();

}


void hitung(int panjang,int lebar)

{

int luas; luas=panjang*lebar; printf("Luas = %i",luas);
}


Pemakaian Fungsi

Berikut ini adalah contoh pemakaian fungsi pada Turbo Pascal

1.   Fungsi Tanpa parameter

uses crt;

Function garis:string;

begin

garis:='----------------';

end;

begin
end.

writeln(garis); writeln('Pascal'); writeln(garis); readln;

  
2.   Fungsi dengan Parameter

uses crt;

function luas(panjang,lebar:integer):integer;

begin
end;

luas:=panjang*lebar; 
var
p,l:integer;

begin
 clrscr;

end.

write('Masukkan Panjang :');

readln(p);

write('Masukkan Lebar :'); readln(l); writeln('Luas=',luas(p,l)); readln;



Pemakaian Fungsi pada Bahasa pemrograman Visual Basic

Private Sub Form_Load()

a = InputBox("Masukkan panjang :") b = InputBox("Masukkan lebar:") luas = luaspersegi(a, b) Debug.Print luas
End Sub


Private Function luaspersegi(panjang, lebar)

luaspersegi = Val(panjang) * Val(lebar) End Function


Pemakaian fungsi pada Bahasa C

# include <stdio.h>

# include <conio.h>

int hitung(int panjang,int lebar);

void main()

{

int a,b;

clrscr();

printf("Masukkan Panjang :"); scanf("%i",&a); printf("Masukkan Lebar:"); scanf("%i",&b); printf("Luas=%i",hitung(a,b)); getch();
}


int hitung(int panjang,int lebar)

{

int luas;

luas=panjang*lebar;


}