mirror of
https://github.com/KevinMidboe/linguist.git
synced 2026-01-08 10:25:31 +00:00
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -716,3 +716,6 @@
|
|||||||
[submodule "vendor/grammars/language-povray"]
|
[submodule "vendor/grammars/language-povray"]
|
||||||
path = vendor/grammars/language-povray
|
path = vendor/grammars/language-povray
|
||||||
url = https://github.com/c-lipka/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
|
- source.spin
|
||||||
vendor/grammars/sublime-tea:
|
vendor/grammars/sublime-tea:
|
||||||
- source.tea
|
- source.tea
|
||||||
|
vendor/grammars/sublime-terra:
|
||||||
|
- source.terra
|
||||||
vendor/grammars/sublime-text-ox/:
|
vendor/grammars/sublime-text-ox/:
|
||||||
- source.ox
|
- source.ox
|
||||||
vendor/grammars/sublime-text-pig-latin/:
|
vendor/grammars/sublime-text-pig-latin/:
|
||||||
|
|||||||
@@ -3565,6 +3565,16 @@ Tea:
|
|||||||
tm_scope: source.tea
|
tm_scope: source.tea
|
||||||
ace_mode: text
|
ace_mode: text
|
||||||
|
|
||||||
|
Terra:
|
||||||
|
type: programming
|
||||||
|
extensions:
|
||||||
|
- .t
|
||||||
|
color: "#00004c"
|
||||||
|
ace_mode: lua
|
||||||
|
group: Lua
|
||||||
|
interpreters:
|
||||||
|
- lua
|
||||||
|
|
||||||
Text:
|
Text:
|
||||||
type: prose
|
type: prose
|
||||||
wrap: true
|
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