Cari Blog Ini

Rabu, 05 November 2014

Assignment #7 Konsep Bahasa Pemrograman Pak Tri Djoko Wahjono

Reyza Pratama Komala (1801428384) - LM01
Pada kesempatan kali ini saya akan menjawab soal-soal yang ada dalam buku "CONCEPTS OF Programming Languages (TENTH EDITION)" - ROBERT W. SEBESTA. Chapter 7 Expressions and
Assignment Statements

REVIEW QUESTION

11. What is an overloaded operator?

Answer : Use of an operator for more than one purpose is called operator overloading.

12. Define narrowing and widening conversions.

Answer : A narrowing conversion is one that converts an object to a type that cannot include all of the values of the original type e.g., float to int

A widening conversion is one in which an object is converted to a type that can include at least approximations to all of the values of the original type. e.g., int to float.

13. In JavaScript, what is the difference between == and ===?

Answer :  It is the same but === prevent its operands from being coerced.

14. What is a mixed-mode expression?

Answer : A mixed-mode expression is one that has operands of different types.

15. What is referential transparency?

Answer : A program has the property of referential transparency if any two expressions in the program that have the same value can be substituted for one another anywhere in the program, without affecting the action of the program.

PROBLEM SET

11. Write a BNF description of the precedence and associativity rules
defined for the expressions in Problem 9. Assume the only operands are
the names a,b,c,d, and e.

Answer : Precedence: Highest *, /, not

+, -, &, mod

- (unary)

=, /=, <, <=, >=, >

and

Lowest or, xor

Associativity: Left to right

<expression> → <expression> or <or_exp>

| < expression > xor <or_exp>

| <or_exp>

<or_exp> → <or_exp> and <and_exp>

| <and_exp>

< and_exp > → <and_exp> = <expr>

| <and_exp /= <expr>

| <and_exp> < <expr>

| <and_exp> <= <expr>

| <and_exp> >= <expr>

| <and_exp> > <expr>

| <expr>

<expr> → – <unary_expr>

| <unary_expr>

<unary_expr> → <unary_expr> + <term>

| <unary_expr> – <term>

| <unary_expr> & <term>

| <unary_expr> mod < term>

| <term>

< term > → < term > * < factor >

| < term > / < factor >

| not < factor >

| < factor >

< factor > → ( < expr > )

| <operand>

<operand> → a | b | c | d | e

12. Using the grammar of Problem 11, draw parse trees for the expressions
of Problem 9.

Answer : 

13. Let the function fun be defined as
int fun(int *k) {
*k += 4;
return 3 * (*k) - 1;
}
Suppose fun is used in a program as follows:
void main() {
int i = 10, j = 10, sum1, sum2;
sum1 = (i / 2) + fun(&i);
sum2 = fun(&j) + (j / 2);
}
What are the values of sum1 and sum2
a. if the operands in the expressions are evaluated left to right?
b. if the operands in the expressions are evaluated right to left?

Answer : 
a. sum1 = (10/2) + (3 * 10 - 1) = 5 + 29 = 34
 sum2 = (3 * 14 - 1) + (14/2) = 41 + 7 = 49


b. sum1 = (14/2) + (3 * 14 - 1) = 7 + 41 = 49
sum2 = (3 * 10 - 1) + (10/2) = 29 + 5 = 34

14. What is your primary argument against (or for) the operator precedence
rules of APL?

Answer : The operator precedence rules of the common imperative languages are nearly all the same, because they are based on those of mathematics.

15. Explain why it is difficult to eliminate functional side effects in C.

Answer : One reason functional side effects would be difficult to remove from C is that all of C’s subprograms are functions, providing the ability of returning only a single data value (though it could be an array). The problem is that in many cases it is necessary (or at least convenient) to return more than one data value, which is done through the use of pointer actual parameters, which are a means of creating functional side effects

Assignment #6 Konsep Bahasa Pemrograman Pak Tri Djoko Wahjono

Reyza Pratama Komala (1801428384) - LM01
Pada kesempatan kali ini saya akan menjawab soal-soal yang ada dalam buku "CONCEPTS OF Programming Languages (TENTH EDITION)" - ROBERT W. SEBESTA. Chapter  6 Data Types

REVIEW QUESTION

11. How does JavaScript support sparse arrays?

Answer :  Javascript objects are sparse, and arrays are just specialized objects with an auto-maintained length property (which is actually one larger than the largest index, not the number of defined elements) and some additional methods.

12. What languages support negative subscripts?

Answer : Ruby and Lua support negative subscripts.
13. What languages support array slices with stepsizes?

Answer : Ruby, Python, Perl.
14. What array initialization feature is available in Ada that is not available in
other common imperative languages?

Answer : Ada provides two mechanisms for initializing arrays in the declarations statements: by listing them in the order in which they are to be stored, or by directly assigning them to an index position using the => operator, which in Ada is called an arrow.

15. What is an aggregate constant?

Answer : A parenthesized lists of values.

PROBLEM SET

11. In the Burroughs Extended ALGOL language, matrices are stored as a
single-dimensioned array of pointers to the rows of the matrix, which are
treated as single-dimensioned arrays of values. What are the advantages
and disadvantages of such a scheme?

Answer : The advantage of this scheme is that accesses that are done in order of the rows can be made very fast; once the pointer to a row is gotten, all of the elements of the row can be fetched very quickly. If, however, the elements of a matrix must be accessed in column order, these accesses will be much slower; every access requires the fetch of a row pointer and an address computation from there. Note that this access technique was devised to allow multidimensional array rows to be segments in a virtual storage management technique. Using this method, multidimensional arrays could be stored and manipulated that are much larger than the physical memory of the computer.


12. Analyze and write a comparison of C’s malloc and free functions with
C++’s new and delete operators. Use safety as the primary consideration
in the comparison.

Answer : New and delete are type safe (no need for casts), malloc and free are not. Also malloc returns a void* which then has to be cast to the appropriate pointer type. new returns the correct pointer type itself; type safety. malloc requires you to tell the number of bytes to allocate, new figures it out itself.

13. Analyze and write a comparison of using C++ pointers and Java reference
variables to refer to fixed heap-dynamic variables. Use safety and convenience
as the primary considerations in the comparison.

Answer : Java fixed the problem by disallowing to mess around with pointers completely. This will make writing code much more clear and remove the security problem of the pointers.

14. Write a short discussion of what was lost and what was gained in Java’s
designers’ decision to not include the pointers of C++.

Answer : There's a copious amount of documentation out there on this subject so there's no reason to write at length. I should also point out that pointers are a feature of both C and C++.

It's obvious that preventing the use of pointers significantly bolstered the amount of security that programmers could get 'for free' given that issues like stack overruns, memory corruption and inadequate/incorrect freeing of memory (though this is more an attribute of GC than lack of pointers) were largely nullified.

Given that programmers tend to be kind of ornery and resistant to change, preventing a means for direct memory access and easy manipulation of the data within rubbed a lot of programmers the wrong way. Many pointed out that the use of pointers was one of the ways that C/C++ were able to be such a high-level language while still maintaining considerable speed. While assembly language and machine code were still de rigeur amongst people that were looking to squeeze the most amount of speed and memory out of a given program, things like pointers and compilers that effectively optimized C and C++ code did a lot to win people over, not to mention that it's a hell of a lot easier to read.

With Java, however, a lot of those same programmers felt that the security that was gained was offset by the decreases in speed and the fact that a lot of the earlier JIT compilers were pretty pokey didn't help that. For all their faults, Sun's been pretty adamant about listening to the community so they've made a lot of improvements regarding in-place optimization, HotSpot, conditional compilation, etc.

Another problem that came about is the fact that removing pointers made existing C and C++ code hard to port. That's generally pretty true of any new or significantly changed language, however. Eventually people got a handle on how to best replicate pointer usage, tips and tricks got passed around and things improved

15. What are the arguments for and against Java’s implicit heap storage
recovery, when compared with the explicit heap storage recovery
required in C++? Consider real-time systems.

Answer : Single-size Allocation Heap: In a single-size allocation heap, all available cells are linked together using the pointers in the cells, forming a list of available space. Allocation is a simple matter of taking the required number of cells from this list when they are needed. Deallocation is a much more complex process. A heap-dynamic variable can be pointed to by more than one pointer, making it difficult to determine when the variable is no longer useful to the program. Simply because one pointer is disconnected from a cell obviously does not make it garbage; there could be several other pointers still pointing to the cell.

Variable-size Allocation Heap: The initial setting of the indicators of all cells in the heap to indicate that they are garbage is difficult. Because the cells are different sizes, scanning them is a problem. One solution is to require each cell to have the cell size as its first field. Then the scanning can be done, although it takes slightly more space and somewhat more time than its counterpart for fixed-size cells. The marking process is nontrivial. How can a chain be followed from a pointer if there is no predefined location for the pointer in the pointed-to cell? Cells that do not contain pointers at all are also a problem. Adding an internal pointer to each cell, which is maintained in the background by the run-time system, will work. However, this background maintenance processing adds both space and execution time overhead to the cost of running the program. Maintaining the list of available space is another source of overhead. The list can begin with a single cell consisting of all available space. Requests for segments simply reduce the size of this block. Reclaimed cells are added to the list. The problem is that before long, the list becomes a long list of various-size segments, or blocks. This slows allocation because requests cause the list to be searched for sufficiently large blocks. Eventually, the list may consist of a large number of very small blocks, which are not large enough for most requests. At this point, adjacent blocks may need to be collapsed into larger blocks. Alternatives to using the first sufficiently large block on the list can shorten the search but require the list to be ordered by block size. In either case, maintaining the list is additional overhead.

Kamis, 30 Oktober 2014

Assignment #5 Konsep Bahasa Pemrograman Pak Tri Djoko Wahjono

Reyza Pratama Komala (1801428384) - LM01
Pada kesempatan kali ini saya akan menjawab soal-soal yang ada dalam buku "CONCEPTS OF Programming Languages (TENTH EDITION)" - ROBERT W. SEBESTA. Chapter 5 Names, Bindings, and Scopes

REVIEW QUESTION

11. Question : What are the advantages and disadvantages of dynamic type binding ?

Answer : 
Advantages = It is more easy to write generic code.
Disadvantages = High Cost to check type and interpretation

12. Question : Define static, stack-dynamic, explicit heap-dynamic, and implicit heapdynamic
variables. What are their advantages and disadvantages ?

Answer : 
- Static -- memory alloc'd before execution. Stays throughout.
Adv: runtime efficient, history-sensitive subprograms. Disadv: no recursion.

- Stack dynamic - memory alloc'd from system stack when decl elaborated.
Adv: recursion, conserves memory. Disadv: no history sensitive subpgms, less run-time efficient than static.
- Explicit heap-dynamic -- memory alloc'd/freed by pgmer from "heap".
Adv: flexible storage mgmt. Disadv: less effiicent than stack-dyn; Error prone in pairing new/delete stmts.
- Implicit heap-dynamic -- heap memory alloc'd/freed by assignments.
Adv: highext flexibility. Disadv: run-time cost to maintain all the dynamic attrs; Reduced compiler error detection.

13. Question: Define lifetime, scope, static scope, and dynamic scope.

Answer : 
Lifetime -- when memory is alloc'd for a variable (when in existence).
Scope -- portions of pgm variable can be referenced or set.
Static scope -- scope based on source pgm text (static ancestors).
Dynamic scope -- scope based on run-time call sequence.

14. Question : How is a reference to a nonlocal variable in a static-scoped program connected
to its definition ?

Answer : 
A reference to a non-locally variable in a static-scoped language with nested subprograms requires a two step access process:

1. Find the correct activation record instance

2. Determine the correct offset within that activation record instance

15. Question : What is the general problem with static scoping ?

Answer : 
Usually too much access. Scope structure destroyed as pgm evolves.

Problem Set

1. Question : Which of the following identifier forms is most readable? Support your
decision.
SumOfSales
sum_of_sales
SUMOFSALES

Answer : Sum_of_sales is the most readable. It is because it’s doesn’t have any problem with case sensitive, because the following identifier doesn’t use any caps lock.

2. Question : Some programming languages are typeless. What are the obvious advantages
and disadvantages of having no types in a language?

Answer : 
Advantages:
- The only advantage is that is allows coders to write sloppy programs quickly.

Disadvantages:
- You are not in control of the data and variables, the compiler or interpreter is.
- If you mis-assign variables, there is no way for the compiler to catch any of your mistakes. It just “does what you said”, even if it is wrong.
- Supporting programs in a type-less language is much more difficult that in a strongly types one. It is often very difficult to determine what the original programmer wanted to do.

3. Question : Write a simple assignment statement with one arithmetic operator in some
language you know. For each component of the statement, list the various
bindings that are required to determine the semantics when the statement is
executed. For each binding, indicate the binding time used for the language.

Answer : 
(C++)
int count;count = count + 5;
Possible types for count: set at language design time. Type of count: bound at compile time.
Set of possible values of count: bound at compiler design time. Value of count: bound at execution time with this statement. Set of possible meanings for the operator symbol ““:*bound at language definition time.*Meaning of the operator symbol “” in this statement: bound at compile time.
Internal representation of the literal “5”: bound at compiler design time.

4. Question : Dynamic type binding is closely related to implicit heap-dynamic variables.
Explain this relationship.

Answer : Implicit heap-dynamic variables acquire types only when assigned value, which must be at runtime. Therefore, this variable are always dynamically bound to types.

5. Question : Describe a situation when a history-sensitive variable in a subprogram is
useful.

Answer : To describe a situation when a history-sensitive variable in a subprogram is useful, suppose that a FORTRAN subroutine is used to implement a data structure as an abstraction. In this situation, it is essential that the structure persists between different calls to the managing subroutine.

Minggu, 26 Oktober 2014

Assignment #4 Konsep Bahasa Pemrograman Pak Tri Djoko Wahjono

Reyza Pratama Komala (1801428384) - LM01
Pada kesempatan kali ini saya akan menjawab soal-soal yang ada dalam buku "CONCEPTS OF Programming Languages (TENTH EDITION)" - ROBERT W. SEBESTA. Chapter 4 Lexical and Syntax Analysis

REVIEW QUESTION

11. Question : Describe the parsing problem for a bottom-up parser.

Answer :bottom up parser only can identifies and processes the text's lowest-level details before processes middle level structures and leaving the highest level overall structure to last


12. Question : Explain why compilers use parsing algorithms that work on only a subset of all grammars.
Answer :because compiler can use one parsing compiler that work on only subset of all grammars


13. Question : Why are named constants used, rather than numbers, for token codes ?
Answer :
- for the sake of readability of lexical and syntax analyzers.


14. Question : Describe how a recursive-descent parsing subprogram is written for a rule with a single RHS.
Answer :
-A recursive-descent subprogram for a rule with a single RHS is relatively
simple. For each terminal symbol in the RHS, that terminal symbol is compared
with nextToken. If they do not match, it is a syntax error. If they match,
the lexical analyzer is called to get the next input token. For each non terminal,
the parsing subprogram for that nonterminal is called.


15. Question : Explain the two grammar characteristics that prohibit them from being used as the basis for a top-down parser.
Answer : Two grammar characteristics that prohibit top-down parsing:
Direct or indirect Left Recursion.

Rabu, 15 Oktober 2014

Assignment #3 Konsep Bahasa Pemrograman Pak Tri Djoko Wahjono

Reyza Pratama Komala (1801428384) - LM01
Pada kesempatan kali ini saya akan menjawab soal-soal yang ada dalam buku "CONCEPTS OF Programming Languages (TENTH EDITION)" - ROBERT W. SEBESTA. Chapter 3 Describing Syntax and Semantics
Review Question

11. Question :  How is the order of evaluation of attributes determined for the trees of a
given attribute grammar ?

Answer : Semantik statis bahasa hanya secara tidak langsung terkait dengan makna program selama eksekusi; melainkan harus dilakukan dengan bentuk hukum dari program
(sintaks bukan semantik). Banyak aturan semantik statis bahasa menyatakan kendala jenisnya. Semantik statis dinamakan demikian karena analisis yang dibutuhkan untuk
memeriksa spesifikasi ini dapat dilakukan pada waktu kompilasi.
Semantik dinamis adalah makna ekspresi, pernyataan, dan unit program bahasa pemrograman.

12. Question :  What is the primary use of attribute grammars ?

Answer : Atribut tata bahasa utama yang digunakan untuk memberikan deskripsi lengkap sintaks dan semantik statis bahasa pemrograman.

13. Question :  Explain the primary uses of a methodology and notation for describing
the semantics of programming languages ?

Answer : Jika pemutusan lingkaran dapat ditampilkan, deskripsi aksiomatik loop disebut total kebenaran. Jika kondisi lain dapat dipenuhi tetapi terminasi tidak
dijamin, hal itu disebut correctnes parsial.

14. Question : Why can machine languages not be used to define statements in operational
semantics ?

Answer : Bahasa mesin tidak dapat digunakan untuk mendefinisikan pernyataan dalam semantik operasional karena beberapa masalah. Pertama, langkah-langkah individu dalam pelaksanaan mesin
bahasa dan perubahan yang dihasilkan pada keadaan mesin terlalu kecil dan terlalu banyak. Kedua, penyimpanan komputer yang nyata terlalu besar dan kompleks.

15. Question : Describe the two levels of uses of operational semantics ?

Answer : Pada tingkat tertinggi, yang menarik adalah di hasil akhir dari pelaksanaan program yang lengkap. Hal ini kadang-kadang disebut semantik operasional alami.
Pada tingkat terendah, semantik operasional dapat digunakan untuk menentukan makna yang tepat dari sebuah program melalui pemeriksaan urutan lengkap negara
perubahan yang terjadi ketika program dijalankan. Penggunaan ini kadang-kadang disebut semantik operasional struktural.

Problem Solve

11. Consider the following grammar:
<S> → <A> a <B> b
<A> → <A> b | b
<B> → a <B> | a
Question : Which of the following sentences are in the language generated by this
grammar ?
a. baab
b. bbbab
c. bbaaaaa
d. bbaab

Answer : 
<S> → <A> <B> <C>
<A> → a <A> | a
<B> → b <B> | b
<C> → c <C> | c

12. Consider the following grammar:
<S> → a <S> c <B> | <A> | b
<A> → c <A> | c
<B> → d | <A>
Question : Which of the following sentences are in the language generated by this
grammar?
a. abcd
b. acccbd
c. acccbcc
d. acd
e. accc

Answer : LHS non-terminal S didefinisikan sebagai non-terminal A, terminal, non-terminal B dan terminal b, di mana non-terminal A dapat nol atau lebih b atau satu b, dan di mana non-terminal B dapat menjadi salah satu atau lebih adalah satu atau a;

Menghasilkan satu atau lebih b atau satu b, satu, satu atau lebih atau satu, dan satu b.

13. Question :  
Write a grammar for the language consisting of strings that have n copies of the letter a followed by the same number of copies of the letter b, where n > 0. For example, the strings ab, aaaabbbb, and aaaaaaaabbbbbbbb are in the language but a, abb, ba, and aaabb are not ?

Answer :
<S> -> <A>
<A> -> a <A> b <B>

14. Question : Draw parse trees for the sentences aabb and aaaabbbb, as derived from
the grammar of Problem 13 ?

Answer :
<stmt> -> <A>
<A> -> A <A> b | ab
pohon untuk aabb
pohon untuk aaaabbbb

15. Question : Convert the BNF of Example 3.1 to EBNF ?

Answer :
<program> -> begin <stmt_list> end

<stmt_list> -> <stmt>

| <stmt> ; <stmt_list>

<stmt> -> <var> = <expression>

<var> -> A | B | C

<expression> -> <var> {(+|-) <var>}