mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -716,3 +716,6 @@
|
||||
[submodule "vendor/grammars/language-povray"]
|
||||
path = vendor/grammars/language-povray
|
||||
url = https://github.com/c-lipka/language-povray
|
||||
[submodule "vendor/grammars/sublime-terra"]
|
||||
path = vendor/grammars/sublime-terra
|
||||
url = https://github.com/pyk/sublime-terra
|
||||
|
||||
@@ -549,6 +549,8 @@ vendor/grammars/sublime-spintools/:
|
||||
- source.spin
|
||||
vendor/grammars/sublime-tea:
|
||||
- source.tea
|
||||
vendor/grammars/sublime-terra:
|
||||
- source.terra
|
||||
vendor/grammars/sublime-text-ox/:
|
||||
- source.ox
|
||||
vendor/grammars/sublime-text-pig-latin/:
|
||||
|
||||
@@ -3565,6 +3565,16 @@ Tea:
|
||||
tm_scope: source.tea
|
||||
ace_mode: text
|
||||
|
||||
Terra:
|
||||
type: programming
|
||||
extensions:
|
||||
- .t
|
||||
color: "#00004c"
|
||||
ace_mode: lua
|
||||
group: Lua
|
||||
interpreters:
|
||||
- lua
|
||||
|
||||
Text:
|
||||
type: prose
|
||||
wrap: true
|
||||
|
||||
114
samples/Terra/arith.t
Normal file
114
samples/Terra/arith.t
Normal file
@@ -0,0 +1,114 @@
|
||||
--[[
|
||||
|
||||
-
|
||||
+
|
||||
|
||||
*
|
||||
/
|
||||
%
|
||||
|
||||
^
|
||||
and
|
||||
or
|
||||
~= == < > >= <=
|
||||
<< >>
|
||||
|
||||
]]
|
||||
|
||||
|
||||
|
||||
|
||||
terra test0()
|
||||
var a = 1 + 3
|
||||
var b = 1LL + 2LL
|
||||
var c = 1ULL + 2ULL
|
||||
var d = 1.f + 2.f
|
||||
var e = 1.0 + 2.0
|
||||
return a + b + c + d + e
|
||||
end
|
||||
terra test1()
|
||||
var a = 1 - 3
|
||||
var b = 1LL - 2LL
|
||||
var c = 1ULL - 2ULL
|
||||
var d = 1.f - 2.f
|
||||
var e = 1.0 - 2.0
|
||||
return a - b - c - d - e
|
||||
end
|
||||
terra test2()
|
||||
var a = 2 * 3
|
||||
var b = 3LL * 2LL
|
||||
var c = 3ULL * 2ULL
|
||||
var d = 1.f * 2.f
|
||||
var e = 3.0 * 2.0
|
||||
return a * b * c * d * e
|
||||
end
|
||||
|
||||
terra test3()
|
||||
var a = 2 / 3 + 1
|
||||
var b = 3LL / 2LL + 1
|
||||
var c = 3ULL / 2ULL
|
||||
var d = 1.f / 2.f
|
||||
var e = 3.0 / 2.0
|
||||
return a * b * c * d * e
|
||||
end
|
||||
|
||||
terra test4()
|
||||
var a = 2 % 3
|
||||
var b = 3LL % 4LL
|
||||
var c = 3ULL % 2ULL
|
||||
var d = 1.f % 2.f
|
||||
var e = 3.75 % 2.0
|
||||
return (a == 2) and (b == 3LL) and (d == 1.f) and (e == 1.75)
|
||||
end
|
||||
|
||||
terra test5()
|
||||
var a = 2 ^ 3
|
||||
var b = 3LL ^ 4LL
|
||||
var c = 3ULL ^ 2ULL
|
||||
return (a == 1) and (b == 7LL) and (c == 1ULL)
|
||||
end
|
||||
|
||||
terra test6()
|
||||
var a = 2 and 3
|
||||
var b = 3LL and 4LL
|
||||
var c = 3ULL and 2ULL
|
||||
return (a == 2) and (b == 0LL) and (c == 2ULL)
|
||||
end
|
||||
|
||||
terra test7()
|
||||
var a = 2 or 3
|
||||
var b = 3LL or 4LL
|
||||
var c = 3ULL or 2ULL
|
||||
return (a == 3) and (b == 7LL) and (c == 3ULL)
|
||||
end
|
||||
|
||||
|
||||
terra test8()
|
||||
var a0,a1 = 2 ~= 3, 2 == 3
|
||||
var b0,b1 = 2 < 3, 2 >= 3
|
||||
var c0,c1 = 2 > 3, 2 <= 3
|
||||
|
||||
return a0 and not a1 and b0 and not b1 and not c0 and c1
|
||||
end
|
||||
|
||||
terra test9()
|
||||
var a0, a1 = 8 >> 1, 8 << 1
|
||||
var b0, b1 = -8 >> 1, -8 << 1
|
||||
return a0 == 4 and a1 == 16 and b0 == -4 and b1 == -16
|
||||
end
|
||||
|
||||
|
||||
local test = require("test")
|
||||
|
||||
test.eq(test0(),16)
|
||||
test.eq(test1(),2)
|
||||
test.eq(test2(),2592)
|
||||
test.eq(test3(),1.5)
|
||||
|
||||
test.eq(test4(),true)
|
||||
|
||||
test.eq(test5(),true)
|
||||
test.eq(test6(),true)
|
||||
test.eq(test7(),true)
|
||||
test.eq(test8(),true)
|
||||
test.eq(test9(),true)
|
||||
75
samples/Terra/arrayt.t
Normal file
75
samples/Terra/arrayt.t
Normal file
@@ -0,0 +1,75 @@
|
||||
C = terralib.includecstring [[
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
]]
|
||||
local arraytypes = {}
|
||||
function Array(T)
|
||||
local struct ArrayImpl {
|
||||
data : &T;
|
||||
N : int;
|
||||
}
|
||||
function ArrayImpl.metamethods.__typename(self)
|
||||
return "Array("..tostring(T)..")"
|
||||
end
|
||||
arraytypes[ArrayImpl] = true
|
||||
terra ArrayImpl:init(N : int)
|
||||
self.data = [&T](C.malloc(N*sizeof(T)))
|
||||
self.N = N
|
||||
end
|
||||
terra ArrayImpl:free()
|
||||
C.free(self.data)
|
||||
end
|
||||
ArrayImpl.metamethods.__apply = macro(function(self,idx)
|
||||
return `self.data[idx]
|
||||
end)
|
||||
ArrayImpl.metamethods.__methodmissing = macro(function(methodname,selfexp,...)
|
||||
local args = terralib.newlist {...}
|
||||
local i = symbol(int)
|
||||
local promotedargs = args:map(function(a)
|
||||
if arraytypes[a:gettype()] then
|
||||
return `a(i)
|
||||
else
|
||||
return a
|
||||
end
|
||||
end)
|
||||
return quote
|
||||
var self = selfexp
|
||||
var r : ArrayImpl
|
||||
r:init(self.N)
|
||||
for [i] = 0,r.N do
|
||||
r.data[i] = self.data[i]:[methodname](promotedargs)
|
||||
end
|
||||
in
|
||||
r
|
||||
end
|
||||
end)
|
||||
return ArrayImpl
|
||||
end
|
||||
|
||||
struct Complex {
|
||||
real : float;
|
||||
imag : float;
|
||||
}
|
||||
|
||||
terra Complex:add(c : Complex)
|
||||
return Complex { self.real + c.real, self.imag + c.imag }
|
||||
end
|
||||
|
||||
ComplexArray = Array(Complex)
|
||||
N = 10
|
||||
terra testit()
|
||||
var ca : ComplexArray
|
||||
ca:init(N)
|
||||
for i = 0,N do
|
||||
ca(i) = Complex { i, i + 1 }
|
||||
end
|
||||
var ra = ca:add(ca)
|
||||
return ra
|
||||
end
|
||||
local r = testit()
|
||||
assert(r.N == N)
|
||||
for i = 0,N-1 do
|
||||
assert(r.data[i].real == 2*i)
|
||||
assert(r.data[i].imag == 2*(i+1))
|
||||
end
|
||||
assert(tostring(Array(int)) == "Array(int32)")
|
||||
150
samples/Terra/benchmark_nbody.t
Normal file
150
samples/Terra/benchmark_nbody.t
Normal file
@@ -0,0 +1,150 @@
|
||||
local C = terralib.includecstring[[
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
]]
|
||||
|
||||
pi = 3.141592653589793
|
||||
solar_mass = (4 * pi * pi)
|
||||
days_per_year = 365.24
|
||||
|
||||
struct planet {
|
||||
x : double;
|
||||
y : double;
|
||||
z : double;
|
||||
vx : double;
|
||||
vy : double;
|
||||
vz : double;
|
||||
mass : double;
|
||||
}
|
||||
|
||||
terra advance(nbodies : int, bodies : &planet, dt : double)
|
||||
|
||||
for i = 0, nbodies do
|
||||
var b = &bodies[i]
|
||||
for j = i + 1, nbodies do
|
||||
var b2 = &bodies[j]
|
||||
|
||||
var dx = b.x - b2.x;
|
||||
var dy = b.y - b2.y;
|
||||
var dz = b.z - b2.z;
|
||||
var distance = C.sqrt(dx * dx + dy * dy + dz * dz);
|
||||
var mag = dt / (distance * distance * distance);
|
||||
--C.printf("%f %f %f %f %f\n",dx,dy,dz,distance,mag);
|
||||
b.vx = b.vx - dx * b2.mass * mag;
|
||||
b.vy = b.vy - dy * b2.mass * mag;
|
||||
b.vz = b.vz - dz * b2.mass * mag;
|
||||
b2.vx = b2.vx + dx * b.mass * mag;
|
||||
b2.vy = b2.vy + dy * b.mass * mag;
|
||||
b2.vz = b2.vz + dz * b.mass * mag;
|
||||
--C.printf("%f %f %f %f %f %f\n",b.vx,b.vy,b.vz,b2.vx,b2.vy,b2.vz)
|
||||
end
|
||||
end
|
||||
for i = 0,nbodies do
|
||||
var b = &bodies[i]
|
||||
b.x = b.x + dt * b.vx;
|
||||
b.y = b.y + dt * b.vy;
|
||||
b.z = b.z + dt * b.vz;
|
||||
end
|
||||
end
|
||||
|
||||
terra energy(nbodies : int, bodies : &planet)
|
||||
var e = 0.0
|
||||
for i = 0, nbodies do
|
||||
var b = &bodies[i]
|
||||
e = e + 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz);
|
||||
for j = i + 1, nbodies do
|
||||
var b2 = &bodies[j]
|
||||
var dx = b.x - b2.x
|
||||
var dy = b.y - b2.y
|
||||
var dz = b.z - b2.z
|
||||
var distance = C.sqrt(dx * dx + dy * dy + dz * dz)
|
||||
e = e - (b.mass * b2.mass) / distance
|
||||
end
|
||||
end
|
||||
return e
|
||||
end
|
||||
|
||||
terra offset_momentum(nbodies : int, bodies : &planet)
|
||||
var px,py,pz = 0.0,0.0,0.0
|
||||
|
||||
for i = 0,nbodies do
|
||||
px = px + bodies[i].vx * bodies[i].mass
|
||||
py = py + bodies[i].vy * bodies[i].mass
|
||||
pz = pz + bodies[i].vz * bodies[i].mass
|
||||
end
|
||||
bodies[0].vx = - px / solar_mass
|
||||
bodies[0].vy = - py / solar_mass
|
||||
bodies[0].vz = - pz / solar_mass
|
||||
end
|
||||
|
||||
NBODIES = 5
|
||||
|
||||
terra main(argc : int, argv : &&int8)
|
||||
var bodies = array(
|
||||
planet { -- sun */
|
||||
0, 0, 0, 0, 0, 0, solar_mass
|
||||
},
|
||||
planet { -- jupiter */
|
||||
4.84143144246472090e+00,
|
||||
-1.16032004402742839e+00,
|
||||
-1.03622044471123109e-01,
|
||||
1.66007664274403694e-03 * days_per_year,
|
||||
7.69901118419740425e-03 * days_per_year,
|
||||
-6.90460016972063023e-05 * days_per_year,
|
||||
9.54791938424326609e-04 * solar_mass
|
||||
},
|
||||
planet { -- saturn */
|
||||
8.34336671824457987e+00,
|
||||
4.12479856412430479e+00,
|
||||
-4.03523417114321381e-01,
|
||||
-2.76742510726862411e-03 * days_per_year,
|
||||
4.99852801234917238e-03 * days_per_year,
|
||||
2.30417297573763929e-05 * days_per_year,
|
||||
2.85885980666130812e-04 * solar_mass
|
||||
},
|
||||
planet { -- uranus */
|
||||
1.28943695621391310e+01,
|
||||
-1.51111514016986312e+01,
|
||||
-2.23307578892655734e-01,
|
||||
2.96460137564761618e-03 * days_per_year,
|
||||
2.37847173959480950e-03 * days_per_year,
|
||||
-2.96589568540237556e-05 * days_per_year,
|
||||
4.36624404335156298e-05 * solar_mass
|
||||
},
|
||||
planet { -- neptune */
|
||||
1.53796971148509165e+01,
|
||||
-2.59193146099879641e+01,
|
||||
1.79258772950371181e-01,
|
||||
2.68067772490389322e-03 * days_per_year,
|
||||
1.62824170038242295e-03 * days_per_year,
|
||||
-9.51592254519715870e-05 * days_per_year,
|
||||
5.15138902046611451e-05 * solar_mass
|
||||
}
|
||||
)
|
||||
var n = C.atoi(argv[1])
|
||||
offset_momentum(NBODIES, bodies)
|
||||
C.printf ("%.9f\n", energy(NBODIES, bodies))
|
||||
for i = 0,n do
|
||||
advance(NBODIES, bodies, 0.01)
|
||||
end
|
||||
C.printf ("%.9f\n", energy(NBODIES, bodies));
|
||||
return 0
|
||||
end
|
||||
|
||||
terra run()
|
||||
main(2,array("what","1000000"))
|
||||
end
|
||||
|
||||
--run:compile()
|
||||
|
||||
|
||||
--local test = require("test")
|
||||
|
||||
--print(test.time(run))
|
||||
|
||||
terralib.saveobj("benchmark_nbody",{ main = main } )
|
||||
energy:disas()
|
||||
energy:printpretty()
|
||||
1
vendor/grammars/sublime-terra
vendored
Submodule
1
vendor/grammars/sublime-terra
vendored
Submodule
Submodule vendor/grammars/sublime-terra added at d77b0341d2
Reference in New Issue
Block a user