Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS 321 Programming Languages and Compilers VI-a. Recursive Descent Parsing.

Similar presentations


Presentation on theme: "CS 321 Programming Languages and Compilers VI-a. Recursive Descent Parsing."— Presentation transcript:

1 CS 321 Programming Languages and Compilers VI-a. Recursive Descent Parsing

2 Parsing 2 Assignment Statement Grammar Consider the grammar Assignment  Variable = Expression Expression  Expression + Term | Expression – Term | Term | - Term Term  Term * Factor | Term / Factor | Factor Factor  ( Expression ) | Variable

3 Parsing 3 After Elimination of Left Recursion Assignment  Variable = Expression Expression  Term Expression0 | - Term Expression0 Expression0  + Term Expression0 | – Term Expression0 |  Term  Factor Term0 Term0  * Factor Term0 | / Factor Term0 |  Factor  ( Expression ) | Variable

4 Parsing 4 Beginning of Java Program import java.io.*; public class Translate2 { static int token = 0; static int temp = 0; static final int LEFTPAR=40; static final int RIGHTPAR=41; static final int STAR=42; static final int PLUS=43; static final int MINUS=45; static final int SLASH=47; static final int EQUAL=61; static StreamTokenizer tokens; public static void main(String argv[]) throws IOException { FileInputStream stream = new FileInputStream("input.data"); InputStreamReader reader = new InputStreamReader(stream); tokens = new StreamTokenizer(reader); tokens.ordinaryChar( '/'); tokens.ordinaryChar( '-'); token=tokens.nextToken(); Assignment(); stream.close(); } static public void Error () { System.out.println("*** Syntax Error ***"); System.exit(0); }

5 Parsing 5 Assignment( ) static public void Assignment() throws IOException { System.out.println("Assignment -> Variable = Expression"); Variable(); if (token == EQUAL) token=tokens.nextToken(); else Error(); Expression(); }

6 Parsing 6 Expression ( ) & Expression0 ( ) static public void Expression() throws IOException { if (token == MINUS) { System.out.println(" Expression -> - Term Expression0"); token=tokens.nextToken(); Term(); } else { System.out.println(" Expression -> Term Expression0"); Term(); } Expression0 (); } static public void Expression0() throws IOException { if (token == PLUS ) { System.out.println("Expression0 -> + Term Expression0 "); token=tokens.nextToken(); Term(); Expression0(); } else if (token == MINUS) { System.out.println("Expression0 -> - Term Expression0"); token=tokens.nextToken(); Term(); Expression0(); } else System.out.println("Expression0 -> epsilon"); }

7 Parsing 7 Term ( ) & Term0 ( ) static public void Term() throws IOException { System.out.println("Term -> Factor Term0"); Factor(); Term0(); } static public void Term0() throws IOException { if (token == STAR) { System.out.println("Term0 -> * Factor Term0 "); token=tokens.nextToken(); Factor(); Term0(); } else if (token == SLASH) { System.out.println("Term0 -> / Factor Term0 "); token=tokens.nextToken(); Factor(); Term0(); } else System.out.println("Term0 -> epsilon"); }

8 Parsing 8 Factor ( ) static public void Factor() throws IOException { if (token == tokens.TT_NUMBER) { System.out.println("Factor -> Constant"); token=tokens.nextToken(); } else if (token == LEFTPAR) { System.out.println("Factor -> ( Expression )"); token=tokens.nextToken(); Expression(); if (token == RIGHTPAR) token=tokens.nextToken(); else Error(); } else { System.out.println("Factor -> Variable"); Variable(); }

9 Parsing 9 static public void Variable () throws IOException { if (token == tokens.TT_WORD) { token=tokens.nextToken(); } else Error(); }


Download ppt "CS 321 Programming Languages and Compilers VI-a. Recursive Descent Parsing."

Similar presentations


Ads by Google