50 lines
1.2 KiB
Text
50 lines
1.2 KiB
Text
|
/**
|
||
|
* An example of Flix for syntax highlighting.
|
||
|
*/
|
||
|
|
||
|
// Here is a namespace.
|
||
|
namespace a.b.c {
|
||
|
|
||
|
// Here are some literals.
|
||
|
def b: Bool = true
|
||
|
def c: Char = 'a'
|
||
|
def f: Float = 1.23
|
||
|
def i: Int = 42
|
||
|
def s: Str = "string"
|
||
|
|
||
|
// Here are some relations.
|
||
|
rel LitStm(r: Str, c: Int)
|
||
|
rel AddStm(r: Str, x: Str, y: Str)
|
||
|
rel DivStm(r: Str, x: Str, y: Str)
|
||
|
|
||
|
// Here is a lattice.
|
||
|
lat LocalVar(k: Str, v: Constant)
|
||
|
|
||
|
// Here is an index.
|
||
|
index LitStm{{r}, {r, c}}
|
||
|
|
||
|
// Here is an enum.
|
||
|
enum Constant {
|
||
|
case Top,
|
||
|
|
||
|
case Cst(Int),
|
||
|
|
||
|
case Bot
|
||
|
}
|
||
|
|
||
|
// Here is a function.
|
||
|
def leq(e1: Constant, e2: Constant): Bool = match (e1, e2) with {
|
||
|
case (Constant.Bot, _) => true
|
||
|
case (Constant.Cst(n1), Constant.Cst(n2)) => n1 == n2
|
||
|
case (_, Constant.Top) => true
|
||
|
case _ => false
|
||
|
}
|
||
|
|
||
|
// Here are some rules.
|
||
|
LocalVar(r, alpha(c)) :- LitStm(r, c).
|
||
|
|
||
|
LocalVar(r, sum(v1, v2)) :- AddStm(r, x, y),
|
||
|
LocalVar(x, v1),
|
||
|
LocalVar(y, v2).
|
||
|
}
|