diff --git a/prism/src/parser/PrismParser.java b/prism/src/parser/PrismParser.java index c98f0553..9cee997c 100644 --- a/prism/src/parser/PrismParser.java +++ b/prism/src/parser/PrismParser.java @@ -2,6 +2,7 @@ package parser; import java.io.*; +import java.util.List; import java.util.ArrayList; import parser.ast.*; @@ -236,13 +237,22 @@ public class PrismParser implements PrismParserConstants { return res; } - // Test a string to see if it is a PRISM language keyword - + /** + * Test a string to see if it is a PRISM language keyword. + */ public static boolean isKeyword(String s) { return keywordList.contains(s); } + /** + * Get access to the list of all PRISM language keywords. + */ + public static List getListOfKeywords() + { + return keywordList; + } + /** * Set the tab size used by the lexer/parser. */ @@ -2973,80 +2983,6 @@ public class PrismParser implements PrismParserConstants { finally { jj_save(11, xla); } } - static private boolean jj_3R_135() { - if (jj_3R_155()) return true; - return false; - } - - static private boolean jj_3R_160() { - if (jj_scan_token(MAX)) return true; - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; - return false; - } - - static private boolean jj_3R_64() { - if (jj_3R_66()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_67()) { jj_scanpos = xsp; break; } - } - return false; - } - - static private boolean jj_3R_138() { - if (jj_scan_token(RMAX)) return true; - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; - return false; - } - - static private boolean jj_3R_159() { - if (jj_scan_token(MIN)) return true; - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; - return false; - } - - static private boolean jj_3R_137() { - if (jj_scan_token(RMIN)) return true; - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; - return false; - } - - static private boolean jj_3R_158() { - if (jj_scan_token(EQ)) return true; - if (jj_scan_token(QMARK)) return true; - return false; - } - - static private boolean jj_3R_157() { - if (jj_3R_78()) return true; - if (jj_3R_34()) return true; - return false; - } - - static private boolean jj_3R_136() { - if (jj_scan_token(R)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_156()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_157()) { - jj_scanpos = xsp; - if (jj_3R_158()) { - jj_scanpos = xsp; - if (jj_3R_159()) { - jj_scanpos = xsp; - if (jj_3R_160()) return true; - } - } - } - return false; - } - static private boolean jj_3R_65() { if (jj_scan_token(OR)) return true; if (jj_3R_64()) return true; @@ -4169,6 +4105,80 @@ public class PrismParser implements PrismParserConstants { return false; } + static private boolean jj_3R_135() { + if (jj_3R_155()) return true; + return false; + } + + static private boolean jj_3R_160() { + if (jj_scan_token(MAX)) return true; + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + + static private boolean jj_3R_64() { + if (jj_3R_66()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_67()) { jj_scanpos = xsp; break; } + } + return false; + } + + static private boolean jj_3R_138() { + if (jj_scan_token(RMAX)) return true; + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + + static private boolean jj_3R_159() { + if (jj_scan_token(MIN)) return true; + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + + static private boolean jj_3R_137() { + if (jj_scan_token(RMIN)) return true; + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + + static private boolean jj_3R_158() { + if (jj_scan_token(EQ)) return true; + if (jj_scan_token(QMARK)) return true; + return false; + } + + static private boolean jj_3R_157() { + if (jj_3R_78()) return true; + if (jj_3R_34()) return true; + return false; + } + + static private boolean jj_3R_136() { + if (jj_scan_token(R)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_156()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_157()) { + jj_scanpos = xsp; + if (jj_3R_158()) { + jj_scanpos = xsp; + if (jj_3R_159()) { + jj_scanpos = xsp; + if (jj_3R_160()) return true; + } + } + } + return false; + } + static private boolean jj_initialized_once = false; /** Generated Token Manager. */ static public PrismParserTokenManager token_source; diff --git a/prism/src/parser/PrismParser.jj b/prism/src/parser/PrismParser.jj index 9ba93d14..536f6183 100644 --- a/prism/src/parser/PrismParser.jj +++ b/prism/src/parser/PrismParser.jj @@ -33,6 +33,7 @@ PARSER_BEGIN(PrismParser) package parser; import java.io.*; +import java.util.List; import java.util.ArrayList; import parser.ast.*; @@ -268,13 +269,22 @@ public class PrismParser return res; } - // Test a string to see if it is a PRISM language keyword - + /** + * Test a string to see if it is a PRISM language keyword. + */ public static boolean isKeyword(String s) { return keywordList.contains(s); } + /** + * Get access to the list of all PRISM language keywords. + */ + public static List getListOfKeywords() + { + return keywordList; + } + /** * Set the tab size used by the lexer/parser. */ diff --git a/prism/src/parser/PrismParserTokenManager.java b/prism/src/parser/PrismParserTokenManager.java index 5c8a059f..c91a7891 100644 --- a/prism/src/parser/PrismParserTokenManager.java +++ b/prism/src/parser/PrismParserTokenManager.java @@ -1,6 +1,7 @@ /* Generated By:JavaCC: Do not edit this line. PrismParserTokenManager.java */ package parser; import java.io.*; +import java.util.List; import java.util.ArrayList; import parser.ast.*; import parser.type.*; diff --git a/prism/src/prism/Prism.java b/prism/src/prism/Prism.java index f1db75be..eaee968f 100644 --- a/prism/src/prism/Prism.java +++ b/prism/src/prism/Prism.java @@ -657,6 +657,27 @@ public class Prism implements PrismSettingsListener return 0; } + /** + * Get access to the list of all PRISM language keywords. + */ + public static List getListOfKeyords() + { + try { + // obtain exclusive access to the prism parser + // (don't forget to release it afterwards) + try { + return getPrismParser().getListOfKeywords(); + } + finally { + // release prism parser + releasePrismParser(); + } + } + catch(InterruptedException ie) { + return null; + } + } + /** * Initialise PRISM. */ diff --git a/prism/src/prism/PrismCL.java b/prism/src/prism/PrismCL.java index 96ddafb8..a85b0dc2 100644 --- a/prism/src/prism/PrismCL.java +++ b/prism/src/prism/PrismCL.java @@ -27,6 +27,7 @@ package prism; import java.io.*; +import java.util.*; import parser.*; import parser.ast.*; @@ -913,6 +914,12 @@ public class PrismCL printVersion(); exit(); } + // print a list of all keywords (hidden option) + else if (sw.equals("keywords")) { + printListOfKeywords(); + exit(); + } + // property/properties given in command line else if (sw.equals("pctl") || sw.equals("csl")) { @@ -1635,7 +1642,7 @@ public class PrismCL else if (sw.equals("explicitbuildtest")) { explicitbuildtest = true; } - + // unknown switch - error else { errorAndExit("Invalid switch -" + sw + " (type \"prism -help\" for full list)"); @@ -1844,6 +1851,19 @@ public class PrismCL mainLog.println("PRISM version " + Prism.getVersion()); } + /** + * Print out a list of all PRISM language keywords. + */ + private void printListOfKeywords() + { + List list = Prism.getListOfKeyords(); + mainLog.print("PRISM keywords:"); + for (String s : list) { + mainLog.print(" " + s); + } + mainLog.println(); + } + // report (non-fatal) error private void error(String s)