From: <jen...@us...> - 2008-02-08 10:25:27
|
Revision: 529 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=529&view=rev Author: jenslehmann Date: 2008-02-08 02:25:23 -0800 (Fri, 08 Feb 2008) Log Message: ----------- added support for negative and decimal numbers Modified Paths: -------------- trunk/src/dl-learner/org/dllearner/examples/Carcinogenesis.java trunk/src/dl-learner/org/dllearner/parser/PrologParser.java trunk/src/dl-learner/org/dllearner/parser/PrologParserConstants.java trunk/src/dl-learner/org/dllearner/parser/PrologParserTokenManager.java trunk/src/dl-learner/org/dllearner/parser/prolog.jj Modified: trunk/src/dl-learner/org/dllearner/examples/Carcinogenesis.java =================================================================== --- trunk/src/dl-learner/org/dllearner/examples/Carcinogenesis.java 2008-02-08 09:04:00 UTC (rev 528) +++ trunk/src/dl-learner/org/dllearner/examples/Carcinogenesis.java 2008-02-08 10:25:23 UTC (rev 529) @@ -25,6 +25,7 @@ import org.dllearner.parser.ParseException; import org.dllearner.parser.PrologParser; +import org.dllearner.prolog.Program; import org.dllearner.utilities.Files; /** @@ -48,7 +49,8 @@ File file = new File(prologFile); String content = Files.readFile(file); PrologParser pp = new PrologParser(); - pp.parseProgram(content); + Program program = pp.parseProgram(content); + System.out.println(program.toPLString()); } catch (ParseException e) { e.printStackTrace(); } catch (FileNotFoundException e) { Modified: trunk/src/dl-learner/org/dllearner/parser/PrologParser.java =================================================================== --- trunk/src/dl-learner/org/dllearner/parser/PrologParser.java 2008-02-08 09:04:00 UTC (rev 528) +++ trunk/src/dl-learner/org/dllearner/parser/PrologParser.java 2008-02-08 10:25:23 UTC (rev 529) @@ -62,15 +62,15 @@ org.dllearner.prolog.Body body = null; head = atom(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 18: - jj_consume_token(18); + case 19: + jj_consume_token(19); body = body(); break; default: jj_la1[1] = jj_gen; ; } - jj_consume_token(19); + jj_consume_token(20); {if (true) return new org.dllearner.prolog.Clause(head, body);} throw new Error("Missing return statement in function"); } @@ -83,14 +83,14 @@ label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 20: + case 21: ; break; default: jj_la1[2] = jj_gen; break label_2; } - jj_consume_token(20); + jj_consume_token(21); l = literal(); b.addLiteral(l); } @@ -103,10 +103,10 @@ java.util.ArrayList arguments = new java.util.ArrayList() ; atom = jj_consume_token(IDENTIFIER); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 21: - jj_consume_token(21); + case 22: + jj_consume_token(22); arguments = termList(); - jj_consume_token(22); + jj_consume_token(23); break; default: jj_la1[3] = jj_gen; @@ -171,11 +171,12 @@ Token f; java.util.ArrayList arguments = null; org.dllearner.prolog.Term l; + org.dllearner.prolog.Number n; if (jj_2_5(2)) { f = jj_consume_token(IDENTIFIER); - jj_consume_token(21); + jj_consume_token(22); arguments = termList(); - jj_consume_token(22); + jj_consume_token(23); {if (true) return new org.dllearner.prolog.Function(f.image, arguments);} } else if (jj_2_6(2)) { f = jj_consume_token(IDENTIFIER); @@ -186,16 +187,16 @@ v = jj_consume_token(VAR); {if (true) return new org.dllearner.prolog.Variable(v.image);} break; - case NUMBER: - v = jj_consume_token(NUMBER); + case DOUBLE: + v = jj_consume_token(DOUBLE); {if (true) return new org.dllearner.prolog.Number(v.image);} break; case STRINGCONSTANT: v = jj_consume_token(STRINGCONSTANT); {if (true) return new org.dllearner.prolog.StringConstant(v.image);} break; - case 23: case 24: + case 25: l = list(); {if (true) return l;} break; @@ -237,14 +238,14 @@ label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 20: + case 21: ; break; default: jj_la1[6] = jj_gen; break label_3; } - jj_consume_token(20); + jj_consume_token(21); t = term(); l.add(t); } @@ -257,23 +258,23 @@ org.dllearner.prolog.Term head; org.dllearner.prolog.List l; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { - case 23: - jj_consume_token(23); + case 24: + jj_consume_token(24); {if (true) return new org.dllearner.prolog.List();} break; default: jj_la1[7] = jj_gen; if (jj_2_7(3)) { - jj_consume_token(24); + jj_consume_token(25); head = term(); - jj_consume_token(25); + jj_consume_token(26); {if (true) return new org.dllearner.prolog.List(head, null);} } else if (jj_2_8(3)) { - jj_consume_token(24); + jj_consume_token(25); head = term(); + jj_consume_token(27); + l = list(); jj_consume_token(26); - l = list(); - jj_consume_token(25); {if (true) return new org.dllearner.prolog.List(head, l);} } else { jj_consume_token(-1); @@ -355,7 +356,7 @@ } final private boolean jj_3R_10() { - if (jj_scan_token(NUMBER)) return true; + if (jj_scan_token(DOUBLE)) return true; return false; } @@ -369,20 +370,11 @@ return false; } - final private boolean jj_3_8() { - if (jj_scan_token(24)) return true; - if (jj_3R_8()) return true; - if (jj_scan_token(26)) return true; - if (jj_3R_14()) return true; - if (jj_scan_token(25)) return true; - return false; - } - final private boolean jj_3_5() { if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(21)) return true; + if (jj_scan_token(22)) return true; if (jj_3R_13()) return true; - if (jj_scan_token(22)) return true; + if (jj_scan_token(23)) return true; return false; } @@ -408,15 +400,24 @@ return false; } + final private boolean jj_3_8() { + if (jj_scan_token(25)) return true; + if (jj_3R_8()) return true; + if (jj_scan_token(27)) return true; + if (jj_3R_14()) return true; + if (jj_scan_token(26)) return true; + return false; + } + final private boolean jj_3_7() { - if (jj_scan_token(24)) return true; + if (jj_scan_token(25)) return true; if (jj_3R_8()) return true; - if (jj_scan_token(25)) return true; + if (jj_scan_token(26)) return true; return false; } final private boolean jj_3R_16() { - if (jj_scan_token(23)) return true; + if (jj_scan_token(24)) return true; return false; } @@ -439,7 +440,7 @@ } final private boolean jj_3R_15() { - if (jj_scan_token(20)) return true; + if (jj_scan_token(21)) return true; if (jj_3R_8()) return true; return false; } @@ -514,7 +515,7 @@ jj_la1_0(); } private static void jj_la1_0() { - jj_la1_0 = new int[] {0x1000,0x40000,0x100000,0x200000,0x1080,0x1800d00,0x100000,0x800000,}; + jj_la1_0 = new int[] {0x2000,0x80000,0x200000,0x400000,0x2080,0x3001900,0x200000,0x1000000,}; } final private JJCalls[] jj_2_rtns = new JJCalls[8]; private boolean jj_rescan = false; @@ -691,7 +692,7 @@ public ParseException generateParseException() { jj_expentries.removeAllElements(); - boolean[] la1tokens = new boolean[27]; + boolean[] la1tokens = new boolean[28]; if (jj_kind >= 0) { la1tokens[jj_kind] = true; jj_kind = -1; @@ -705,7 +706,7 @@ } } } - for (int i = 0; i < 27; i++) { + for (int i = 0; i < 28; i++) { if (la1tokens[i]) { jj_expentry = new int[1]; jj_expentry[0] = i; Modified: trunk/src/dl-learner/org/dllearner/parser/PrologParserConstants.java =================================================================== --- trunk/src/dl-learner/org/dllearner/parser/PrologParserConstants.java 2008-02-08 09:04:00 UTC (rev 528) +++ trunk/src/dl-learner/org/dllearner/parser/PrologParserConstants.java 2008-02-08 10:25:23 UTC (rev 529) @@ -6,16 +6,17 @@ int EOF = 0; int SINGLE_LINE_COMMENT = 6; int NOT = 7; - int NUMBER = 8; - int DIGIT = 9; - int STRINGCONSTANT = 10; - int VAR = 11; - int IDENTIFIER = 12; - int OPERATOR = 13; - int ANYCHAR = 14; - int LOCASE = 15; - int HICASE = 16; - int SPECIALCHAR = 17; + int DOUBLE = 8; + int NUMBER = 9; + int DIGIT = 10; + int STRINGCONSTANT = 11; + int VAR = 12; + int IDENTIFIER = 13; + int OPERATOR = 14; + int ANYCHAR = 15; + int LOCASE = 16; + int HICASE = 17; + int SPECIALCHAR = 18; int DEFAULT = 0; @@ -28,6 +29,7 @@ "\"\\f\"", "<SINGLE_LINE_COMMENT>", "\"not\"", + "<DOUBLE>", "<NUMBER>", "<DIGIT>", "<STRINGCONSTANT>", Modified: trunk/src/dl-learner/org/dllearner/parser/PrologParserTokenManager.java =================================================================== --- trunk/src/dl-learner/org/dllearner/parser/PrologParserTokenManager.java 2008-02-08 09:04:00 UTC (rev 528) +++ trunk/src/dl-learner/org/dllearner/parser/PrologParserTokenManager.java 2008-02-08 10:25:23 UTC (rev 529) @@ -12,16 +12,16 @@ case 0: if ((active0 & 0x80L) != 0L) { - jjmatchedKind = 12; - return 18; + jjmatchedKind = 13; + return 28; } return -1; case 1: if ((active0 & 0x80L) != 0L) { - jjmatchedKind = 12; + jjmatchedKind = 13; jjmatchedPos = 1; - return 18; + return 28; } return -1; default : @@ -51,24 +51,24 @@ switch(curChar) { case 40: - return jjStopAtPos(0, 21); + return jjStopAtPos(0, 22); case 41: - return jjStopAtPos(0, 22); + return jjStopAtPos(0, 23); case 44: + return jjStopAtPos(0, 21); + case 46: return jjStopAtPos(0, 20); - case 46: - return jjStopAtPos(0, 19); case 58: - return jjMoveStringLiteralDfa1_0(0x40000L); + return jjMoveStringLiteralDfa1_0(0x80000L); case 91: - jjmatchedKind = 24; - return jjMoveStringLiteralDfa1_0(0x800000L); + jjmatchedKind = 25; + return jjMoveStringLiteralDfa1_0(0x1000000L); case 93: - return jjStopAtPos(0, 25); + return jjStopAtPos(0, 26); case 110: return jjMoveStringLiteralDfa1_0(0x80L); case 124: - return jjStopAtPos(0, 26); + return jjStopAtPos(0, 27); default : return jjMoveNfa_0(0, 0); } @@ -83,12 +83,12 @@ switch(curChar) { case 45: - if ((active0 & 0x40000L) != 0L) - return jjStopAtPos(1, 18); + if ((active0 & 0x80000L) != 0L) + return jjStopAtPos(1, 19); break; case 93: - if ((active0 & 0x800000L) != 0L) - return jjStopAtPos(1, 23); + if ((active0 & 0x1000000L) != 0L) + return jjStopAtPos(1, 24); break; case 111: return jjMoveStringLiteralDfa2_0(active0, 0x80L); @@ -110,7 +110,7 @@ { case 116: if ((active0 & 0x80L) != 0L) - return jjStartNfaWithStates_0(2, 7, 18); + return jjStartNfaWithStates_0(2, 7, 28); break; default : break; @@ -154,7 +154,7 @@ { int[] nextStates; int startsAt = 0; - jjnewStateCnt = 18; + jjnewStateCnt = 28; int i = 1; jjstateSet[0] = startState; int j, kind = 0x7fffffff; @@ -169,18 +169,18 @@ { switch(jjstateSet[--i]) { - case 18: + case 28: if ((0x53ff2c0000000000L & l) != 0L) { - if (kind > 13) - kind = 13; - jjCheckNAdd(17); + if (kind > 14) + kind = 14; + jjCheckNAdd(16); } if ((0x3ff000000000000L & l) != 0L) { - if (kind > 12) - kind = 12; - jjCheckNAdd(15); + if (kind > 13) + kind = 13; + jjCheckNAdd(14); } break; case 0: @@ -188,24 +188,26 @@ { if (kind > 8) kind = 8; - jjCheckNAdd(5); + jjCheckNAddStates(0, 3); } else if ((0x50002c0000000000L & l) != 0L) { - if (kind > 13) - kind = 13; - jjCheckNAdd(17); + if (kind > 14) + kind = 14; + jjCheckNAdd(16); } else if (curChar == 34) - jjCheckNAddTwoStates(10, 11); + jjCheckNAddTwoStates(9, 10); else if (curChar == 39) - jjCheckNAddTwoStates(7, 8); + jjCheckNAddTwoStates(6, 7); else if (curChar == 37) - jjCheckNAddStates(0, 2); + jjCheckNAddStates(4, 6); + if (curChar == 45) + jjCheckNAddTwoStates(18, 21); break; case 1: if ((0xffffffffffffdbffL & l) != 0L) - jjCheckNAddStates(0, 2); + jjCheckNAddStates(4, 6); break; case 2: if ((0x2400L & l) != 0L && kind > 6) @@ -220,64 +222,125 @@ jjstateSet[jjnewStateCnt++] = 3; break; case 5: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 8) - kind = 8; - jjCheckNAdd(5); + if (curChar == 39) + jjCheckNAddTwoStates(6, 7); break; case 6: - if (curChar == 39) - jjCheckNAddTwoStates(7, 8); + if ((0xffffff7fffffdbffL & l) != 0L) + jjCheckNAddTwoStates(6, 7); break; case 7: - if ((0xffffff7fffffdbffL & l) != 0L) - jjCheckNAddTwoStates(7, 8); + if (curChar == 39 && kind > 11) + kind = 11; break; case 8: - if (curChar == 39 && kind > 10) - kind = 10; + if (curChar == 34) + jjCheckNAddTwoStates(9, 10); break; case 9: - if (curChar == 34) - jjCheckNAddTwoStates(10, 11); + if ((0xffffff7fffffdbffL & l) != 0L) + jjCheckNAddTwoStates(9, 10); break; case 10: - if ((0xffffff7fffffdbffL & l) != 0L) - jjCheckNAddTwoStates(10, 11); - break; - case 11: - if (curChar == 34 && kind > 10) - kind = 10; - break; - case 13: - if ((0x3ff000000000000L & l) == 0L) - break; - if (kind > 11) + if (curChar == 34 && kind > 11) kind = 11; - jjstateSet[jjnewStateCnt++] = 13; break; - case 15: + case 12: if ((0x3ff000000000000L & l) == 0L) break; if (kind > 12) kind = 12; - jjCheckNAdd(15); + jjstateSet[jjnewStateCnt++] = 12; break; - case 16: - if ((0x50002c0000000000L & l) == 0L) + case 14: + if ((0x3ff000000000000L & l) == 0L) break; if (kind > 13) kind = 13; - jjCheckNAdd(17); + jjCheckNAdd(14); break; - case 17: + case 15: + if ((0x50002c0000000000L & l) == 0L) + break; + if (kind > 14) + kind = 14; + jjCheckNAdd(16); + break; + case 16: if ((0x53ff2c0000000000L & l) == 0L) break; - if (kind > 13) - kind = 13; - jjCheckNAdd(17); + if (kind > 14) + kind = 14; + jjCheckNAdd(16); break; + case 17: + if (curChar == 45) + jjCheckNAddTwoStates(18, 21); + break; + case 18: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(18, 19); + break; + case 19: + if (curChar != 46) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(20); + break; + case 20: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(20); + break; + case 21: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(21); + break; + case 22: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 8) + kind = 8; + jjCheckNAddStates(0, 3); + break; + case 23: + if ((0x3ff000000000000L & l) != 0L) + jjCheckNAddTwoStates(23, 24); + break; + case 24: + if (curChar != 46) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(25); + break; + case 25: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(25); + break; + case 26: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 8) + kind = 8; + jjCheckNAdd(26); + break; + case 27: + if ((0x3ff000000000000L & l) == 0L) + break; + if (kind > 9) + kind = 9; + jjCheckNAdd(27); + break; default : break; } } while(i != startsAt); @@ -289,93 +352,93 @@ { switch(jjstateSet[--i]) { - case 18: + case 28: if ((0x7fffffec7fffffeL & l) != 0L) { - if (kind > 13) - kind = 13; - jjCheckNAdd(17); + if (kind > 14) + kind = 14; + jjCheckNAdd(16); } if ((0x7fffffe87fffffeL & l) != 0L) { - if (kind > 12) - kind = 12; - jjCheckNAdd(15); + if (kind > 13) + kind = 13; + jjCheckNAdd(14); } break; case 0: if ((0x7fffffe40000000L & l) != 0L) { - if (kind > 13) - kind = 13; - jjCheckNAdd(17); + if (kind > 14) + kind = 14; + jjCheckNAdd(16); } else if ((0x87fffffeL & l) != 0L) { - if (kind > 11) - kind = 11; - jjCheckNAdd(13); + if (kind > 12) + kind = 12; + jjCheckNAdd(12); } if ((0x7fffffe00000000L & l) != 0L) { - if (kind > 12) - kind = 12; - jjCheckNAdd(15); + if (kind > 13) + kind = 13; + jjCheckNAdd(14); } break; case 1: - jjAddStates(0, 2); + jjAddStates(4, 6); break; - case 7: + case 6: if ((0xffffffffefffffffL & l) != 0L) - jjAddStates(3, 4); + jjAddStates(7, 8); break; - case 10: + case 9: if ((0xffffffffefffffffL & l) != 0L) - jjAddStates(5, 6); + jjAddStates(9, 10); break; - case 12: + case 11: if ((0x87fffffeL & l) == 0L) break; - if (kind > 11) - kind = 11; - jjCheckNAdd(13); - break; - case 13: - if ((0x7fffffe87fffffeL & l) == 0L) - break; - if (kind > 11) - kind = 11; - jjCheckNAdd(13); - break; - case 14: - if ((0x7fffffe00000000L & l) == 0L) - break; if (kind > 12) kind = 12; - jjCheckNAdd(15); + jjCheckNAdd(12); break; - case 15: + case 12: if ((0x7fffffe87fffffeL & l) == 0L) break; if (kind > 12) kind = 12; - jjCheckNAdd(15); + jjCheckNAdd(12); break; - case 16: - if ((0x7fffffe40000000L & l) == 0L) + case 13: + if ((0x7fffffe00000000L & l) == 0L) break; if (kind > 13) kind = 13; - jjCheckNAdd(17); + jjCheckNAdd(14); break; - case 17: - if ((0x7fffffec7fffffeL & l) == 0L) + case 14: + if ((0x7fffffe87fffffeL & l) == 0L) break; if (kind > 13) kind = 13; - jjCheckNAdd(17); + jjCheckNAdd(14); break; + case 15: + if ((0x7fffffe40000000L & l) == 0L) + break; + if (kind > 14) + kind = 14; + jjCheckNAdd(16); + break; + case 16: + if ((0x7fffffec7fffffeL & l) == 0L) + break; + if (kind > 14) + kind = 14; + jjCheckNAdd(16); + break; default : break; } } while(i != startsAt); @@ -390,15 +453,15 @@ { case 1: if ((jjbitVec0[i2] & l2) != 0L) - jjAddStates(0, 2); + jjAddStates(4, 6); break; - case 7: + case 6: if ((jjbitVec0[i2] & l2) != 0L) - jjAddStates(3, 4); + jjAddStates(7, 8); break; - case 10: + case 9: if ((jjbitVec0[i2] & l2) != 0L) - jjAddStates(5, 6); + jjAddStates(9, 10); break; default : break; } @@ -411,24 +474,24 @@ kind = 0x7fffffff; } ++curPos; - if ((i = jjnewStateCnt) == (startsAt = 18 - (jjnewStateCnt = startsAt))) + if ((i = jjnewStateCnt) == (startsAt = 28 - (jjnewStateCnt = startsAt))) return curPos; try { curChar = input_stream.readChar(); } catch(java.io.IOException e) { return curPos; } } } static final int[] jjnextStates = { - 1, 2, 4, 7, 8, 10, 11, + 23, 24, 26, 27, 1, 2, 4, 6, 7, 9, 10, }; public static final String[] jjstrLiteralImages = { "", null, null, null, null, null, null, "\156\157\164", null, null, null, null, -null, null, null, null, null, null, "\72\55", "\56", "\54", "\50", "\51", +null, null, null, null, null, null, null, "\72\55", "\56", "\54", "\50", "\51", "\133\135", "\133", "\135", "\174", }; public static final String[] lexStateNames = { "DEFAULT", }; static final long[] jjtoToken = { - 0x7fc3d81L, + 0xff87b81L, }; static final long[] jjtoSkip = { 0x7eL, @@ -437,8 +500,8 @@ 0x40L, }; protected SimpleCharStream input_stream; -private final int[] jjrounds = new int[18]; -private final int[] jjstateSet = new int[36]; +private final int[] jjrounds = new int[28]; +private final int[] jjstateSet = new int[56]; protected char curChar; public PrologParserTokenManager(SimpleCharStream stream){ if (SimpleCharStream.staticFlag) @@ -460,7 +523,7 @@ { int i; jjround = 0x80000001; - for (i = 18; i-- > 0;) + for (i = 28; i-- > 0;) jjrounds[i] = 0x80000000; } public void ReInit(SimpleCharStream stream, int lexState) Modified: trunk/src/dl-learner/org/dllearner/parser/prolog.jj =================================================================== --- trunk/src/dl-learner/org/dllearner/parser/prolog.jj 2008-02-08 09:04:00 UTC (rev 528) +++ trunk/src/dl-learner/org/dllearner/parser/prolog.jj 2008-02-08 10:25:23 UTC (rev 529) @@ -84,7 +84,12 @@ TOKEN : /* constants */ { - < NUMBER: (<DIGIT>)+> + < DOUBLE: + "-" (<DIGIT>)+ "." (<DIGIT>)* | + (<DIGIT>)+ "." (<DIGIT>)* | + "-" (<DIGIT>)+ | + (<DIGIT>)+ > + | < NUMBER: (<DIGIT>)+> | < #DIGIT: ["0" - "9"] > | < STRINGCONSTANT: ("'" (~["'","\\","\n","\r"])* "'" | "\"" (~["'","\\","\n","\r"])* "\"" ) > } @@ -161,16 +166,16 @@ Token f; java.util.ArrayList arguments = null; org.dllearner.prolog.Term l; + org.dllearner.prolog.Number n; }{ LOOKAHEAD(2) f = <IDENTIFIER> "(" arguments = termList() ")" { return new org.dllearner.prolog.Function(f.image, arguments); } | LOOKAHEAD(2) f = <IDENTIFIER> { return new org.dllearner.prolog.PrologConstant(f.image); } | v = <VAR> { return new org.dllearner.prolog.Variable(v.image); } - | v = <NUMBER> { return new org.dllearner.prolog.Number(v.image); } + | v = <DOUBLE> { return new org.dllearner.prolog.Number(v.image); } | v = <STRINGCONSTANT> { return new org.dllearner.prolog.StringConstant(v.image); } | l = list() { return l; } } - String prefixOp() : { Token f; }{ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |