![]() |
![]() |
|
where Num is any numeric literal (as written in either Java or Racket, your choice2). For the provided parsers to work, whitespace is required between all terminals with the exception of punctuation.Expr ::= Num | Paren | BinOp | IfZero Paren ::= {= Expr =} Interpretation: a parenthesized expression BinOp ::= > Op Expr Expr < Interpretation: apply a binary operator Op ::= blam | swish | splat Interpretation: addition, subtraction, multiplication (resp.) IfZero ::= bliff Expr zok Expr nooo Expr Interpretation: if 1st-expr is 0, eval to 2nd-expr, else 3rd-expr. Mnemonic:Y0:
branch iff … zero,ok? … else if nooot: …Op ::= … | pow | oof Interpretation: “exponentiation”, “remainder1” Expr ::= … | IfGT Interpretation: “if greater than” IfGT ::= glurp Expr Expr zok Expr nooo Expr Mnemonic:Y1:see Y2.html for details
greater/lesser(p) Expr ::= … | Id | LetExpr Interpretation: identifier; let LetExpr ::= zlott Id biff Expr @ Expr Mnemonic: (z)let Id be(ff) … in(at) …Y2:see Y2.html for details
Expr ::= … | FuncExpr | FuncApplyExpr FuncExpr ::= thonk Id => Expr Interpretation: a function-value, with parameter Id and body-Expr. FuncApplyExpr ::= krunch Expr <= Expr Interpretation: apply a function (1st expr) to an argument (2nd expr)Y4:see Y4.html for details
Semantics (interpretation):
Note: Download the racket files, and then choose Open… from DrRacket. Do not copy/paste into an empty DrRacket window, since that window is probably using a student-language, and some of the files below use full racket.
Once we've talked in class about internal-representation (and given examples of the W programs and corresponding internal-data), then we can discuss the provided-implementation, including recursive-descent parsing:
2018 version: The videos below are based on 2018fall's language, T0. So details of the syntax are different than this semester, and some statements might have different semantics, but overall the content is extremely similar to this semester's language.
Note: Parsing Y0 is particularly easy because each expression-type's leading-token lets us know exactly what to expect, removing the need for look-ahead, backtracking, or cleverer algorithms.
Similarly, if using Java, the semantics of Y0's arithmetic will be similar to IEEE floating point arithmetic (rather than perfectly-correct arithmetic).
Don't confuse Y0's class Num (which extends Expr) with the existing java.lang.Number, which doesn't extend Expr.
↩This page licensed CC-BY 4.0 Ian Barland Page last generated | Please mail any suggestions (incl. typos, broken links) to ibarland ![]() |