Skip to content

BinaryOperators.sdf3

pdmosses/java-front/lang.java/syntax/java/expressions/BinaryOperators.sdf3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
module 

// 15.17. Multiplicative Operators
// 15.18. Additive Operators
// 15.19. Shift Operators
// 15.20. Relational Operators
// 15.21. Equality Operators
// 15.22. Bitwise and Logical Operators
// 15.23. Conditional-And Operator &&
// 15.24. Conditional-Or Operator ||

imports
  java/types/ReferenceTypes

context-free syntax

  . = <<Expression> * <Expression>> {left}
  . = <<Expression> / <Expression>> {left}
  . = <<Expression> % <Expression>> {left}

  .Add = <<Expression> + <Expression>> {left}
  .Sub = <<Expression> - <Expression>> {left}

  .LeftShift = [[Expression] << [Expression]] {left}
  .RightShift = [[Expression] >> [Expression]] {left}
  .URightShift = [[Expression] >>> [Expression]] {left}

  .Lt   = [[Expression] < [Expression]] {left}
  .Gt   = [[Expression] > [Expression]] {left}
  .LtEq = [[Expression] <= [Expression]] {left}
  .GtEq = [[Expression] >= [Expression]] {left}
  .InstanceOf = <<Expression> instanceof <ReferenceType>>

  .Eq    = <<Expression> == <Expression>> {left}
  .NotEq = <<Expression> != <Expression>> {left}

  .And = <<Expression> & <Expression>> {left}
  .Xor = <<Expression> ^ <Expression>> {left}
  .Or  = <<Expression> | <Expression>> {left}

  .LazyAnd = <<Expression> && <Expression>> {left}
  .LazyOr  = <<Expression> || <Expression>> {left}

  .Cond = <<Expression> ? <Expression> : <Expression>> {right}