Presentation is loading. Please wait.

Presentation is loading. Please wait.

The dangling-else ambiguity. Previously discussed The Java compiler (translator) consider white space characters (i.e., SPACE, TAB and New line) as insignificant.

Similar presentations


Presentation on theme: "The dangling-else ambiguity. Previously discussed The Java compiler (translator) consider white space characters (i.e., SPACE, TAB and New line) as insignificant."— Presentation transcript:

1 The dangling-else ambiguity

2 Previously discussed The Java compiler (translator) consider white space characters (i.e., SPACE, TAB and New line) as insignificant (See: http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/03 /intro-java.html) All that the Java compiler cares about is syntactical correctness

3 Ambiguous syntax A language allows ambiguous syntax is the same sentence can be read in more than one way

4 Ambiguous syntax (cont.) Example: English (in fact, all human languages) can mean: An American History professor a History professor who is an American citizen (i.e.: American History professor) a professor of American History. (i.e.: American History professor)

5 Ambiguous syntax (cont.) How humans deal with ambiguity: Humans can often use additional information to resolve the ambiguity (E.g., we have additional information about the specific professor) If we cannot resolve the ambiguity, we (humans) can ask further questions to resolve it.

6 Ambiguity in programming languages ? Difference between natural language and programming language: A natural language evolves through usage It's evolution is not controlled --------------------------------------------------------------- A programming language is designed by one or a group of humans It's design is completely controlled

7 Ambiguity in programming languages ? (cont.) Commonly held goal in the design of a programming language: A programming language should have an unambiguous syntax In other words: There is exactly one way to interpret each program statement syntactically

8 Ambiguity in programming languages ? (cont.) Historical facts about programming languages: Older programming languages does have ambiguous syntax These languages include: Algol 60 Pascal C

9 Ambiguity in programming languages ? (cont.) Modern programming languages are unambiguous Examples: Algol 68 Ada Modula

10 Ambiguity in programming languages ? (cont.) However: Because Java (and C++) are derived from the older programming language C (and C has an ambiguous syntax): (This is very unfortunate for a modern language like Java and C++, but the designers want to keep C's syntax extremely badly) Java has inherited the ambiguous syntax in C...

11 The dangling else ambiguity The dangling else ambiguity was first discovered in the programming language Algol 60 I will use a concrete example to illustrate this famous ambiguity

12 The dangling else ambiguity (cont.) Programming problem: shipping cost Country code for US = 1 Cost to ship to a package to a destination in the US = $5.00, except for Hawaii which cost $10.00 The state code for Hawaii = 50 The shipping cost for a destination outside the US is $20.00

13 The dangling else ambiguity (cont.) Write a Java program than reads in: and prints the shipping cost A country code (integer) A state code (integer)

14 The dangling else ambiguity (cont.) Algorithm:

15 The dangling else ambiguity (cont.) Note: There is no ambiguity in the algorithm given as a structure diagram The ambiguity will be introduced when we write the algorithm in the Java programming language !!! cost = 5.0; if ( country_code == 1 ) if ( state_code == 50 ) cost = 10.0; // Hawaii else cost = 20.0; // Outside US

16 The dangling else ambiguity (cont.) (The algorithm is unnecessarily confusing because I want to show the ambiguous syntax....)

17 The dangling else ambiguity (cont.) There are 2 different yet syntactically correct ways to read the if-statements:

18 The dangling else ambiguity (cont.) Explanation: The first way is to associate the keyword else with the first keyword if See the corresponding structure diagram The first if is an if-else-statement The second if is an if-statement that comprises the then-part of the (first) if-else-statement

19 The dangling else ambiguity (cont.) The second way is to associate the keyword else with the second keyword if See the corresponding structure diagram The first if is an if-statement The second if is an if-else-statement that comprises the then-part of the (first) if- statement

20 The dangling else ambiguity (cont.) (This is the only ambiguous syntax in the Java programming language which it had inherited from C)

21 The dangling else ambiguity (cont.) Resolving the dangling-else ambiguity: Java (and C, C++) imposes the following rule: The keyword else is associated to the nearest keyword if that makes a syntactically correct statement

22 The dangling else ambiguity (cont.) Example:

23 The dangling else ambiguity (cont.) Java program: import java.util.Scanner; public class DanglingElse01 { public static void main(String[] args) { int country_code, state_code; double cost; Scanner in = new Scanner(System.in); // Construct Scanner object System.out.print("Enter country code: "); country_code = in.nextInt(); // Read in integer System.out.print("Enter country code: "); state_code = in.nextInt(); // Read in integer

24 The dangling else ambiguity (cont.) cost = 5.0; if ( country_code == 1 ) if ( state_code == 50 ) cost = 10.0; // Hawaii else cost = 20.0; // Outside US System.out.println("Shipping cost = " + cost); }

25 The dangling else ambiguity (cont.) Sample execution: Enter country code: 1 (code for US) Enter country code: 40 (not Hawaii) Shipping cost = 20.0 (should be $5 !)

26 The dangling else ambiguity (cont.) The reason is that the Java program is executed as follows:

27 The dangling else ambiguity (cont.) Example Program: (Demo above code) –Prog file: http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/06/Progs/ DanglingElse01.java How to run the program: Right click on link and save in a scratch directory To compile: javac DanglingElse01.java To run: java DanglingElse01


Download ppt "The dangling-else ambiguity. Previously discussed The Java compiler (translator) consider white space characters (i.e., SPACE, TAB and New line) as insignificant."

Similar presentations


Ads by Google