//
// KEHOME/java/cyc/mycyc.java
// Oct/22/2005
// adapted from KEHOME/java/tap/mytap.java
// usage:
// java mycyc myworld mycontext
// verb (predicate subject object)
// ...
// CONTROL-Z
//
// example:
// java mycyc dick BaseKB
// at (space view time)
// query (isa Person ?x)
// query (subClassOf ?x Person)
// assert (isa DickMcCullough Person)
// do (cyc-create "DickMcCullough" nil)
// do (write-image "world/dick")
// do (generate-phrase expression)
// do (exit)
// CONTROL-Z
import java.io.*;
import java.util.*;
import java.util.regex.*;
//import org.opencyc.cycagent;
//import org.opencyc.cycobject.CycList;
//import org.opencyc.cycobject.*;
//import org.opencyc.xml;
//import org.opencyc.inferencesupport.*;
//import org.opencyc.api;
/**
* assumes OpenCyc server is already running
*
* read Cyc KB world,context from command line
* read sentence(s) from standard input
* parse to cycline
* write cycline to OpenCyc server
* read answer(s) from OpenCyc server
* sort answer(s)
* print answer(s)
*/
public class mycyc
{
public static void main(String argv[])
//----------------------------------//
throws IOException
{
String info = "# INFO: cyc: ";
String error = "# ERROR: cyc: ";
String warning = "# WARNING: cyc: ";
String debug = "no";
//String myworld = System.getProperty("MYWORLD");
//String mycontext = System.getProperty("MYCONTEXT");
int argc = argv.length;
if (argc > 0) {
String myworld = argv[0];
}
if (argc > 1) {
String mycontext = argv[1];
String s_context = " " + mkr2cyc.cyclify(mycontext) +")";
} else {
String s_context = " #$BaseKB)";
}
//GenericAgent cyc = new GenericAgent(myworld);
String p_assert = "(CYC-ASSERT '";
String p_query = "(CYC-QUERY '";
BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
String line = "";
for (
int linenumber = 0;
line != null;
++linenumber
) {
System.err.print("cyc$ ");
try {
line = in.readLine();
} catch(IOException e) {
return;
}
if (line == null) return;
if (line.length() == 0) continue;
if (debug == "yes") {
System.err.println(info + "line = " + line);
}
/**
* parse to quad: verb (predicate subject object)
* any "left-over" words belong to object
*/
String[] sentence = Pattern.compile("() +").split(line);
int ns = sentence.length;
String verb,predicate,subject,object;
verb = sentence[0];
predicate = sentence[1];
if (ns > 2) {
subject = sentence[2];
} else {
subject = "";
}
if (ns > 3) {
object = sentence[3];
} else {
object = "";
}
for(int i = 4; i < ns; ++i)
object += " " + sentence[i];
if (debug == "yes") {
System.err.println(info + "myworld = <" + myworld + ">");
System.err.println(info + "mycontext = <" + mycontext + ">");
System.err.println(info + "verb = <" + verb + ">");
System.err.println(info + "predicate = <" + predicate + ">");
System.err.println(info + "subject = <" + subject + ">");
System.err.println(info + "object = <" + object + ">");
System.err.println(info + "line = <" + line + ">");
}
String prefix;
String suffix;
if (verb.equals("at")) {
prefix = "(WITH-CONTEXT '";
suffix = ")";
predicate = mkr2cyc.cyclify(predicate);
subject = mkr2cyc.cyclify(subject);
object = mkr2cyc.cyclify(object);
} else if (verb.equals("assert")) {
prefix = p_assert;
suffix = s_context;
predicate = mkr2cyc.cyclify(predicate);
subject = mkr2cyc.cyclify(subject);
object = mkr2cyc.cyclify(object);
} else if (verb.equals("query")) {
prefix = p_query;
suffix = s_context;
predicate = mkr2cyc.cyclify(predicate);
subject = mkr2cyc.cyclify(subject);
object = mkr2cyc.cyclify(object);
} else if (verb.equals("do")) {
prefix = "";
suffix = "";
} else {
System.err.println(error + "line = <" + line + ">");
continue;
}
String cycline = predicate + " " + subject + " " + object;
cycline = prefix + cycline + suffix;
if (debug == "yes")
System.err.println(info + "cycline = <" + cycline + ">");
//CycList cyclist = CycList.read(cycline);
//cycline = CycList.cyclify(cycline);
System.out.println(cycline);
String[] answer = {"abc","def","ghi"};
//QueryLiteral qlit = QueryLiteral(cycline);
//xxx context = yyy(mycontext);
//BindingSet answer = BindingSet(qlit,mycontext);
int na = answer.length;
if (na == 0) {
//System.err.println(" " + info + "count = " + na);
} else {
//getdata.print_column(answer);
}
} // end for
return;
} // end main()
} // end class
//