summaryrefslogtreecommitdiff |
diff options
author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-24 18:26:27 +0200 |
---|---|---|
committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2018-05-24 18:26:27 +0200 |
commit | f49763c94d5a109d9cc63e5e8b22eb7cd28149af (patch) | |
tree | 9f1eb1ee1eade5f02a5a5b24023bfd377f1efcac /src | |
parent | 7b6bff2e715eadde73959a6897a955f9abaacb5d (diff) |
Strings are put as-is in the model.
Diffstat (limited to 'src')
-rw-r--r-- | src/hastabel/LangParser.g4 | 53 | ||||
-rw-r--r-- | src/hastabel/World.java | 18 |
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; |