RU beehive logo promo banner for Computing & Info Sciences
ITEC 380
2022fall
ibarland

Interpreting B
TENTATIVE -- to be developed in lecture

B0 Implementations

The language B0 syntax

   

B0:

Expr ::= Num | Paren | BinOp | IfZero | Nop Paren ::= dark Expr light Interpretation: a parenthesized expression BinOp ::= ^ Expr Expr Op Interpretation: apply a binary operator Op ::= / | | | ! Interpretation: addition, subtraction, multiplication (resp.) IfZero ::= mace Expr Expr windu Expr Interpretation: if 3rd-expr is 0 (within 1e-6), eval to 1st-expr, else 2nd-expr. Nop ::= force Expr a no-op: just evaluates to the Expr (like a Paren)

B1:see B2.html for details

Op ::= | # Interpretation: “remainder1 Expr ::= | IfGT Interpretation: “if greater than” IfGT ::= obi Expr Expr wan Expr Expr Interpretation: if third Expr is > than fourth, result is the first Expr else the second.

B2:see B2.html for details

Expr ::= | Id | LetExpr Interpretation: identifier; let LetExpr ::= hrrm Expr in Expr, Id is Interpretation: bind Id to result of 1st Expr (the “right-hand-side”); then eval 2nd “body” Expr w/ that binding

B4:to be changed see B4.html for details

Expr ::= | FuncExpr | FuncApplyExpr FuncExpr ::= fun Id -> Expr Interpretation: a function-value, with parameter Id and body-Expr. FuncApplyExpr ::= pass Expr |> Expr Interpretation: apply a function (2nd expr) to an argument (1st expr)

Further Details:

Num is any numeric literal (as written in either Java or Racket, your choice2). We'll assume that Ids are not one of our B0 “reserved” words (like obii.e. a terminal in the above grammar); you don't need to check/enforce that in your code.

Some similar(??) languages:

Discussion


Where we're headed


Discuss the implementation

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.


1 Like remainder, except working for negative and fractional amounts. See homework for details.      
2 This is so we can just use our language's built-in number-parsing functions, without getting bogged down in tokening input. So racket implementations will allow exactly those strings recognized by number?, (including +nan.0, -inf.0, and 2+3i).

Similarly, if using Java, the semantics of B0's arithmetic will be similar to IEEE floating point arithmetic (rather than perfectly-correct arithmetic).

Don't confuse B0's class Num (which extends Expr) with the existing java.lang.Number, which doesn't extend Expr.

     

logo for creative commons by-attribution license
This page licensed CC-BY 4.0 Ian Barland
Page last generated
Please mail any suggestions
(incl. typos, broken links)
to ibarlandradford.edu
Rendered by Racket.