]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
collecting references in expression parser
authorniemisto <niemisto@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Tue, 12 Jan 2010 15:21:05 +0000 (15:21 +0000)
committerniemisto <niemisto@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Tue, 12 Jan 2010 15:21:05 +0000 (15:21 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@13487 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/ExpressionParser.jj
org.simantics.sysdyn/src/org/simantics/sysdyn/expressionParser/TestExpressionParser.java

index a4495209a7f2521bc0ff1f488aaf878d77313c14..285bfafba72322a71b35ed868f39abe0f67a34d3 100644 (file)
@@ -10,6 +10,11 @@ import java.util.List;
 import java.util.ArrayList;\r
 \r
 public class ExpressionParser {\r
+    List<List<String>> references = new ArrayList<List<String>>();\r
+    \r
+    public List<List<String>> getReferences() {\r
+        return references;\r
+    }\r
 }\r
 PARSER_END(ExpressionParser)\r
 \r
@@ -126,8 +131,10 @@ void primary() : {
   | <STRING>\r
   | "false"\r
   | "true"\r
-  |   LOOKAHEAD(2) name() function_call_args()\r
-  | component_reference()\r
+  |   LOOKAHEAD( name() "(" ) name() function_call_args()\r
+  | { List<String> reference = new ArrayList<String>(); } \r
+    component_reference(reference)\r
+    { references.add(reference); }\r
   // | "(" output_expression_list() ")"\r
   // | "[" expression_list() { ";" expression_list() } "]"\r
   //| "{" function_arguments() "}"\r
@@ -139,10 +146,11 @@ void name() : {
        <IDENT> ( "." name() )?\r
 }\r
 \r
-void component_reference() : {\r
+void component_reference(List<String> reference) : {\r
 } {\r
        //IDENT [ array_subscripts ] [ "." component_reference ]\r
-       <IDENT> ( "." component_reference() )?\r
+       <IDENT> { reference.add(token.image); } \r
+       ( "." component_reference(reference) )?\r
 }\r
 \r
 \r
index 0eefa89b3d279438882f5a34d7ed7a337183ea51..91a3d2472fcc30b320a7d280829d2ef1c194949f 100644 (file)
@@ -1,6 +1,7 @@
 package org.simantics.sysdyn.expressionParser;\r
 \r
 import java.io.StringReader;\r
+import java.util.List;\r
 \r
 public class TestExpressionParser {\r
     \r
@@ -10,6 +11,9 @@ public class TestExpressionParser {
         );\r
         try {\r
             parser.expr();\r
+            for(List<String> ref : parser.getReferences()) {\r
+                System.out.println(ref);\r
+            }\r
         } catch (ParseException e) {\r
             System.out.println("While parsing " + string + ":");\r
             // TODO Auto-generated catch block\r