Skip to content

Commit

Permalink
Starting compiler to java source
Browse files Browse the repository at this point in the history
  • Loading branch information
vic committed Jul 22, 2010
1 parent 78735a8 commit 1161500
Show file tree
Hide file tree
Showing 9 changed files with 226 additions and 1 deletion.
2 changes: 2 additions & 0 deletions ikrit/bin/ikrit-p
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
exec ioke -I../lib -Ilib bin/ikrit-p.ik $*
6 changes: 6 additions & 0 deletions ikrit/bin/ikrit-p.ik
@@ -0,0 +1,6 @@
use("akin")
use("akin/parser")

Akin Parser parseURL(
java:io:File new(System programArguments first) toURL
) code println
23 changes: 22 additions & 1 deletion ikrit/lib/akin/parser/message.ik
Expand Up @@ -20,6 +20,19 @@ Akin Parser Message do(
msg
)

copyUntil = dmacro(
[code]
here = ''(findForward(`code)) evaluateOn(call ground, self)
if(here nil?, return deepCopy)
bwd = here bwd
bwd fwd = nil
ensure(
cp = @deepCopy,
bwd fwd = here
)
cp
)

deepCopy = method(
msg = Akin Parser Message mimic(type, text)
if(body,
Expand All @@ -32,6 +45,7 @@ Akin Parser Message do(
if(position, msg position = position)
if(fwd, msg fwd = msg fwd deepCopy)
if(bwd, msg bwd = bwd)
msg
)


Expand Down Expand Up @@ -110,6 +124,11 @@ Akin Parser Message do(

last = method(findForward(fwd nil?) || self)

afterPunctuation = method(
punc = findForward(punctuation?)
punc && punc fwd
)

next = method(
;; find next until punctuation
findForward(m,
Expand Down Expand Up @@ -519,7 +538,7 @@ Akin Parser Message each = dmacro(
self,

[index, place, code]
lexicalCode = LexicalBlock createFrom(list(index,name, code), call ground)
lexicalCode = LexicalBlock createFrom(list(index,place,code), call ground)
i = 0
m = self
while(m, lexicalCode call(i, m). m = m fwd. i++)
Expand All @@ -538,6 +557,8 @@ Akin Parser Message Body do(
cell("[]") = method(index, message at(index))

argAt = method(index, message enumerated(index))

arg = method(index, m = argAt(index). m && m copyUntil(punctuation?))

round? = method( bracketed?("(", ")") )
square? = method( bracketed?("[", "]") )
Expand Down
5 changes: 5 additions & 0 deletions ikrit/lib/akin/semantic.ik
@@ -0,0 +1,5 @@

Akin Semantic = Origin mimic
use("akin/semantic/context")
use("akin/semantic/node")

16 changes: 16 additions & 0 deletions ikrit/lib/akin/semantic/context.ik
@@ -0,0 +1,16 @@
Akin Semantic Context = Origin mimic

Akin Semantic do(

Context initialize = method(@scripts = list)

Context currentScript = method(scripts last)

Context analyze = method(chain,
script = create:node(Node Script mimic(self, chain position physical))
scripts append!(script)
script process(chain)
self
)

)
24 changes: 24 additions & 0 deletions ikrit/lib/akin/semantic/java.ik
@@ -0,0 +1,24 @@
use("akin/semantic")

Akin Semantic Java = Origin mimic

let(
Semantic, Akin Semantic,
Node, Akin Semantic Node,
Java, Akin Semantic Java,


Java Context = Semantic Context with(Java: Java, Node: Java)
Java Context Context = Java Context
Context = Java Context

Context create:node = Node cell("create:node")
Context create:ctx = fnx(
ctx = Origin with(Java: Java, Context: Context)
ctx initialize = method(node, @node = node)
ctx
)
)

use("akin/semantic/java/node")
use("akin/semantic/java/context")
55 changes: 55 additions & 0 deletions ikrit/lib/akin/semantic/java/context.ik
@@ -0,0 +1,55 @@
let(
Semantic, Akin Semantic,
Node, Akin Semantic Node,
Java, Akin Semantic Java,
Context, Akin Semantic Java Context,

Context initialize = method(
@packages = list(Java Package mimic)
)
Context classes = method(packages map(classes) flatten)


Context Script = Context create:ctx
Context Script cell("identifier:package()") = method(msg, receiver,
name = msg body message select(visible?) map(text) join(".")
pkg = node world packages find(p, p name == name)
unless(pkg,
pkg = Java Package mimic(name)
node world packages << pkg
)
list(self, msg afterPunctuation)
)

Context Script cell("any:identifier") = method(msg, receiver,
pointer = Java Pointer mimic(msg text, msg position physical)
list(self, msg fwd, pointer)
)

Context Script cell("identifier:class") = method(msg, receiver,
cls = Java Class mimic(nil)
list(self, msg fwd, cls)
)

Context Script cell("operator:=()") = method(msg, receiver,
lhs = node process(msg body arg(0)) last
rhs = node process(msg body arg(1)) last

asg = Java Assignment mimic(receiver, lhs, rhs)

cond(

asg topLevel? && asg class?,
asg rhs name = lhs name
lhs reference = rhs
rhs package = node currentPackage
node currentPackage classes << rhs,

true,
error!("ASIGN?")
)

list(self, msg fwd, asg)
)

)
51 changes: 51 additions & 0 deletions ikrit/lib/akin/semantic/java/node.ik
@@ -0,0 +1,51 @@

let(
Java, Akin Semantic Java,

java:node = fnx(Origin with(Java: Java))

Java Script = java:node
Java Script initialize = method(world, position nil,
@world = world
@position = position
@currentPackage = world packages first
)

Java Package = java:node
Java Package initialize = method(name nil,
@name = name
@classes = list
@interfaces = list
@enums = list
@annotations = list
)

Java Class = java:node
Java Class initialize = method(name, package nil,
@name = name
@package = package
@inner = Java Package mimic
@annotations = list
@parameters = list
)

Java Pointer = java:node
Java Pointer initialize = method(name, position nil, reference nil,
@name = name
@position = position
@reference = reference
)

Java Assignment = java:node
Java Assignment initialize = method(receiver, lhs, rhs,
@receiver = receiver
@lhs = lhs
@rhs = rhs
)

Java Assignment topLevel? = method(receiver nil?)
Java Assignment class? = method(rhs is?(Java Class))



)
45 changes: 45 additions & 0 deletions ikrit/lib/akin/semantic/node.ik
@@ -0,0 +1,45 @@
Akin Semantic Node = Origin mimic

let(
Node, Akin Semantic Node,

Node create:node = method(object,
object context = Context cell(object kind split last) mimic(object)
object process = Akin Semantic Node cell(:process)
object
)


Node process = method(chain,
state = list(context, chain, nil)
while(state && state first && state second,
ctx = state first
msg = state second
receiver = state third
if(msg terminator?,
state = list(context, msg fwd, nil),
if(msg expression?,
orig = "#{msg type}:#{msg text}"
if(msg body, orig += msg body brackets join(""))
name = orig
if(ctx cell?(name),
state = ctx send(name, msg, receiver),
name = "any:#{msg type}"
if(msg body, name += msg body brackets join(""))
if(ctx cell?(name),
state = ctx send(name, msg, receiver),
name = "any:missing"
if(ctx cell?(name),
state = ctx send(name, msg, receiver),
error!("Unknown message #{receiver}##{orig}"+
" at #{msg position physical} "+
" on #{ctx}")
)
)
)
)
)
)
)

)

0 comments on commit 1161500

Please sign in to comment.