kawa.lang
Class Translator

java.lang.Object
  |
  +--kawa.lang.Translator

public class Translator
extends java.lang.Object

Used to translate from source to Expression. The result has macros expanded, lexical names bound, etc, and is ready for code generation. This is sometimes called a "compilation environment", but we modify it as we go along - there is a single Translator for each top-level form.


Field Summary
 Environment environ
           
 ModuleExp module
           
 
Constructor Summary
Translator()
           
Translator(Environment env)
           
Translator(Environment env, SourceMessages messages)
           
 
Method Summary
 void addGlobal(java.lang.String name, java.lang.Object value)
          Enter a global definition.
 Syntax check_if_Syntax(java.lang.Object obj)
          Check if Object is Syntax, or bound to Syntax.
 LambdaExp currentLambda()
           
 ScopeExp currentScope()
           
 void error(char severity, java.lang.String message)
           
 void finishModule(ModuleExp mexp, java.util.Vector forms)
           
 Syntax getCurrentSyntax()
           
 Environment getGlobalEnvironment()
           
 SourceMessages getMessages()
           
 boolean isLexical(Declaration decl)
          Return true if decl is lexical and not fluid.
static gnu.kawa.util.Pair makePair(gnu.kawa.util.Pair pair, java.lang.Object car, java.lang.Object cdr)
           
 void mustCompileHere()
          Note that we have seen a construct that must be compiled, not evaluated.
 void pop(ScopeExp scope)
           
 boolean popBinding()
           
 void popDecls(ScopeExp scope)
           
 void push(Declaration decl)
          Insert decl into environ.
 void push(ScopeExp scope)
           
 void pushBinding(java.lang.String name, java.lang.Object value)
          Note a new binding, remembering old binding in the shadowStack.
 void pushDecls(ScopeExp scope)
           
 Expression rewrite_body(java.lang.Object exp)
          Re-write a Scheme in S-expression format into internal form.
 Expression rewrite_body(java.util.Vector forms, LetExp defs)
           
 Expression rewrite_pair(gnu.kawa.util.Pair p)
           
 Expression rewrite_with_position(java.lang.Object exp, gnu.kawa.util.PairWithPosition pair)
           
 Expression rewrite(java.lang.Object exp)
          Re-write a Scheme expression in S-expression format into internal form.
 boolean scan_body(java.lang.Object body, java.util.Vector forms, ScopeExp defs)
          Recursive helper method for rewrite_body.
 void setMessages(SourceMessages messages)
           
 Expression syntaxError(java.lang.String message)
          Handle syntax errors (at rewrite time).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

environ

public Environment environ

module

public ModuleExp module
Constructor Detail

Translator

public Translator(Environment env,
                  SourceMessages messages)

Translator

public Translator(Environment env)

Translator

public Translator()
Method Detail

currentLambda

public LambdaExp currentLambda()

currentScope

public ScopeExp currentScope()

isLexical

public boolean isLexical(Declaration decl)
Return true if decl is lexical and not fluid.

getGlobalEnvironment

public final Environment getGlobalEnvironment()

getCurrentSyntax

public Syntax getCurrentSyntax()

getMessages

public SourceMessages getMessages()

setMessages

public void setMessages(SourceMessages messages)

error

public void error(char severity,
                  java.lang.String message)

syntaxError

public Expression syntaxError(java.lang.String message)
Handle syntax errors (at rewrite time).
Parameters:
message - an error message to print out
Returns:
an ErrorExp

addGlobal

public void addGlobal(java.lang.String name,
                      java.lang.Object value)
Enter a global definition. This allows macro definitions to be used in the same Translation as the define-syntax.

mustCompileHere

public void mustCompileHere()
Note that we have seen a construct that must be compiled, not evaluated. If we are not inside a lambda (which is always compiled), but only inside the outer-most ModuleExp, note that it must be compiled.

check_if_Syntax

public Syntax check_if_Syntax(java.lang.Object obj)
Check if Object is Syntax, or bound to Syntax.
Parameters:
obj - the value to check
Returns:
the Syntax bound to obj, or null.

rewrite_pair

public Expression rewrite_pair(gnu.kawa.util.Pair p)

rewrite

public Expression rewrite(java.lang.Object exp)
Re-write a Scheme expression in S-expression format into internal form.

rewrite_with_position

public Expression rewrite_with_position(java.lang.Object exp,
                                        gnu.kawa.util.PairWithPosition pair)

scan_body

public boolean scan_body(java.lang.Object body,
                         java.util.Vector forms,
                         ScopeExp defs)
Recursive helper method for rewrite_body. Scan body for definitions, placing partially macro-expanded expressions into forms. If definitions were seen, return a LetExp containing the definitions.

makePair

public static gnu.kawa.util.Pair makePair(gnu.kawa.util.Pair pair,
                                          java.lang.Object car,
                                          java.lang.Object cdr)

rewrite_body

public Expression rewrite_body(java.lang.Object exp)
Re-write a Scheme in S-expression format into internal form.

rewrite_body

public Expression rewrite_body(java.util.Vector forms,
                               LetExp defs)

finishModule

public void finishModule(ModuleExp mexp,
                         java.util.Vector forms)

pushBinding

public void pushBinding(java.lang.String name,
                        java.lang.Object value)
Note a new binding, remembering old binding in the shadowStack.

popBinding

public boolean popBinding()

push

public void push(Declaration decl)
Insert decl into environ. (Used at rewrite time, not eval time.)

pushDecls

public final void pushDecls(ScopeExp scope)

popDecls

public final void popDecls(ScopeExp scope)

push

public void push(ScopeExp scope)

pop

public void pop(ScopeExp scope)