Why linking doesn't work in my Xtext-based DSL?
        Posted  
        
            by reprogrammer
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by reprogrammer
        
        
        
        Published on 2010-05-01T21:37:09Z
        Indexed on 
            2010/05/01
            23:37 UTC
        
        
        Read the original article
        Hit count: 382
        
The following is the Xtext grammar for my DSL.
Model:
  variableTypes=VariableTypes predicateTypes=PredicateTypes variableDeclarations=
  VariableDeclarations rules=Rules;
VariableType:
  name=ID;
VariableTypes:
  'var types' (variableTypes+=VariableType)+;
PredicateTypes:
  'predicate types' (predicateTypes+=PredicateType)+;
PredicateType:
  name=ID '(' (variableTypes+=[VariableType|ID])+ ')';
VariableDeclarations:
  'vars' (variableDeclarations+=VariableDeclaration)+;
VariableDeclaration:
  name=ID ':' type=[VariableType|ID];
Rules:
  'rules' (rules+=Rule)+;
Rule:
  head=Head ':-' body=Body;
Head:
  predicate=Predicate;
Body:
  (predicates+=Predicate)+;
Predicate:
  predicateType=[PredicateType|ID] '(' (terms+=Term)+ ')';
Term:
  variable=Variable;
Variable:
  variableDeclaration=[VariableDeclaration|ID];
terminal WS:
  (' ' | '\t' | '\r' | '\n' | ',')+;
And, the following is a program in the above DSL.
var types
  Node
predicate types
  Edge(Node, Node)
  Path(Node, Node)
vars
  x : Node
  y : Node
  z : Node
rules
  Path(x, y) :- Edge(x, y)
  Path(x, y) :- Path(x, z) Path(z, y)
When I used the generated Switch class to traverse the EMF object model corresponding to the above program, I realized that the nodes are not linked together properly. For example, the getPredicateType() method on a Predicate node returns null. Having read the Xtext user's guide, my impression is that the Xtext default linking semantics should work for my DSL. But, for some reason, the AST nodes of my DSL don't get linked together properly. Can anyone help me in diagnosing this problem? 
© Stack Overflow or respective owner