author | Francesco Abbate <francesco.bbt@gmail.com> | 2013年01月06日 17:46:31 +0100 |
---|---|---|
committer | Francesco Abbate <francesco.bbt@gmail.com> | 2013年01月06日 17:46:31 +0100 |
commit | c53e011ec46d1582ee2c1ccd074fba0744d7cedc (patch) | |
tree | 8f692201b6c7abfbfe8cb3fe75ebf5d06286acbe /lm-expr.lua | |
parent | 7b8241248863f64114e7c18e748c2653920f6621 (diff) | |
download | gsl-shell-c53e011ec46d1582ee2c1ccd074fba0744d7cedc.tar.gz |
-rw-r--r-- | lm-expr.lua | 26 |
diff --git a/lm-expr.lua b/lm-expr.lua new file mode 100644 index 00000000..3c59d7c3 --- /dev/null +++ b/lm-expr.lua @@ -0,0 +1,26 @@ +local format = string.format + +local function as_char(v, prio) + if type(v) == 'table' and v.name then + return (v.prio < prio and format("(%s)", v.name) or v.name) + end + return tostring(v) +end + +local var_name + +local var_name_mt = { + __add = function(a, b) return var_name(format("%s + %s", as_char(a, 0), as_char(b, 0)), 0) end, + __mul = function(a, b) return var_name(format("%s * %s", as_char(a, 2), as_char(b, 2)), 2) end, + __sub = function(a, b) return var_name(format("%s - %s", as_char(a, 0), as_char(b, 0)), 0) end, + __div = function(a, b) return var_name(format("%s / %s", as_char(a, 2), as_char(b, 2)), 2) end, + __pow = function(a, b) return var_name(format("%s^%s", as_char(a, 10), as_char(b, 10)), 10) end, + __unm = function(a) return var_name(format("-%s", as_char(a, 1)), 1) end, +} + +var_name = function (name, prio) + local t = {prio= prio or 10, name= name} + return setmetatable(t, var_name_mt) +end + +return var_name |