Paper on Grammars
PROJECT ON GRAMMARS
|
Course: |
IST 230/CMPSC 360 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Deadline: |
see the calendar in Canvas for the deadline |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Objective: |
To acquire a comprehensive understanding of the application of grammars and formal language theory to computing languages. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Given: |
Consider the following set of productions:
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Instructions: |
1. (30 points) Rewrite the set of productions above in Extended Backus-Naur Form (EBNF).
2. (35 points) Using a Push Down Automaton (PDA), determine if the following function is valid code according to the given set of productions.
3. (35 points) Validate your answer in (2) by illustrating it with a derivation tree
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Deliverable: |
Submit a paper Times New Roman font, 12 pt., double-space lines). The project must contain an introduction which includes the purpose of the project. |
1)
BNF:
1. <FN> ::= <FN-HEAD> <FN-BODY>
2. <FN-HEAD> ::= <TYPE> ( <PARAM-LIST)> )
3. <TYPE> ::= “char” | “int” | “real”
4. <PARAM-LIST> ::= <PARAM-LIST> , <TYPE> | <TYPE>
5. <FN-BODY> ::={ <VAR-DECL> <STMT> return ( <EXPRESN> ) ; }
6. <VAR-DECL> ::= “” | <TYPE> <ID-LIST> | <VAR-DECL> <TYPE> < ID-LIST>
7. <ID-LIST> ::= <id> | <ID-LIST> | <id>
8. <STMT> ::= “” | <SIMPLE-STMT> | <SELECT-STMT> | <REPEAT-STMT> | SEQUENCE - STMT
9. <SIMPLE-STMT> ::= <ASSIGN-STMT> | <FN-CALL-STMT>
10. <ASSIGN-STMT> ::= “var” = <EXPRESN ;>
11. <EXPRESN> ::= <ARITH-EXP> | <BOOL-EXP>
12. <ARITH-EXP> ::== <TERM> | <ARITH-EXP> | <ADD OP> | <TERM>
13. <ADD-OP> ::= “+” | “-”
14. <TERM> ::= <FAC> | <TERM> <MUL-OP> <FAC>
15. <MUL-OP> ::= “*” | “/”
16. <FAC> ::= ( <ARITH-EXP> ) | <OPD>
17. <OPD> ::= “var” | “const”
18. <BOOL-EXP> ::== <RELN-EXP> | <LOGIC-EXP>
19. <RELN-EXP> ::= <OPD> <RELN-OPR> <OPD>
20. <RELN-OPR> ::= “==” | “!=” | “<” | “<=” | “>” | “>=”
21. <LOGIC-EXP> ::= <OPD> | <LOGIC-OPR> | <OPD> | <LOGIC-OPR> | <OPD>
22. <LOGIC-OPR> ::= “and” | “or” | “not”
23. <FN-CALL-STMT> ::= “id” ( <ARG-LIST> ) ;
24. <ARG-LIST> ::= “” | “id” | <ARG-LIST> “id”
25. <SELECTION-STMT> ::= if <CONDITION> <STMT> else <STMT>
26. <CONDITION> ::= <(BOOL-EXP)>
27. <REPEAT-STMT> ::= <DO-STMT> | <WHILE-STMT>
28. <DO-STMT> ::= do { <STMT> } while <CONDITION>;
29. <WHILE-STMT> ::= while <CONDITION> do { <STMT> }
30. <SEQUENCE-STMT> ::= <STMT> <STMT>
EBNF:
1. <FN> ::= <FN-HEAD> <FN-BODY>
2. <FN-HEAD> ::= <TYPE> ( <PARAM-LIST)>* )
3. <TYPE> ::= “char” | “int” | “real”
4. <PARAM-LIST> ::= <PARAM-LIST> , <TYPE>+ | <TYPE>+
5. <FN-BODY> ::= { <VAR-DECL>* <STMT> return ( <EXPRESN> ) ; }
6. <VAR-DECL> ::= “” | <TYPE> <ID-LIST>* | <VAR-DECL>* <TYPE> < ID-LIST>*
7. <ID-LIST> ::= “id” | <ID-LIST>* , “id”
8. <STMT> ::= “” | <SIMPLE-STMT> | <SELECT-STMT> | <REPEAT-STMT> | <SEQUENCE - STMT>
9. <SIMPLE-STMT> ::= <ASSIGN-STMT> | <FN-CALL-STMT>
10. <ASSIGN-STMT> ::= “var” = <EXPRESN> ;
11. <EXPRESN> ::= <ARITH-EXP*> | <BOOL-EXP>
12. <ARITH-EXP> ::== <TERM>* | <ARITH-EXP>* <ADD OP> <TERM>*
13. <ADD-OP> ::= “+” | “-”
14. <TERM> ::= <FAC> | <TERM>* <MUL-OP> <FAC>
15. <MUL-OP> ::= “*” | “/”
16. <FAC> ::= ( <ARITH-EXP>* ) | <OPD>
17. <OPD> ::= “var” | “const”
18. <BOOL-EXP> ::== <RELN-EXP> | <LOGIC-EXP>
19. <RELN-EXP> ::= <OPD> <RELN-OPR> <OPD>
20. <RELN-OPR> ::= “==” | “!=” | “<” | “<=” | “>” | “>=”
21. <LOGIC-EXP> ::= <OPD> <LOGIC-OPR> <OPD> | <LOGIC-OPR> <OPD>
22. <LOGIC-OPR> ::= “and” | “or” | “not”
23. <FN-CALL-STMT> ::= “id” ( <ARG-LIST>* ) ;
24. <ARG-LIST> ::= “” | “id” | <ARG-LIST>* “id”
25. <SELECTION-STMT> ::= if <CONDITION> <STMT> else <STMT>
26. <CONDITION> ::= <(BOOL-EXP)>
27. <REPEAT-STMT> ::= <DO-STMT> | <WHILE-STMT>
28. <DO-STMT> ::= do { <STMT> } while <CONDITION>;
29. <WHILE-STMT> ::= while <CONDITION> do { <STMT> }
30. <SEQUENCE-STMT> ::= <STMT> <STMT>