R-GReQL-Grammatik: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Zeile 83: Zeile 83:
## [[RightHandSide (R-GReQL)|RightHandSide]]
## [[RightHandSide (R-GReQL)|RightHandSide]]
# Block
# Block
## [[BodyStatements (R-GReQL)|BodyStatements]]
## [[BodyStatement (R-GReQL)|BodyStatement]]
# ForStatement
# ForStatement
## [[CountVariable (R-GReQL)|CountVariable]]
## [[CountVariable (R-GReQL)|CountVariable]]

Version vom 30. Juni 2017, 09:55 Uhr

In der Knotenstruktur kommen abstrakte Knoten vor. Das heißt, dass von ihnen keine direkten Instanzen im Graphen vorkommen, bzw. sie nicht instanziierbar sind, sie sind lediglich Oberklassen und dienen zur Vererbung und Knotenhierarchie. Die Knotenstruktur ist hierarchisch und mittels Vererbung aufgebaut. Sie wurde hier durch die Hierarchie der Überschriften dargestellt. Beispielsweise ist AssignmentOperator die Oberklasse von Left- bzw. RightAssignmentOperator, welche wiederum von den spezifischen Operatoren die Oberklassen sind. Dadurch lassen sich allgemeinere Abfragen erstellen. Will man also beispielsweise wissen, ob ein Zuweisungsoperator (egal welcher) verwendet wird, muss man lediglich einen AssignmentOperator in der GReQL-Anfrage verwenden.

Knoten

In dieser Grammatik sind abstrakte Knoten enthalten. Diese sind nicht instanziierbar und durch kursiven Titel kenntlich gemacht.

  1. Context
    1. Prog
      1. ParameterList
      2. AnonParameterList
      3. IndexList
      4. DoubleIndexList
      5. Indexing
  2. UnaryExpression
    1. Negative
    2. Positive
  3. Element
    1. Literal
      1. BooleanLiteral
      2. ComplexLiteral
      3. IntegerLiteral
      4. NumericLiteral
      5. StringLiteral
      6. NullLiteral
    2. ID
      1. FunctionCall
      2. Variable
    3. Operator
      1. ArithmeticOperator
        1. AddOperator
        2. SubOperator
        3. MulOperator
        4. DivOperator
        5. ExpOperator
        6. RemainderOperator
        7. FloorOperator
      2. RelationalOperator
        1. GreaterOperator
        2. LesserOperator
        3. GreaterEqOperator
        4. LesserEqOperator
        5. EqualOperator
        6. UnequalOperator
        7. InOperator
      3. LogicalOperator
        1. AndOperator
        2. OrOperator
        3. NotOperator
        4. AndOperatorFirstElement
        5. OrOperatorFirstElement
      4. AssignmentOperator
        1. LeftAssignmentOperator
          1. LeftAssignmentOperator1
          2. LeftAssignmentOperator2
          3. LeftAssignmentOperator3
          4. LeftAssignmentOperator4
        2. RightAssignmentOperator
          1. RightAssignmentOperator1
          2. RightAssignmentOperator2
      5. MiscOperator
        1. SequenceOperator
        2. MatrixMulOperator
        3. TildeOperator
    4. Statement
      1. Block
      2. IfStatement
      3. SwitchStatement
      4. Loop
        1. WhileStatement
        2. RepeatStatement
        3. ForStatement
      5. BreakStatement
      6. NextStatement
      7. Unsortiert
        1. AnonFunctionDeclaration
        2. NamedElement
        3. FunctionDeclaration
        4. ReturnStatement

Kanten

Im Folgenden werden alle Kanten beschrieben, sortiert nach den Knoten von denen sie ausgehen. Dort, wo keine eigene Kante vergeben wurde, wird eine "UniversalEdge" verwendet.

  1. AssignmentOperator
    1. LeftHandSide
    2. RightHandSide
  2. Block
    1. BodyStatement
  3. ForStatement
    1. CountVariable
    2. Set
    3. SetVariable
  4. FunctionCall
    1. List
  5. IfStatement
    1. Condition
    2. ElseBody
    3. ThenBody
  6. Node
    1. Expression
  7. ParameterList
    1. Parameter
  8. Prog
    1. ProgStatement
  9. Statement
    1. StatementBody