summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/hastabel/LangParser.g453
-rw-r--r--src/hastabel/World.java18
2 files changed, 68 insertions, 3 deletions
diff --git a/src/hastabel/LangParser.g4 b/src/hastabel/LangParser.g4
index af6563c..6d881a9 100644
--- a/src/hastabel/LangParser.g4
+++ b/src/hastabel/LangParser.g4
@@ -45,7 +45,7 @@ lang_instr:
{
}
- | (WS)* ID (WS)* L_PAREN (WS)* ident_list (WS*) R_PAREN (WS)*
+ | (WS)* ID (WS)* L_PAREN (WS)* ident_or_string_list (WS*) R_PAREN (WS)*
{
final Predicate predicate;
final List<Element> params;
@@ -61,11 +61,25 @@ lang_instr:
{
params = new ArrayList<Element>();
- param_names = ($ident_list.list).iterator();
+ param_names = ($ident_or_string_list.list).iterator();
while (param_names.hasNext())
{
- params.add(WORLD.get_elements_manager().get(param_names.next()));
+ final String elem_name;
+
+ elem_name = param_names.next();
+
+ if (elem_name.startsWith("\""))
+ {
+ params.add
+ (
+ WORLD.get_strings_manager().get_string_as_element(elem_name)
+ );
+ }
+ else
+ {
+ params.add(WORLD.get_elements_manager().get(elem_name));
+ }
}
predicate.add_member(params);
@@ -279,3 +293,36 @@ ident_list returns [List<String> list]
$list = result;
}
;
+
+ident_or_string returns [String val]:
+ ID
+ {
+ $val = ($ID.text).replaceAll("\\.", "__");
+ }
+
+ | STRING
+ {
+ $val = ($STRING.text);
+ }
+;
+
+ident_or_string_list returns [List<String> list]
+ @init
+ {
+ final List<String> result = new ArrayList<String>();
+ }
+
+ :
+ first_element=ident_or_string
+ (
+ (WS)* COMMA (WS)* next_element=ident_or_string
+ {
+ result.add(($next_element.val));
+ }
+ )*
+ {
+ result.add(0, ($first_element.val));
+
+ $list = result;
+ }
+;
diff --git a/src/hastabel/World.java b/src/hastabel/World.java
index 1664e8b..898c61c 100644
--- a/src/hastabel/World.java
+++ b/src/hastabel/World.java
@@ -1,6 +1,7 @@
package hastabel;
import hastabel.lang.Type;
+import hastabel.lang.Formula;
import java.io.IOException;
@@ -54,6 +55,23 @@ public class World extends LogicWorld
return !is_erroneous;
}
+ public Formula load_property (final String filename)
+ throws IOException
+ {
+ final Formula result;
+ final CommonTokenStream tokens;
+ final PropertyLexer lexer;
+ final PropertyParser parser;
+
+ lexer = new PropertyLexer(CharStreams.fromFileName(filename));
+ tokens = new CommonTokenStream(lexer);
+ parser = new PropertyParser(tokens);
+
+ result = parser.tag_existing(this).result;
+
+ return result;
+ }
+
public void invalidate ()
{
is_erroneous = true;