mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
* Added mgiannini/sublime-factor as a submodule Provided better color for Fantom Added license for sublime-fantom Specified tm_scope for Fantom * Redirected submodule for Fantom to fork with updated grammar * Triggering build * Updating sublime-fantom submodule * Updated submodule sublime-fantom * Adding Fantom samples
51 lines
693 B
Plaintext
51 lines
693 B
Plaintext
/*
|
|
* Author: Robert Koeninger
|
|
* License: WTFPL (http://www.wtfpl.net/)
|
|
*/
|
|
|
|
mixin Expr
|
|
{
|
|
abstract Obj? eval()
|
|
}
|
|
|
|
class Constant : Expr
|
|
{
|
|
Obj? value
|
|
|
|
new make(Obj? value) { this.value = value }
|
|
override Obj? eval() { value }
|
|
}
|
|
|
|
enum class Op
|
|
{
|
|
plus,
|
|
minus
|
|
}
|
|
|
|
class Infix : Expr
|
|
{
|
|
Op op
|
|
Expr left
|
|
Expr right
|
|
|
|
new make(Op op, Expr left, Expr right)
|
|
{
|
|
this.op = op
|
|
this.left = left
|
|
this.right = right
|
|
}
|
|
|
|
override Obj? eval()
|
|
{
|
|
switch (op)
|
|
{
|
|
case Op.plus:
|
|
return (Int)left.eval() + (Int)right.eval()
|
|
case Op.minus:
|
|
return (Int)left.eval() - (Int)right.eval()
|
|
default:
|
|
throw Err("undefined Op")
|
|
}
|
|
}
|
|
}
|