cs7100 (Prasad)L2SpecIntro1 Motivation for Language Specification
cs7100 (Prasad)L2SpecIntro2 Languages Natural LanguagesArtificial Languages Logic LanguagesProgramming Languages (descriptive) (prescriptive) Aspects SyntaxSemanticsPragmatics
cs7100 (Prasad)L2SpecIntro3 Motivation for Specifying Natural Languages A lexicographer's business is solely to collect, arrange, and define the words that usage presents to his hands. He has no right to proscribe words; he is to present them as they are. -Noah Webster, lexicographer ( )
cs7100 (Prasad)L2SpecIntro4 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.
cs7100 (Prasad)L2SpecIntro5 Semantics seeks profound definitions rather than difficult theorems. Software Design – Use Divide and Conquer. Team effort common. 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 »Scheme – Guy Steele, Python – Guido von Rossum »Scala – Martin Oderksy, Clojure– Rich Hickey
cs7100 (Prasad)L2SpecIntro6 Problems with Informal Specifications Some Historically Significant Examples of Ambiguity/Incompleteness
cs7100 (Prasad)L2SpecIntro7 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
cs7100 (Prasad)L2SpecIntro8 Pascal Example Type Equivalence 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}
cs7100 (Prasad)L2SpecIntro9 Semantic Equivalence Example Are the following statement templates equivalent? while do vs 25: if then begin ; goto 25 end;
cs7100 (Prasad)L2SpecIntro10 #include 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--); }
cs7100 (Prasad)L2SpecIntro11 #include 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--); break ; goto TAG; } } while (k2--); }
Cause of ‘The 1990 AT&T Long Distance Network Collapse’ The defect was a C program that featured a break statement located within an if-then- else statement, that was nested within a switch statement. Instead of the control breaking out of the else clause, it also broke out of the surrounding switch. cs7100 (Prasad)L2SpecIntro12
cs7100 (Prasad)L2SpecIntro13 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
cs7100 (Prasad)L2SpecIntro14 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.
cs7100 (Prasad)L2SpecIntro15 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?
cs7100 (Prasad)L2SpecIntro16 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.
cs7100 (Prasad)L2SpecIntro17 Language Syntax(BNF) Semantics Pragmatics Data Control Abstract Data Types Denotational Axiomatic Operational (interpreter-based) Attribute Grammar Framework CS7100 Agenda