Presentation is loading. Please wait.

Presentation is loading. Please wait.

Motivation for Language Specification

Similar presentations


Presentation on theme: "Motivation for Language Specification"— Presentation transcript:

1 Motivation for Language Specification
cs884 (Prasad) spec0intro

2 Languages Natural Languages Artificial Languages Logic Languages
(descriptive) Logic Languages Programming Languages (prescriptive) Aspects Syntax Semantics Pragmatics cs884 (Prasad) spec0intro

3 Motivation for Specifying Semantics of Programming Languages
The language of mathematics is precise, well-understood, and standard. In contrast, the PL notations are diverse and similar looking syntax have been given different meaning. So it is important to specify unambiguously what a system of notation stands for. cs884 (Prasad) spec0intro

4 Semantics seeks profound definitions rather than difficult theorems.
Software Design Use Divide and Conquer; Team effort. Language Design Unify and study interactions among language features. Individual effort common. Pascal, Modula-2, Oberon - Niklaus Wirth C - Dennis Ritchie C++ - Bjarne Stroustrup Java - James Gosling C# - Anders Hejlsberg cs884 (Prasad) spec0intro

5 Formal Proofs Proofs QED! Hand-waving x + x + … + x = x * x
d/dx ( x + x + … + x) = d/dx (x * x) x = * x = QED! x times cs884 (Prasad) spec0intro

6 (cont’d) Rigorous Informal 1 + 3 + … + (2i - 1) = i * i
Formal : Using Mathematical Induction 1 1 3 3 1 3 5 ... 5 5 5 5 cs884 (Prasad) spec0intro

7 (cont’d) Formal proofs are those formulated in the syntax of a particular logic using its axioms and rules of inference. E.g., Rigorous but informal proofs in Abstract Algebra can be converted into formal proofs in first-order logic. FORMAL Reduce to symbol manipulation. cs884 (Prasad) spec0intro

8 Problems with Informal Specifications
Some Historically Significant Examples of Ambiguity/Incompleteness cs884 (Prasad) spec0intro

9 Algol Example Algol-60 report is ambiguous since it does not specify a fixed-order of evaluation for sub-expressions, or rule out the possibility of side-effects in programs. If function f has side-effect on variable x then it is possible to have x + f(x) =/= x + f(x) f(x) + f(x) =/= 2 * f(x) f(x) / f(x) =/= 1 Loss of Referential Transparency cs884 (Prasad) spec0intro

10 Non-portability : gotcha.c
main() { int i = 5; printf(“%d %d %d \n”, i, i/++i, i); } Intuitively?? cs480(Prasad) L4javaGoals

11 Possible Outcomes SPARC : cc/gcc gotcha.c -ldl; a.out
Alpha, MIPS : cc/gcc gotcha.c; a.out SUN-3 : cc gotcha.c ; a.out Intuitively : cs480(Prasad) L4javaGoals

12 Pascal Example Type Equivalence Structural Equivalence: {A,B,C,D,E}
type T = array [1..10] of integer; var A,B : array [1..10] of integer; C: array [1..10] of integer; D: T ; E : T; Structural Equivalence: {A,B,C,D,E} Name Chain Equivalence: {A,B},{C},{D,E} Name Equivalence: {A},{B},{C},{D,E} cs884 (Prasad) spec0intro

13 Example Are the following statements equivalent?
while <cond> do <statement> vs 25: if <cond> then begin <statement>; goto 25 end; These statements are equivalent in Pascal, Ada, etc. but not in C/C++/Java. cs884 (Prasad) spec0intro

14 printf("\t i = %d \n", i--); }
#include <stdio.h> main() { int i, j, k1 = 2, k2 = 2; do { i = 2; while ( i > 0 ) { printf("\t i = %d \n", i--); } } while (k1--); printf("\n"); do { j = 2; TAG: if ( j > 0 ) { printf("\t j = %d \n", j--); goto TAG; } while (k2--); /* tcsh> gcc -ldl eq1.c tcsh> a.out i = 2 i = 1 j = 2 j = 1 */ cs884 (Prasad) spec0intro

15 printf("\t i = %d \n", i--); break; }
#include <stdio.h> main() { int i, j, k1 = 2, k2 = 2; do { i = 2; while ( i > 0 ) { printf("\t i = %d \n", i--); break; } } while (k1--); printf("\n"); do { j = 2; TAG: if ( j > 0 ) { printf("\t j = %d \n", j--); goto TAG; } while (k2--); /* tcsh> gcc -ldl eq1.c tcsh> a.out i = 2 j = 2 */ cs884 (Prasad) spec0intro

16 Approaches to Formal Semantics
Operational : How a program executes? Specifies abstract interpreter to carry-out the meaning of the programs. Denotational : What a program computes? Maps a program to a mathematical function from its inputs to its outputs. Axiomatic : For reasoning about programs Specifies properties of language constructs through pre-post conditions. Abstraction level: OS < DS < AS cs884 (Prasad) spec0intro

17 Interpreter vs Compiler
Interpreter evaluates the meaning of a program. Compiler transforms a program in one language into an equivalent program in another language. That is, it preserves meaning. Semantics of a language is independent of its machine implementation. cs884 (Prasad) spec0intro

18 Why is formal semantics not widely used?
It is relatively complex and not yet cost effective for everyday (and everybody’s) use. Semantics is general. In particular, it must consider all possible situations (including the boundary cases). However, most programmers want to know: What is the output for the particular inputs? cs884 (Prasad) spec0intro

19 Who needs semantics? Those who write (meta-)programs that must work for all programs. Designers of program transformation tools. compilers and interpreters. program analyzers. software engineering tools. critical software. cs884 (Prasad) spec0intro


Download ppt "Motivation for Language Specification"

Similar presentations


Ads by Google