Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. PROGRAM ::= main { INSTRSEQ }
  2. PROGRAM ::= VARSEQ main { INSTRSEQ }
  3. PROGRAM ::= PROCSEQ main { INSTRSEQ }
  4. PROGRAM ::= VARSEQ PROCSEQ main { INSTRSEQ }
  5.  
  6. First(PROGRAM) = {main, var, epsilon, sub}
  7. Follow(PROGRAM) = {eof}
  8.  
  9. VARSEQ ::= VARDECL ; VARSEQ | epsilon
  10.  
  11. First(VARSEQ) = {var, epsilon}
  12. Follow(VARSEQ) = {main, sub, epsilon}
  13.  
  14. VARDECL ::= var IDLIST : TYPEIDENT
  15.  
  16. First(VARDECL) = {var}
  17. Follow(VARDECL) = {;}
  18.  
  19. TYPEIDENT ::= integer | float | boolean | string | ATYPE
  20.  
  21. First(TYPEIDENT) = {integer, float, boolean, string, arrayof}
  22. Follow(TYPEIDENT) = {;}
  23.  
  24. ATYPE ::= arrayof TYPEIDENT
  25.  
  26. First(ATYPE) = {arrayof}
  27. Follow(ATYPE) = {;}
  28.  
  29. IDLIST ::= ident IDLIST2
  30.  
  31. First(IDLIST) = {ident}
  32. Follow(IDLIST) = {:}
  33.  
  34. IDLIST2 ::= , IDLIST | epsilon
  35.  
  36. First(IDLIST2) = {, , epsilon}
  37. Follow(IDLIST2) = {:}
  38.  
  39. PROCSEQ ::= PROCDECL | epsilon
  40.  
  41. First(PROCSEQ) = {sub, epsilon}
  42. Follow(PROCSEQ) = {main}
  43.  
  44. PROCDECL ::= sub ident ( FPARAMS ) : TYPEIDENT ; { VARSEQ INSTRSEQ }
  45. PROCDECL ::= sub ident ( FPARAMS ) : TYPEIDENT ; { INSTRSEQ }
  46. PROCDECL ::= sub ident ( FPARAMS ) ; { VARSEQ INSTRSEQ }
  47. PROCDECL ::= sub ident ( FPARAMS ) ; { INSTRSEQ }
  48. PROCDECL ::= sub ident : TYPEIDENT ; { VARSEQ INSTRSEQ }
  49. PROCDECL ::= sub ident : TYPEIDENT ; { INSTRSEQ }
  50. PROCDECL ::= sub ident ; { VARSEQ INSTRSEQ }
  51. PROCDECL ::= sub ident ; { INSTRSEQ }
  52.  
  53. First(PROCDECL) = {sub}
  54. Follow(PROCDECL) = {}
  55.  
  56. FPARAMS ::= ident : TYPEIDENT
  57. FPARAMS ::= ident : TYPEIDENT FPARAMS2
  58.  
  59. First(FPARAMS) = {ident}
  60. Follow(FPARAMS) = {)}
  61.  
  62. FPRARMS2 ::= , FPARAMS | epsilon
  63.  
  64. First(FPARAMS2) = {, , epsilon}
  65. Follow(FPARAMS2) = {)}
  66.  
  67. EXPR ::= SIMPEXPR EXPR2
  68. EXPR ::= + SIMPEXPR EXPR2
  69. EXPR ::= - SIMPEXPR EXPR2
  70.  
  71. First(EXPR) = {ident, lstring, lint, lbool, lreal, call, +, -}
  72. Follow(EXPR) = {alloc, )}
  73.  
  74. EXPR2 ::= RELOP SIMPEXPR EXPR2 | epsilon
  75.  
  76. First(EXPR2) = {==, <, >, !=, >=, <=}
  77. Follow(EXPR2) = {alloc, )}
  78.  
  79. SIMPEXPR ::= TERM SIMPEXPR2
  80.  
  81. First(SIMPEXPR) = {ident, lstring, lint, lbool, lreal, call)
  82. Follow(SIMPEXPR) = {==, <, >, !=, >=, <=, epsilon}
  83.  
  84. SIMPEXPR2 ::= ADDOP TERM SIMPEXPR2 | epsilon
  85.  
  86. First(SIMPEXPR2) = {+, -, or, epsilon)
  87. Follow(SIMPEXPR2) = {+, -, or, epsilon}
  88.  
  89. TERM ::= FACTOR TERM2
  90.  
  91. First(TERM) = {ident, lstring, lint, lbool, lreal, call}
  92. Follow(TERM) = {+, -, or, epsilon}
  93.  
  94. TERM2 ::= MULTOP FACTOR TERM2 | epsilon
  95.  
  96. First(TERM2) = {*, /, and}
  97. Follow(TERM2) = {+, -, or, epsilon}
  98.  
  99. FACTOR ::= ident ( lint ) | lstring | lint | lbool | lreal | SCALL
  100. FACTOR ::= ident ( ident ) | lstring | lint | lbool | lreal | SCALL
  101.  
  102. First(FACTOR) = {ident, lstring, lint, lbool, lreal, call}
  103. Follow(FACTOR) = {*, /, and, epsilon}
  104.  
  105. RELOP ::= == | < | > | != | >= | <=
  106.  
  107. First(RELOP) = {==, <, >, !=, >=, <=}
  108. Follow(RELOP) = {ident, lstring, lint, lbool, lreal, call}
  109.  
  110. ADDOP ::= + | - | or
  111.  
  112. First(ADDOP) = {+, -, or}
  113. Follow(ADDOP) = {ident, lstring, lint, lbool, lreal, call}
  114.  
  115. MULTOP ::= * | / | and
  116.  
  117. First(MULTOP) = {*, /, and}
  118. Follow(MULTOP) = {ident, lstring, lint, lbool, lreal, call}
  119.  
  120. INSTRSEQ ::= INSTR ; INSTRSEQ | epsilon
  121.  
  122. First(INSTRSEQ) = {ident, if, do, read, print, block, call, alloc
  123. Follow(INSTRSEQ) = {}}
  124.  
  125. INSTR ::= ASSIGN | COND | LOOP | IN | OUT | BLOCK | SCALL | ARRALLOC
  126.  
  127. First(INSTR) = {ident, if, do, read, print, block, call, alloc}
  128. Follow(INSTR) = {;}
  129.  
  130. ASSIGN ::= ident [ ( lint | ident ) ] = EXPR
  131.  
  132. First(ASSING) = {ident}
  133. Follow(ASSIGN) = {;}
  134.  
  135. OUT ::= print ( EXPR )
  136.  
  137. First(OUT) = {print}
  138. Follow(OUT) = {;}
  139.  
  140. IN ::= read ( IDENT )
  141.  
  142. First(IN) = {read}
  143. Follow(IN) = {;}
  144.  
  145. COND ::= if ( EXPR ) { INSTRSEQ }
  146.  
  147. First(COND) = {if}
  148. Follow(COND) = {;}
  149.  
  150. LOOP ::= do ( EXPR ) { INSTRSEQ }
  151.  
  152. First(LOOP) = {do}
  153. Follow(LOOP) = {;}
  154.  
  155. BLOCK ::= block { [ VARSEQ ] INSTRSEQ }
  156.  
  157. First(BLOCK) = {block}
  158. Follow(BLOCK) = {;}
  159.  
  160. SCALL ::= call ident( APARAMS )
  161. SCALL ::= call ident
  162.  
  163. First(SCALL) = {call}
  164. Follow(SCALL) = {;}
  165.  
  166. APARAMS ::= EXPR APARAMS2
  167.  
  168. First(APARAMS) = {ident, lstring, lint, lbool, lreal, call, +, -}
  169. Follow(APARAMS) = {)}
  170.  
  171. APARAMS2 ::= , APARAMS | epsilon
  172.  
  173. First(APARAMS2) = {, , epsilon}
  174. Follow(APARAMS2) = {)}
  175.  
  176. ARRALLOC ::= alloc ( IDENT , LINT )
  177.  
  178. First(ARRALLOC) = {alloc}
  179. Follow(ARRALLOC) = {;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement