44import gnu .getopt .LongOpt ;
55
66import java .io .*;
7+ import java .nio .file .Files ;
78import java .util .Map .Entry ;
89import java .util .*;
910
2021public class PSOATransRunProlog
2122{
2223 private static PrologEngine _engine ;
23- private static boolean _outputTrans = false , _getAllAnswers = false ;
24+ private static boolean _outputTrans = false , _getAllAnswers = false , _showOrigKB = false ;
2425 private static PSOA2PrologConfig _config = new PSOA2PrologConfig ();
2526// private static int _maxDepth = 0;
2627
@@ -38,10 +39,12 @@ public static void main(String[] args) throws TranslatorException, IOException
3839// new LongOpt("termDep", LongOpt.REQUIRED_ARGUMENT, null, 'd'),
3940// new LongOpt("timeout", LongOpt.REQUIRED_ARGUMENT, null,'t'),
4041 new LongOpt ("repClass" , LongOpt .NO_ARGUMENT , null , 'r' ),
41- new LongOpt ("staticObj" , LongOpt .NO_ARGUMENT , null , 's' )
42+ new LongOpt ("staticOnly" , LongOpt .NO_ARGUMENT , null , 's' ),
43+ new LongOpt ("echoInput" , LongOpt .NO_ARGUMENT , null , 'e' )
4244 };
4345
44- Getopt optionsParser = new Getopt ("" , args , "?i:po:x:q:ad:t:rs" , opts );
46+ Getopt optionsParser = new Getopt ("" , args , "?i:po:x:q:ad:t:rse" , opts );
47+ File kbFile = null ;
4548 FileInputStream kbStream = null ,
4649 queryStream = null ;
4750// boolean outputTrans = false;
@@ -60,7 +63,8 @@ public static void main(String[] args) throws TranslatorException, IOException
6063 arg = optionsParser .getOptarg ();
6164 try
6265 {
63- kbStream = new FileInputStream (arg );
66+ kbFile = new File (arg );
67+ kbStream = new FileInputStream (kbFile );
6468 }
6569 catch (FileNotFoundException e )
6670 {
@@ -114,6 +118,8 @@ public static void main(String[] args) throws TranslatorException, IOException
114118 case 's' :
115119 _config .dynamicObjectification = false ;
116120 break ;
121+ case 'e' :
122+ _showOrigKB = true ;
117123 default :
118124 assert false ;
119125 }
@@ -168,6 +174,7 @@ else if (OS.isFamilyWindows())
168174
169175 PrologTranslator translator = new PrologTranslator (_config );
170176 String transKB = translator .translateKB (kbStream );
177+ // System.out.println("Translation finished.");
171178
172179 if (transKBFile == null )
173180 transKBFile = tmpFile ("tmp-" , ".pl" );
@@ -187,6 +194,22 @@ else if (OS.isFamilyWindows())
187194 writer .print (transKB );
188195 writer .close ();
189196
197+ if (_showOrigKB )
198+ {
199+ println ("Original KB:" );
200+ BufferedReader reader = new BufferedReader (new FileReader (kbFile ));
201+ do
202+ {
203+ String line = reader .readLine ();
204+ if (line != null )
205+ println (line );
206+ else
207+ break ;
208+ } while (true );
209+ reader .close ();
210+ println ();
211+ }
212+
190213 if (_outputTrans )
191214 {
192215 println ("Translated KB:" );
@@ -213,7 +236,7 @@ else if (OS.isFamilyWindows())
213236 {
214237 String transQuery = translator .translateQuery (queryStream );
215238
216- answerQuery (transQuery , translator . getQueryVarMap () );
239+ answerQuery (transQuery , translator );
217240 }
218241 else
219242 {
@@ -230,7 +253,7 @@ else if (OS.isFamilyWindows())
230253 try
231254 {
232255 String transQuery = translator .translateQuery (psoaQuery );
233- answerQuery (transQuery , translator . getQueryVarMap () );
256+ answerQuery (transQuery , translator );
234257 }
235258 catch (Exception e )
236259 {
@@ -246,7 +269,7 @@ else if (OS.isFamilyWindows())
246269 _engine .shutdown ();
247270 }
248271
249- private static void answerQuery (String transQuery , Map < String , String > queryVarMap )
272+ private static void answerQuery (String transQuery , PrologTranslator translator )
250273 {
251274 Set <Entry <String , String >> varMapEntries ;
252275 TermModel result ;
@@ -257,7 +280,7 @@ private static void answerQuery(String transQuery, Map<String, String> queryVarM
257280 println (transQuery + "." );
258281 println ();
259282 }
260- varMapEntries = queryVarMap .entrySet ();
283+ varMapEntries = translator . getQueryVarMap () .entrySet ();
261284
262285 println ("Answer(s):" );
263286 if (varMapEntries .isEmpty ())
@@ -287,7 +310,7 @@ else if (_getAllAnswers)
287310 {
288311 for (TermModel term : bindings .flatList ())
289312 {
290- ansBuilder .append (term );
313+ ansBuilder .append (translator . inverseTranslateTerm ( term . toString ()) );
291314 if (separator )
292315 ansBuilder .append ("," );
293316 separator = !separator ;
@@ -333,7 +356,7 @@ else if (_getAllAnswers)
333356 boolean separator = false ;
334357 for (TermModel term : m .flatList ())
335358 {
336- ansBuilder .append (term );
359+ ansBuilder .append (translator . inverseTranslateTerm ( term . toString ()) );
337360 if (separator )
338361 ansBuilder .append ("," );
339362 separator = !separator ;
@@ -355,19 +378,20 @@ else if (input.equals(""))
355378
356379 private static void printUsage ()
357380 {
358- println ("Usage: java -jar PSOATransRun.jar -i <kb> [-q <query> ] [-p] [-o <translated KB output>] [-x <xsb folder>]" );
381+ println ("Usage: java -jar PSOATransRun.jar -i <kb> [-e ] [-p] [-o <translated KB output>] [-q <query>] [-a] [-s ] [-x <xsb folder>]" );
359382 println ("Options:" );
360383 println (" -?,--help Print the help message" );
361384// println("");
362385 println (" -a,--allAns Retrieve all answers for each query at once" );
363386 println (" -i,--input Input Knowledge Base (KB)" );
387+ println (" -e,--echoInput Echo input KB to standard output" );
364388 println (" -q,--query Query document for the KB. If the query document" );
365389 println (" is not specified, the engine will read queries" );
366390 println (" from the standard input." );
367- println (" -p,--printTrans Print translated KB and queries to the standard output" );
391+ println (" -p,--printTrans Print translated KB and queries to standard output" );
368392 println (" -o,--outputTrans Save translated KB to the designated file" );
369393 println (" -x,--xsbfolder Specifies XSB installation folder. The default path is " );
370394 println (" obtained from the environment variable XSB_DIR" );
371- println (" -s,--staticObj Apply static objectification instead of the default dymanic objectification " );
395+ println (" -s,--staticOnly Apply static objectification only " );
372396 } // End printUsage()
373397}
0 commit comments