remove obsolete file
parent
3f38246bff
commit
d9764b0b8e
|
|
@ -1,323 +0,0 @@
|
|||
/* :folding=explicit:collapseFolds=1: */
|
||||
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2004, 2005 Slava Pestov.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package factor;
|
||||
|
||||
import factor.parser.*;
|
||||
import java.io.*;
|
||||
import java.util.*;
|
||||
|
||||
public class DefaultVocabularyLookup implements VocabularyLookup
|
||||
{
|
||||
public static final Cons DEFAULT_USE = new Cons("syntax",new Cons("scratchpad",null));
|
||||
public static final String DEFAULT_IN = "scratchpad";
|
||||
|
||||
/**
|
||||
* Maps vocabulary names to vocabularies.
|
||||
*/
|
||||
private Map vocabularies;
|
||||
|
||||
//{{{ DefaultVocabularyLookup constructor
|
||||
public DefaultVocabularyLookup()
|
||||
{
|
||||
vocabularies = new HashMap();
|
||||
|
||||
/* comments */
|
||||
FactorWord lineComment = define("syntax","!");
|
||||
lineComment.parsing = new LineComment(lineComment);
|
||||
FactorWord stackComment = define("syntax","(");
|
||||
stackComment.parsing = new StackComment(stackComment);
|
||||
FactorWord docComment = define("syntax","#!");
|
||||
docComment.parsing = new LineComment(docComment);
|
||||
|
||||
/* strings */
|
||||
FactorWord str = define("syntax","\"");
|
||||
str.parsing = new StringLiteral(str);
|
||||
FactorWord sbuf = define("syntax","SBUF\"");
|
||||
sbuf.parsing = new StringBufferLiteral(str);
|
||||
FactorWord ch = define("syntax","CHAR:");
|
||||
ch.parsing = new CharLiteral(ch);
|
||||
|
||||
/* constants */
|
||||
FactorWord t = define("syntax","t");
|
||||
t.parsing = new T(t);
|
||||
FactorWord f = define("syntax","f");
|
||||
f.parsing = new F(f);
|
||||
FactorWord complex = define("syntax","#{");
|
||||
complex.parsing = new ComplexLiteral(complex,"}#");
|
||||
|
||||
/* lists */
|
||||
FactorWord bra = define("syntax","[");
|
||||
bra.parsing = new Bra(bra);
|
||||
FactorWord ket = define("syntax","]");
|
||||
ket.parsing = new Ket(bra,ket);
|
||||
|
||||
/* conses */
|
||||
FactorWord beginCons = define("syntax","[[");
|
||||
beginCons.parsing = new BeginCons(beginCons);
|
||||
FactorWord endCons = define("syntax","]]");
|
||||
endCons.parsing = new EndCons(beginCons,endCons);
|
||||
|
||||
/* vectors */
|
||||
FactorWord beginVector = define("syntax","{");
|
||||
beginVector.parsing = new BeginVector(beginVector);
|
||||
FactorWord endVector = define("syntax","}");
|
||||
endVector.parsing = new EndVector(beginVector,endVector);
|
||||
|
||||
/* word defs */
|
||||
FactorWord def = define("syntax",":");
|
||||
def.parsing = new Def(def);
|
||||
FactorWord ine = define("syntax",";");
|
||||
ine.parsing = new Ine(ine);
|
||||
FactorWord symbol = define("syntax","SYMBOL:");
|
||||
symbol.parsing = new Definer(symbol);
|
||||
|
||||
/* reading numbers with another base */
|
||||
FactorWord bin = define("syntax","BIN:");
|
||||
bin.parsing = new Base(bin,2);
|
||||
FactorWord oct = define("syntax","OCT:");
|
||||
oct.parsing = new Base(oct,8);
|
||||
FactorWord hex = define("syntax","HEX:");
|
||||
hex.parsing = new Base(hex,16);
|
||||
|
||||
/* vocabulary parsing words */
|
||||
FactorWord noParsing = define("syntax","POSTPONE:");
|
||||
noParsing.parsing = new NoParsing(noParsing);
|
||||
FactorWord defer = define("syntax","DEFER:");
|
||||
defer.parsing = new Definer(defer);
|
||||
FactorWord in = define("syntax","IN:");
|
||||
in.parsing = new In(in);
|
||||
FactorWord use = define("syntax","USE:");
|
||||
use.parsing = new Use(use);
|
||||
FactorWord using = define("syntax","USING:");
|
||||
using.parsing = new Using(using);
|
||||
|
||||
FactorWord pushWord = define("syntax","\\");
|
||||
pushWord.parsing = new PushWord(pushWord);
|
||||
|
||||
/* OOP */
|
||||
FactorWord generic = define("syntax","GENERIC:");
|
||||
generic.parsing = new Definer(generic);
|
||||
FactorWord beginMethod = define("syntax","M:");
|
||||
beginMethod.parsing = new BeginMethod(beginMethod);
|
||||
FactorWord beginConstructor = define("syntax","C:");
|
||||
beginConstructor.parsing = new BeginConstructor(beginConstructor);
|
||||
FactorWord beginPredicate = define("syntax","PREDICATE:");
|
||||
beginPredicate.parsing = new BeginPredicate(beginPredicate);
|
||||
FactorWord beginUnion = define("syntax","UNION:");
|
||||
beginUnion.parsing = new ClassDefinition(beginUnion);
|
||||
FactorWord beginBuiltin = define("syntax","BUILTIN:");
|
||||
beginBuiltin.parsing = new ClassDefinition(beginBuiltin);
|
||||
FactorWord tuple = define("syntax","TUPLE:");
|
||||
tuple.parsing = new Tuple(tuple);
|
||||
FactorWord primitive = define("syntax","PRIMITIVE:");
|
||||
primitive.parsing = new Primitive(primitive);
|
||||
|
||||
/* Alien */
|
||||
FactorWord beginStruct = define("alien","BEGIN-STRUCT:");
|
||||
beginStruct.parsing = new BeginStruct(beginStruct);
|
||||
FactorWord endStruct = define("alien","END-STRUCT");
|
||||
endStruct.parsing = new EndStruct(beginStruct,endStruct);
|
||||
FactorWord field = define("alien","FIELD:");
|
||||
field.parsing = new Field(field);
|
||||
} //}}}
|
||||
|
||||
//{{{ getVocabulary() method
|
||||
public Map getVocabulary(String name)
|
||||
{
|
||||
return (Map)vocabularies.get(name);
|
||||
} //}}}
|
||||
|
||||
//{{{ searchVocabulary() method
|
||||
/**
|
||||
* Search in the given vocabulary for the given word.
|
||||
*/
|
||||
public FactorWord searchVocabulary(String vname, String name)
|
||||
{
|
||||
Map v = getVocabulary(vname);
|
||||
if(v != null)
|
||||
return (FactorWord)v.get(name);
|
||||
else
|
||||
return null;
|
||||
} //}}}
|
||||
|
||||
//{{{ searchVocabulary() method
|
||||
/**
|
||||
* Search through the given vocabulary list for the given word.
|
||||
*/
|
||||
public FactorWord searchVocabulary(Cons vocabulary, String name)
|
||||
{
|
||||
while(vocabulary != null)
|
||||
{
|
||||
FactorWord word = searchVocabulary(
|
||||
(String)vocabulary.car,name);
|
||||
if(word != null)
|
||||
return word;
|
||||
|
||||
vocabulary = vocabulary.next();
|
||||
}
|
||||
|
||||
return null;
|
||||
} //}}}
|
||||
|
||||
//{{{ define() method
|
||||
/**
|
||||
* Define a word in the given vocabulary if it doesn't exist already.
|
||||
*/
|
||||
public FactorWord define(String vocabulary, String name)
|
||||
{
|
||||
Map v = getVocabulary(vocabulary);
|
||||
if(v == null)
|
||||
{
|
||||
v = new HashMap();
|
||||
vocabularies.put(vocabulary,v);
|
||||
}
|
||||
Object value = v.get(name);
|
||||
if(value instanceof FactorWord)
|
||||
return (FactorWord)value;
|
||||
else
|
||||
{
|
||||
// save to same workspace as vocabulary,
|
||||
// or no workspace if vocabulary is builtins
|
||||
FactorWord word = new FactorWord(this,vocabulary,name);
|
||||
v.put(name,word);
|
||||
return word;
|
||||
}
|
||||
} //}}}
|
||||
|
||||
//{{{ forget() method
|
||||
public void forget(FactorWord word)
|
||||
{
|
||||
Map vocab = (Map)vocabularies.get(word.vocabulary);
|
||||
if(vocab != null)
|
||||
vocab.remove(word.name);
|
||||
} //}}}
|
||||
|
||||
//{{{ getVocabularies() method
|
||||
public Cons getVocabularies()
|
||||
{
|
||||
Cons vocabs = null;
|
||||
Iterator iter = vocabularies.keySet().iterator();
|
||||
while(iter.hasNext())
|
||||
vocabs = new Cons(iter.next(),vocabs);
|
||||
return vocabs;
|
||||
} //}}}
|
||||
|
||||
//{{{ getWordCompletions() method
|
||||
/**
|
||||
* @param use A list of vocabularies.
|
||||
* @param word A substring of the word name to complete
|
||||
* @param anywhere If true, matches anywhere in the word name are
|
||||
* returned; otherwise, only matches from beginning.
|
||||
* @param completions Set to add completions to
|
||||
*/
|
||||
public void getWordCompletions(Cons use, String word, boolean anywhere,
|
||||
Set completions) throws Exception
|
||||
{
|
||||
while(use != null)
|
||||
{
|
||||
String vocab = (String)use.car;
|
||||
getWordCompletions(vocab,word,anywhere,completions);
|
||||
use = use.next();
|
||||
}
|
||||
} //}}}
|
||||
|
||||
//{{{ isCompletion() method
|
||||
public boolean isCompletion(String match, String against, boolean anywhere)
|
||||
{
|
||||
if(anywhere)
|
||||
{
|
||||
if(against.indexOf(match) != -1)
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(against.startsWith(match))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
} //}}}
|
||||
|
||||
//{{{ getWordCompletions() method
|
||||
public void getWordCompletions(String vocab, String word, boolean anywhere,
|
||||
Set completions) throws Exception
|
||||
{
|
||||
Map v = (Map)vocabularies.get(vocab);
|
||||
if(v == null)
|
||||
return;
|
||||
|
||||
Iterator words = v.values().iterator();
|
||||
|
||||
while(words.hasNext())
|
||||
{
|
||||
FactorWord w = (FactorWord)words.next();
|
||||
if(w != null && w.name != null)
|
||||
{
|
||||
if(!completions.contains(w))
|
||||
{
|
||||
if(isCompletion(word,w.name,anywhere))
|
||||
completions.add(w);
|
||||
}
|
||||
}
|
||||
}
|
||||
} //}}}
|
||||
|
||||
//{{{ getVocabCompletions() method
|
||||
/**
|
||||
* @param vocab A string to complete
|
||||
* @param anywhere If true, matches anywhere in the vocab name are
|
||||
* returned; otherwise, only matches from beginning.
|
||||
*/
|
||||
public String[] getVocabCompletions(String vocab, boolean anywhere)
|
||||
throws Exception
|
||||
{
|
||||
List completions = new ArrayList();
|
||||
Cons vocabs = getVocabularies();
|
||||
while(vocabs != null)
|
||||
{
|
||||
String v = (String)vocabs.car;
|
||||
if(isCompletion(vocab,v,anywhere))
|
||||
completions.add(v);
|
||||
vocabs = vocabs.next();
|
||||
}
|
||||
|
||||
return (String[])completions.toArray(new String[completions.size()]);
|
||||
} //}}}
|
||||
|
||||
//{{{ parseObject() method
|
||||
public Cons parseObject(String source) throws Exception
|
||||
{
|
||||
FactorReader parser = new FactorReader(
|
||||
"parseObject()",
|
||||
new BufferedReader(new StringReader(source)),
|
||||
true,this);
|
||||
return parser.parse();
|
||||
} //}}}
|
||||
}
|
||||
Loading…
Reference in New Issue