BAHASA PEMROGRAMAN C
Mata Kuliah :
Algoritma Pemrograman A (IF 5020)
Oleh :
Bahasa C adalah salah satu general-purpose programming language bahasa ini juga
biasa disebut “System programming language” kerna bahasa ini biasa digunakan untuk
menulis compilers dan operating system.
Bahasa ini juga menyediakan konstruksi control-flow mendasar yang dibutuhkan oleh
program terstruktur. Control-flow tersebut diantaranya :
a. Statement grouping
b. Decision making (if-else)
c. Switch
d. While, for
e. Do yang berada di bawah while,for
f. Loop exit (break)
Fungsi pada C juga dapat dipanggil secara rekursif dengan kemungkinan
mengembalikan nilai return dari tipe mendasar, struktur, union, atau pointer. Local variable
dapat secara “otomatis” atau dibuat dengan masuk atau dibuat dengan invokasi yang baru.
Fungsi dari program C mungkin berada pada pada file terpisah dan di compile secara
terpisah.
Bahasa C tidak menyediakan operasi untuk mengatasi composite object secara
langsung, seperti string, set, list, atau array. Tidak ada operasi yang memanipulasi array atau
string, walaupun strukturnya disalin sebagai unit. Bahasa ini tidak mendefinisikan alokasi
penyimpanan selain definisi statis dan stack dibuat sebagai fungsi dari local variable.
Bahasa C itu sendiri tidak menyediakan input/output; tidak ada pernyataan READ
atau WRITE, dan tidak ada metoda akses file built-in. Semua higher-mechanism ini
disediakan oleh pemanggilan fungsi secara eksplisit. Kebanyakan implementasi C telah
memiliki koleksi standar dari fungsi tersebut.
2. Notasi BNF
Notasi BNF adalah metabahasa yang digunkana untuk menggambarkan tata bahasa
dari bahasa pemrograman. Dibawah ini adalah notasi BNF dari bahasa C yang telah di
definisikan :
2.1 Grammar
2.3 Expression
2.3.1 Primary Expression
<primary-expression> ::= <identifier>
| <constant>
| <string>
| ( <expression> )
2.4 Declarations
<declaration> ::= {<declaration-specifier>}+ {<init-declarator>}* ;
<declaration-specifier> ::= <storage-class-specifier>
| <type-specifier>
| <type-qualifier>
<init-declarator> ::= <declarator>
| <declarator> = <initializer>
2.4.4 Enumeration
<enum-specifier> ::= enum <identifier> { <enumerator-list> }
| enum { <enumerator-list> }
| enum <identifier>
<enumerator-list> ::= <enumerator>
| <enumerator-list> , <enumerator>
2.4.5 Declarators
<struct-declaration> ::= {<specifier-qualifier>}* <struct-declarator-list>
<struct-declarator-list> ::= <struct-declarator>
| <struct-declarator-list> , <struct-declarator>
<specifier-qualifier> ::= <type-specifier>
| <type-qualifier>
<struct-declarator> ::= <declarator>
| <declarator> : <constant-expression>
| : <constant-expression>
<struct-declaration> ::= {<specifier-qualifier>}* <struct-declarator-list>
2.4.9 Typedef
<typedef-name> ::= <identifier>
2.5 Statements
<statement> ::= <labeled-statement>
| <expression-statement>
| <compound-statement>
| <selection-statement>
| <iteration-statement>
| <jump-statement>
<labeled-statement> ::= <identifier> : <statement>
| case <constant-expression> : <statement>
| default : <statement>
<expression-statement> ::= {<expression>}? ;
<compound-statement> ::= { {<declaration>}* {<statement>}* }
<selection-statement> ::= if ( <expression> ) <statement>
| if ( <expression> ) <statement> else <statement>
| switch ( <expression> ) <statement>
<iteration-statement> ::= while ( <expression> ) <statement>
| do <statement> while ( <expression> ) ;
| for ( {<expression>}? ; {<expression>}? ; {<expression>}? ) <statement>
<jump-statement> ::= goto <identifier> ;
| continue ;
| break ;
int main(void)
{
printf ( "hello, world\n" )
}
Penurunan
<translation-unit>::=<external-declaration> R1
-> <external-declaration>::=<function-definiitoion> R2
-> <function-definition>::=<declaration-specifier> <declarator> R3
<compound-statement>
-> <declaration-specifier>::=<type-specifier> <declarator> <compound- R4
statement>
-> <type-specifier>::= int <declarator> <compound-statement> R6
-> <declarator>::= int <direct-declarator> <compound-statement>
-> <direct-declarator> ::= int <direct-declarator> ( <parameter-type-
list> ) <compound-statement>
-> <parameter-list> ::= int <direct-declarator> ( <parameter-
declaration> ) <compound-statement>
-> <parameter-declaration>::=int <direct-declarator> ( <declaration-
specifier> ) <compound-statement>
-> <declaration-specifier>::=int <direct-declarator> ( <type-specifier>
) <compound-statement>
-> <type-specifier>::=int <direct-declarator> (void) <compound-
statement>
-> <direct-declarator>::=int <identifier> (void) <compound-statement>
-> <identifier>::=int <alpha><alpha><alpha><alpha>(void) <compound-
statement>
-> <alpha>::= int m<alpha><alpha><alpha>(void) <compound-statement>
-> <alpha>::= int ma<alpha><alpha> (void) <compound-statement>
-> <alpha>::= int mai<alpha> (void) <compound-statement>
-> <alpha>::= int main(void) <compound-statement>
-> <compound-statement> ::= int main(void) { <declaration>}
-> <declaration>::= int main(void) { <init-declarator> }
-> <init-declaration> ::= int main(void) { <declarator> }
-> <declarator> ::= int main(void) { <direct-declarator> }
-> <direct- declarator> ::= int main(void) { <direct-declarator>
( <identifier> ) }
-> <direct-declarator> ::= int main(void) { <identifier> ( <identifier>
) }
-> <identifier> ::= int main(void)
{ <alpha><alpha><alpha><alpha><alpha><alpha> ( <string> ) }
-> <alpha>::= int main(void) { p<alpha><alpha><alpha><alpha><alpha>
( <string> ) }
-> <alpha>::= int main(void) { pr<alpha><alpha><alpha><alpha>
( <string> ) }
-> <alpha>::= int main(void) { pri<alpha><alpha><alpha> ( <string> ) }
-> <alpha>::= int main(void) { print<alpha> ( <string> ) }
-> <alpha>::= int main(void) { printf ( <string> )
int main()
{
int a=3;
int b=2;
int c;
c=a;
a-b;
b=c;
printf("%d",b);
return 0;
}
Penurunan
<translation-unit>::=<external-declaration>
-> <external-declaration>::=<function-definiitoion>
-> <function-definition>::=<declaration-specifier> <declarator> <compound-
statement>
-> <declaration-specifier>::=<type-specifier> <declarator> <compound-
statement>
-> <type-specifier>::= int <declarator> <compound-statement>
-> <declarator>::= int <direct-declarator> <compound-statement>
-> <direct-declarator> ::= int <direct-declarator> ( <parameter-type-list> )
<compound-statement>
-> <direct-declarator>::=int <identifier> (<parameter-type-list>) <compound-
statement>
-> <identifier>::=int <alpha><alpha><alpha><alpha>(<parameter-type-list>)
<compound-statement>
-> <alpha>::= int m<alpha><alpha><alpha>(<parameter-type-list>) <compound-
statement>
-> <alpha>::= int ma<alpha><alpha> (<parameter-type-list>) <compound-
statement>
-> <alpha>::= int mai<alpha> (<parameter-type-list>) <compound-statement>
-> <alpha>::= int main(<parameter-type-list>) <compound-statement>
-> <compound-statement>::=int main(<parameter-type-list>)
{ <declaration><declaration><declaration><statement>* }
-> <declaration>::=int main(<parameter-type-list>) {
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <declaration-specifier>::= int main(<parameter-type-list>) {
<type-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> < type-specifier >::= int main(<parameter-type-list>) {
int <init-declarator>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <init-declarator>::= int main(<parameter-type-list>) {
int <declarator> = <initialize>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <declarator>::= int main(<parameter-type-list>) {
int <identifier> = <initialize>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <identifier>::= int main(<parameter-type-list>) {
int a = <initializer>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <initializer>::= int main(<parameter-type-list>) {
int a = <constant>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <constant>::= int main(<parameter-type-list>) {
int a = <integer-constant>;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <constant>::= int main(<parameter-type-list>) {
int a = 3;
<declaration-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
<declaration-specifier>::= int main(<parameter-type-list>) {
Int a = 3;
<type-specifier><init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> < type-specifier >::= int main(<parameter-type-list>) {
int a = 3;
int <init-declarator>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <init-declarator>::= int main(<parameter-type-list>) {
int a = 3;
int <declarator> = <initialize>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <declarator>::= int main(<parameter-type-list>) {
int a = 3;
int <identifier> = <initialize>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <identifier>::= int main(<parameter-type-list>) {
int a = 3;
int b = <initializer>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <initializer>::= int main(<parameter-type-list>) {
int a = 3;
int b = <constant>;
<declaration-specifier><init-declarator>;
<statement>*}
-> <constant>::= int main(<parameter-type-list>) {
int a = 3;
int b = 3;
<declaration-specifier><init-declarator>;
<statement>*}
<declaration-specifier>::= int main(<parameter-type-list>) {
int a = 3;
int b = 2;
<type-specifier> <init-declarator>;
<statement>*}
-> < type-specifier >::= int main(<parameter-type-list>) {
int a = 3;
int b = 2;
int <init-declarator>;
<statement>*}
-> <init-declarator>::= int main(<parameter-type-list>) {
int a = 3;
int b = 2;
int <init-declarator>;
<statement>*}
-> <init-declarator>::= int main(<parameter-type-list>) {
int a = 3;
int b = 2;
int <declarator>;
<statement>*}
-> <identifer>::= int main(<parameter-type-list>) {
int a = 3;
int b = 2;
int c;
<statement>*}
Penurunan
<external-declaration>
Rules 1
<function-definition>
Rules 2
<declaration-specifier> <declarator> <compound-statement>
Rules 3
<type-specifier> <declarator> <compound-statement>
Rules 4
int <declarator> <compound-statement>
Rules 6
int <direct-declarator> <compound-statement>
Rules 13
int <direct-declarator> ( <parameter-type-list> ) <compound-
statement>
int <direct-declarator> ( <parameter-list> ) <compound-
statement>
int <direct-declarator> ( <parameter-declaration> ) <compound-
statement>
int <direct-declarator> ( <declaration-specifier> ) <compound-
statement>
5. Kesimpulan