|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object gnu.expr.Compilation kawa.lang.Translator
public class Translator
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 | |
---|---|
LambdaExp |
curMethodLambda
|
Macro |
currentMacroDefinition
Set if we're processing (as opposed to expanding) a define-syntax or defmacro . |
int |
firstForm
|
java.util.Stack |
formStack
|
Declaration |
matchArray
A variable to hold the matched values for syntax-case pattern variables. |
PatternScope |
patternScope
Innermost current scope of pattern variable, from a syntax-case . |
java.lang.Object |
pendingForm
|
Declaration |
templateScopeDecl
|
Constructor Summary | |
---|---|
Translator(Language language,
SourceMessages messages)
|
Method Summary | |
---|---|
Declaration |
define(java.lang.Object name,
SyntaxForm nameSyntax,
ScopeExp defs)
|
Type |
exp2Type(Pair typeSpecPair)
Extract a type from the car of a pair. |
void |
finishModule(ModuleExp mexp)
|
Syntax |
getCurrentSyntax()
|
Environment |
getGlobalEnvironment()
|
boolean |
isLexical(Declaration decl)
Return true if decl is lexical and not fluid. |
static int |
listLength(java.lang.Object obj)
Returns the length of a syntax list. |
Declaration |
lookup(java.lang.Object name,
int namespace)
|
Declaration |
lookupGlobal(java.lang.Object name)
Find global Declaration, creating one if not found. |
Declaration |
lookupGlobal(java.lang.Object name,
int namespace)
Find global Declaration, creating one if not found. |
Expression |
makeBody(int first,
ScopeExp scope)
Combine a list of zero or more expression forms into a "body". |
static Pair |
makePair(Pair pair,
java.lang.Object car,
java.lang.Object cdr)
|
Declaration |
makeRenamedAlias(Declaration decl,
ScopeExp templateScope)
|
Declaration |
makeRenamedAlias(java.lang.Object name,
Declaration decl,
ScopeExp templateScope)
|
boolean |
matches(java.lang.Object form,
java.lang.String literal)
True iff a form matches a literal symbol. |
boolean |
matches(java.lang.Object form,
SyntaxForm syntax,
java.lang.String literal)
|
Symbol |
namespaceResolve(Expression context,
Expression member)
|
java.lang.Object |
namespaceResolve(java.lang.Object name)
|
void |
noteAccess(java.lang.Object name,
ScopeExp scope)
Note that we reference name in a given scope. |
Expression |
parse(java.lang.Object input)
This may not make sense, except for Lisp-like languages. |
java.lang.Object |
popForms(int first)
|
void |
popPositionOf(java.lang.Object saved)
Restore line number position from a previous pushPositionOf. |
void |
popRenamedAlias(int count)
Remove one or more aliases created by pushRenamedAlias . |
void |
processAccesses()
Check references recorded by noteAccess. |
java.lang.Object |
pushPositionOf(java.lang.Object pair)
Note current line number position from a PairWithPosition. |
void |
pushRenamedAlias(Declaration alias)
Push an alias for a declaration in a scope. |
void |
resolveModule(ModuleExp mexp)
|
Expression |
rewrite_body(java.lang.Object exp)
Re-write a Scheme in S-expression format into internal form. |
Expression |
rewrite_car(Pair pair,
boolean function)
|
Expression |
rewrite_car(Pair pair,
SyntaxForm syntax)
|
Expression |
rewrite_pair(Pair p,
boolean function)
|
Expression |
rewrite_with_position(java.lang.Object exp,
boolean function,
PairWithPosition pair)
|
Expression |
rewrite(java.lang.Object exp)
Re-write a Scheme expression in S-expression format into internal form. |
Expression |
rewrite(java.lang.Object exp,
boolean function)
Re-write a Scheme expression in S-expression format into internal form. |
void |
rewriteBody(int first)
|
void |
rewriteInBody(java.lang.Object exp)
|
static java.lang.Object |
safeCar(java.lang.Object obj)
|
static java.lang.Object |
safeCdr(java.lang.Object obj)
|
java.lang.Object |
scanBody(java.lang.Object body,
ScopeExp defs,
boolean makeList)
Recursive helper method for rewrite_body. |
void |
scanForm(java.lang.Object st,
ScopeExp defs)
|
void |
setCurrentScope(ScopeExp scope)
Set currentScope() . |
static void |
setLine(Declaration decl,
java.lang.Object location)
|
static void |
setLine(Expression exp,
java.lang.Object location)
|
void |
setLineOf(Expression exp)
Set the line position of the argument to the current position. |
static java.lang.Object |
stripSyntax(java.lang.Object obj)
|
static java.lang.Object |
wrapSyntax(java.lang.Object form,
SyntaxForm syntax)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public Macro currentMacroDefinition
define-syntax
or defmacro
.
public PatternScope patternScope
syntax-case
.
public Declaration templateScopeDecl
public Declaration matchArray
public java.util.Stack formStack
public int firstForm
public java.lang.Object pendingForm
public LambdaExp curMethodLambda
Constructor Detail |
---|
public Translator(Language language, SourceMessages messages)
Method Detail |
---|
public boolean isLexical(Declaration decl)
public final Environment getGlobalEnvironment()
public Expression parse(java.lang.Object input)
Compilation
parse
in class Compilation
public final Expression rewrite_car(Pair pair, SyntaxForm syntax)
public final Expression rewrite_car(Pair pair, boolean function)
public Syntax getCurrentSyntax()
public final boolean matches(java.lang.Object form, java.lang.String literal)
public boolean matches(java.lang.Object form, SyntaxForm syntax, java.lang.String literal)
public Declaration lookup(java.lang.Object name, int namespace)
lookup
in class Compilation
public Declaration lookupGlobal(java.lang.Object name)
public Declaration lookupGlobal(java.lang.Object name, int namespace)
public Expression rewrite_pair(Pair p, boolean function)
public Symbol namespaceResolve(Expression context, Expression member)
public static java.lang.Object stripSyntax(java.lang.Object obj)
public static java.lang.Object safeCar(java.lang.Object obj)
public static java.lang.Object safeCdr(java.lang.Object obj)
public static int listLength(java.lang.Object obj)
public void rewriteInBody(java.lang.Object exp)
public Expression rewrite(java.lang.Object exp)
public java.lang.Object namespaceResolve(java.lang.Object name)
public void setCurrentScope(ScopeExp scope)
Compilation
currentScope()
.
Also update the nesting
object.
setCurrentScope
in class Compilation
public Expression rewrite(java.lang.Object exp, boolean function)
public static void setLine(Expression exp, java.lang.Object location)
public static void setLine(Declaration decl, java.lang.Object location)
public java.lang.Object pushPositionOf(java.lang.Object pair)
public void popPositionOf(java.lang.Object saved)
saved
- value returned by matching pushPositionOf.public void setLineOf(Expression exp)
public Type exp2Type(Pair typeSpecPair)
public Expression rewrite_with_position(java.lang.Object exp, boolean function, PairWithPosition pair)
public static java.lang.Object wrapSyntax(java.lang.Object form, SyntaxForm syntax)
public java.lang.Object popForms(int first)
public void scanForm(java.lang.Object st, ScopeExp defs)
public java.lang.Object scanBody(java.lang.Object body, ScopeExp defs, boolean makeList)
formStack
.
makeList
- if true, return a list representation of the scanned
forms (not including declarations); else forms are push on formStack
makeList
(possibly wrapped
in a SyntaxForm
); otherwise null
.public static Pair makePair(Pair pair, java.lang.Object car, java.lang.Object cdr)
public Expression rewrite_body(java.lang.Object exp)
public void rewriteBody(int first)
public Expression makeBody(int first, ScopeExp scope)
public void noteAccess(java.lang.Object name, ScopeExp scope)
public void processAccesses()
public void finishModule(ModuleExp mexp)
public void resolveModule(ModuleExp mexp)
public Declaration makeRenamedAlias(Declaration decl, ScopeExp templateScope)
public Declaration makeRenamedAlias(java.lang.Object name, Declaration decl, ScopeExp templateScope)
public void pushRenamedAlias(Declaration alias)
decl
came from a syntax template
whose immediate scope is templateScope
,
then the same syntax template may contain local variable references
that are also in the same templateScope
.
Such variable references will not look in the current
"physical" scope, where we just created decl
, but
will instead search the "lexical" templateScope.
So that such references can resolve to decl
, we
create an alias in templateScope
that points
to decl
. We record that we did this in the
renamedLiasStack
, so we can remove the alias later.
public void popRenamedAlias(int count)
pushRenamedAlias
.
public Declaration define(java.lang.Object name, SyntaxForm nameSyntax, ScopeExp defs)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |