0
  Γ := • expr [0-0]
  expr := • expr_function [0-0]
  expr_function := • { formals } : expr_function [0-0]
  expr_function := • { formals } @ ID : expr_function [0-0]
  expr_function := • expr_if [0-0]
  { := • "{" [0-0]
  expr_if := • expr_op [0-0]
  expr_op := • expr_op EQ expr_op [0-0]
  expr_op := • expr_op NEQ expr_op [0-0]
  expr_op := • expr_op < expr_op [0-0]
  expr_op := • expr_op LEQ expr_op [0-0]
  expr_op := • expr_op > expr_op [0-0]
  expr_op := • expr_op GEQ expr_op [0-0]
  expr_op := • expr_op AND expr_op [0-0]
  expr_op := • expr_op OR expr_op [0-0]
  expr_op := • expr_op IMPL expr_op [0-0]
  expr_op := • expr_op UPDATE expr_op [0-0]
  expr_op := • expr_op ? attrpath [0-0]
  expr_op := • expr_op + expr_op [0-0]
  expr_op := • expr_op - expr_op [0-0]
  expr_op := • expr_op * expr_op [0-0]
  expr_op := • expr_op / expr_op [0-0]
  expr_op := • expr_op CONCAT expr_op [0-0]
  expr_op := • expr_app [0-0]
  expr_app := • expr_app expr_select [0-0]
  expr_app := • expr_select [0-0]
  expr_select := • expr_simple . attrpath [0-0]
  expr_select := • expr_simple . attrpath OR_KW expr_select [0-0]
  expr_select := • expr_simple OR_KW [0-0]
  expr_select := • expr_simple [0-0]
  expr_simple := • { binds } [0-0]
1
  { := "{" • [0-1]
  expr_function := { • formals } : expr_function [0-1]
  expr_function := { • formals } @ ID : expr_function [0-1]
  expr_simple := { • binds } [0-1]
  formals := • formal , formals [1-1]
  formals := • formal [1-1]
  formals := • [1-1]
  binds := • binds attrpath = expr ; [1-1]
  binds := • binds INHERIT attrs ; [1-1]
  binds := • binds INHERIT ( expr ) attrs ; [1-1]
  binds := • [1-1]
  formal := • ID [1-1]
  formal := • ID ? expr [1-1]
  expr_function := { formals • } : expr_function [0-1]
  expr_function := { formals • } @ ID : expr_function [0-1]
  expr_simple := { binds • } [0-1]
  binds := binds • attrpath = expr ; [1-1]
  binds := binds • INHERIT attrs ; [1-1]
  binds := binds • INHERIT ( expr ) attrs ; [1-1]
  ID := • "ID" [1-1]
  attrpath := • attrpath . attr [1-1]
  attrpath := • attrpath . string_attr [1-1]
  attrpath := • attr [1-1]
  attr := • ID [1-1]
2
  ID := "ID" • [1-2]
  formal := ID • [1-2]
  formal := ID • ? expr [1-2]
  attr := ID • [1-2]
  formals := formal • , formals [1-2]
  formals := formal • [1-2]
  attrpath := attr • [1-2]
  , := • "," [2-2]
  expr_function := { formals • } : expr_function [0-2]
  expr_function := { formals • } @ ID : expr_function [0-2]
  binds := binds attrpath • = expr ; [1-2]
  attrpath := attrpath • . attr [1-2]
  attrpath := attrpath • . string_attr [1-2]
3
  , := "," • [2-3]
  formals := formal , • formals [1-3]
  formals := • formal , formals [3-3]
  formals := • formal [3-3]
  formals := • [3-3]
  formal := • ID [3-3]
  formal := • ID ? expr [3-3]
  formals := formal , formals • [1-3]
  ID := • "ID" [3-3]
  expr_function := { formals • } : expr_function [0-3]
  expr_function := { formals • } @ ID : expr_function [0-3]
4
  ID := "ID" • [3-4]
  formal := ID • [3-4]
  formal := ID • ? expr [3-4]
  formals := formal • , formals [3-4]
  formals := formal • [3-4]
  , := • "," [4-4]
  formals := formal , formals • [1-4]
  expr_function := { formals • } : expr_function [0-4]
  expr_function := { formals • } @ ID : expr_function [0-4]
5
  , := "," • [4-5]
  formals := formal , • formals [3-5]
  formals := • formal , formals [5-5]
  formals := • formal [5-5]
  formals := • [5-5]
  formal := • ID [5-5]
  formal := • ID ? expr [5-5]
  formals := formal , formals • [3-5]
  ID := • "ID" [5-5]
  formals := formal , formals • [1-5]
  expr_function := { formals • } : expr_function [0-5]
  expr_function := { formals • } @ ID : expr_function [0-5]
6
  ID := "ID" • [5-6]
  formal := ID • [5-6]
  formal := ID • ? expr [5-6]
  formals := formal • , formals [5-6]
  formals := formal • [5-6]
  , := • "," [6-6]
  formals := formal , formals • [3-6]
  formals := formal , formals • [1-6]
  expr_function := { formals • } : expr_function [0-6]
  expr_function := { formals • } @ ID : expr_function [0-6]
7
  , := "," • [6-7]
  formals := formal , • formals [5-7]
  formals := • formal , formals [7-7]
  formals := • formal [7-7]
  formals := • [7-7]
  formal := • ID [7-7]
  formal := • ID ? expr [7-7]
  formals := formal , formals • [5-7]
  ID := • "ID" [7-7]
  formals := formal , formals • [3-7]
  formals := formal , formals • [1-7]
  expr_function := { formals • } : expr_function [0-7]
  expr_function := { formals • } @ ID : expr_function [0-7]
8
  ID := "ID" • [7-8]
  formal := ID • [7-8]
  formal := ID • ? expr [7-8]
  formals := formal • , formals [7-8]
  formals := formal • [7-8]
  , := • "," [8-8]
  formals := formal , formals • [5-8]
  formals := formal , formals • [3-8]
  formals := formal , formals • [1-8]
  expr_function := { formals • } : expr_function [0-8]
  expr_function := { formals • } @ ID : expr_function [0-8]
9
  , := "," • [8-9]
  formals := formal , • formals [7-9]
  formals := • formal , formals [9-9]
  formals := • formal [9-9]
  formals := • [9-9]
  formal := • ID [9-9]
  formal := • ID ? expr [9-9]
  formals := formal , formals • [7-9]
  ID := • "ID" [9-9]
  formals := formal , formals • [5-9]
  formals := formal , formals • [3-9]
  formals := formal , formals • [1-9]
  expr_function := { formals • } : expr_function [0-9]
  expr_function := { formals • } @ ID : expr_function [0-9]
10
  ID := "ID" • [9-10]
  formal := ID • [9-10]
  formal := ID • ? expr [9-10]
  formals := formal • , formals [9-10]
  formals := formal • [9-10]
  , := • "," [10-10]
  formals := formal , formals • [7-10]
  formals := formal , formals • [5-10]
  formals := formal , formals • [3-10]
  formals := formal , formals • [1-10]
  expr_function := { formals • } : expr_function [0-10]
  expr_function := { formals • } @ ID : expr_function [0-10]
11
  , := "," • [10-11]
  formals := formal , • formals [9-11]
  formals := • [11-11]
  formals := formal , formals • [9-11]
  formals := formal , formals • [7-11]
  formals := formal , formals • [5-11]
  formals := formal , formals • [3-11]
  formals := formal , formals • [1-11]
  expr_function := { formals • } : expr_function [0-11]
  expr_function := { formals • } @ ID : expr_function [0-11]
  } := • "}" [11-11]
12
  } := "}" • [11-12]
  expr_function := { formals } • : expr_function [0-12]
  expr_function := { formals } • @ ID : expr_function [0-12]
  : := • ":" [12-12]
13
  : := ":" • [12-13]
  expr_function := { formals } : • expr_function [0-13]
  expr_function := • ID : expr_function [13-13]
  expr_function := • ID @ { formals } : expr_function [13-13]
  expr_function := • expr_if [13-13]
  ID := • "ID" [13-13]
  expr_if := • expr_op [13-13]
  expr_op := • expr_op EQ expr_op [13-13]
  expr_op := • expr_op NEQ expr_op [13-13]
  expr_op := • expr_op < expr_op [13-13]
  expr_op := • expr_op LEQ expr_op [13-13]
  expr_op := • expr_op > expr_op [13-13]
  expr_op := • expr_op GEQ expr_op [13-13]
  expr_op := • expr_op AND expr_op [13-13]
  expr_op := • expr_op OR expr_op [13-13]
  expr_op := • expr_op IMPL expr_op [13-13]
  expr_op := • expr_op UPDATE expr_op [13-13]
  expr_op := • expr_op ? attrpath [13-13]
  expr_op := • expr_op + expr_op [13-13]
  expr_op := • expr_op - expr_op [13-13]
  expr_op := • expr_op * expr_op [13-13]
  expr_op := • expr_op / expr_op [13-13]
  expr_op := • expr_op CONCAT expr_op [13-13]
  expr_op := • expr_app [13-13]
  expr_app := • expr_app expr_select [13-13]
  expr_app := • expr_select [13-13]
  expr_select := • expr_simple . attrpath [13-13]
  expr_select := • expr_simple . attrpath OR_KW expr_select [13-13]
  expr_select := • expr_simple OR_KW [13-13]
  expr_select := • expr_simple [13-13]
  expr_simple := • ID [13-13]
14
  ID := "ID" • [13-14]
  expr_function := ID • : expr_function [13-14]
  expr_function := ID • @ { formals } : expr_function [13-14]
  expr_simple := ID • [13-14]
  expr_select := expr_simple • . attrpath [13-14]
  expr_select := expr_simple • . attrpath OR_KW expr_select [13-14]
  expr_select := expr_simple • OR_KW [13-14]
  expr_select := expr_simple • [13-14]
  . := • "." [14-14]
  expr_app := expr_select • [13-14]
  expr_op := expr_app • [13-14]
  expr_app := expr_app • expr_select [13-14]
  expr_if := expr_op • [13-14]
  expr_op := expr_op • EQ expr_op [13-14]
  expr_op := expr_op • NEQ expr_op [13-14]
  expr_op := expr_op • < expr_op [13-14]
  expr_op := expr_op • LEQ expr_op [13-14]
  expr_op := expr_op • > expr_op [13-14]
  expr_op := expr_op • GEQ expr_op [13-14]
  expr_op := expr_op • AND expr_op [13-14]
  expr_op := expr_op • OR expr_op [13-14]
  expr_op := expr_op • IMPL expr_op [13-14]
  expr_op := expr_op • UPDATE expr_op [13-14]
  expr_op := expr_op • ? attrpath [13-14]
  expr_op := expr_op • + expr_op [13-14]
  expr_op := expr_op • - expr_op [13-14]
  expr_op := expr_op • * expr_op [13-14]
  expr_op := expr_op • / expr_op [13-14]
  expr_op := expr_op • CONCAT expr_op [13-14]
  expr_function := expr_if • [13-14]
  expr_function := { formals } : expr_function • [0-14]
  expr := expr_function • [0-14]
  Γ := expr • [0-14]
15
  . := "." • [14-15]
  expr_select := expr_simple . • attrpath [13-15]
  expr_select := expr_simple . • attrpath OR_KW expr_select [13-15]
  attrpath := • attrpath . attr [15-15]
  attrpath := • attrpath . string_attr [15-15]
  attrpath := • attr [15-15]
  attr := • ID [15-15]
  ID := • "ID" [15-15]
16
  ID := "ID" • [15-16]
  attr := ID • [15-16]
  attrpath := attr • [15-16]
  expr_select := expr_simple . attrpath • [13-16]
  expr_select := expr_simple . attrpath • OR_KW expr_select [13-16]
  attrpath := attrpath • . attr [15-16]
  attrpath := attrpath • . string_attr [15-16]
  expr_app := expr_select • [13-16]
  expr_op := expr_app • [13-16]
  expr_app := expr_app • expr_select [13-16]
  expr_if := expr_op • [13-16]
  expr_op := expr_op • EQ expr_op [13-16]
  expr_op := expr_op • NEQ expr_op [13-16]
  expr_op := expr_op • < expr_op [13-16]
  expr_op := expr_op • LEQ expr_op [13-16]
  expr_op := expr_op • > expr_op [13-16]
  expr_op := expr_op • GEQ expr_op [13-16]
  expr_op := expr_op • AND expr_op [13-16]
  expr_op := expr_op • OR expr_op [13-16]
  expr_op := expr_op • IMPL expr_op [13-16]
  expr_op := expr_op • UPDATE expr_op [13-16]
  expr_op := expr_op • ? attrpath [13-16]
  expr_op := expr_op • + expr_op [13-16]
  expr_op := expr_op • - expr_op [13-16]
  expr_op := expr_op • * expr_op [13-16]
  expr_op := expr_op • / expr_op [13-16]
  expr_op := expr_op • CONCAT expr_op [13-16]
  expr_select := • expr_simple . attrpath [16-16]
  expr_select := • expr_simple . attrpath OR_KW expr_select [16-16]
  expr_select := • expr_simple OR_KW [16-16]
  expr_select := • expr_simple [16-16]
  expr_function := expr_if • [13-16]
  expr_simple := • REC { binds } [16-16]
  expr_function := { formals } : expr_function • [0-16]
  REC := • "REC" [16-16]
  expr := expr_function • [0-16]
  Γ := expr • [0-16]
17
  REC := "REC" • [16-17]
  expr_simple := REC • { binds } [16-17]
  { := • "{" [17-17]
18
  { := "{" • [17-18]
  expr_simple := REC { • binds } [16-18]
  binds := • binds attrpath = expr ; [18-18]
  binds := • binds INHERIT attrs ; [18-18]
  binds := • binds INHERIT ( expr ) attrs ; [18-18]
  binds := • [18-18]
  expr_simple := REC { binds • } [16-18]
  binds := binds • attrpath = expr ; [18-18]
  binds := binds • INHERIT attrs ; [18-18]
  binds := binds • INHERIT ( expr ) attrs ; [18-18]
  attrpath := • attrpath . attr [18-18]
  attrpath := • attrpath . string_attr [18-18]
  attrpath := • attr [18-18]
  attr := • ID [18-18]
  ID := • "ID" [18-18]
19
  ID := "ID" • [18-19]
  attr := ID • [18-19]
  attrpath := attr • [18-19]
  binds := binds attrpath • = expr ; [18-19]
  attrpath := attrpath • . attr [18-19]
  attrpath := attrpath • . string_attr [18-19]
  = := • "=" [19-19]
20
  = := "=" • [19-20]
  binds := binds attrpath = • expr ; [18-20]
  expr := • expr_function [20-20]
  expr_function := • expr_if [20-20]
  expr_if := • expr_op [20-20]
  expr_op := • expr_op EQ expr_op [20-20]
  expr_op := • expr_op NEQ expr_op [20-20]
  expr_op := • expr_op < expr_op [20-20]
  expr_op := • expr_op LEQ expr_op [20-20]
  expr_op := • expr_op > expr_op [20-20]
  expr_op := • expr_op GEQ expr_op [20-20]
  expr_op := • expr_op AND expr_op [20-20]
  expr_op := • expr_op OR expr_op [20-20]
  expr_op := • expr_op IMPL expr_op [20-20]
  expr_op := • expr_op UPDATE expr_op [20-20]
  expr_op := • expr_op ? attrpath [20-20]
  expr_op := • expr_op + expr_op [20-20]
  expr_op := • expr_op - expr_op [20-20]
  expr_op := • expr_op * expr_op [20-20]
  expr_op := • expr_op / expr_op [20-20]
  expr_op := • expr_op CONCAT expr_op [20-20]
  expr_op := • expr_app [20-20]
  expr_app := • expr_app expr_select [20-20]
  expr_app := • expr_select [20-20]
  expr_select := • expr_simple . attrpath [20-20]
  expr_select := • expr_simple . attrpath OR_KW expr_select [20-20]
  expr_select := • expr_simple OR_KW [20-20]
  expr_select := • expr_simple [20-20]
  expr_simple := • " string_parts " [20-20]
  " := • "\"" [20-20]
21
  " := "\"" • [20-21]
  expr_simple := " • string_parts " [20-21]
  string_parts := • STR [21-21]
  string_parts := • string_parts_interpolated [21-21]
  string_parts := • [21-21]
  STR := • "STR" [21-21]
  string_parts_interpolated := • string_parts_interpolated STR [21-21]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [21-21]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [21-21]
  expr_simple := " string_parts • " [20-21]
22
  STR := "STR" • [21-22]
  string_parts := STR • [21-22]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [21-22]
  expr_simple := " string_parts • " [20-22]
  " := • "\"" [22-22]
23
  " := "\"" • [22-23]
  expr_simple := " string_parts " • [20-23]
  expr_select := expr_simple • . attrpath [20-23]
  expr_select := expr_simple • . attrpath OR_KW expr_select [20-23]
  expr_select := expr_simple • OR_KW [20-23]
  expr_select := expr_simple • [20-23]
  expr_app := expr_select • [20-23]
  expr_op := expr_app • [20-23]
  expr_app := expr_app • expr_select [20-23]
  expr_if := expr_op • [20-23]
  expr_op := expr_op • EQ expr_op [20-23]
  expr_op := expr_op • NEQ expr_op [20-23]
  expr_op := expr_op • < expr_op [20-23]
  expr_op := expr_op • LEQ expr_op [20-23]
  expr_op := expr_op • > expr_op [20-23]
  expr_op := expr_op • GEQ expr_op [20-23]
  expr_op := expr_op • AND expr_op [20-23]
  expr_op := expr_op • OR expr_op [20-23]
  expr_op := expr_op • IMPL expr_op [20-23]
  expr_op := expr_op • UPDATE expr_op [20-23]
  expr_op := expr_op • ? attrpath [20-23]
  expr_op := expr_op • + expr_op [20-23]
  expr_op := expr_op • - expr_op [20-23]
  expr_op := expr_op • * expr_op [20-23]
  expr_op := expr_op • / expr_op [20-23]
  expr_op := expr_op • CONCAT expr_op [20-23]
  expr_function := expr_if • [20-23]
  expr := expr_function • [20-23]
  binds := binds attrpath = expr • ; [18-23]
  ; := • ";" [23-23]
24
  ; := ";" • [23-24]
  binds := binds attrpath = expr ; • [18-24]
  expr_simple := REC { binds • } [16-24]
  binds := binds • attrpath = expr ; [18-24]
  binds := binds • INHERIT attrs ; [18-24]
  binds := binds • INHERIT ( expr ) attrs ; [18-24]
  attrpath := • attrpath . attr [24-24]
  attrpath := • attrpath . string_attr [24-24]
  attrpath := • attr [24-24]
  attr := • ID [24-24]
  ID := • "ID" [24-24]
25
  ID := "ID" • [24-25]
  attr := ID • [24-25]
  attrpath := attr • [24-25]
  binds := binds attrpath • = expr ; [18-25]
  attrpath := attrpath • . attr [24-25]
  attrpath := attrpath • . string_attr [24-25]
  = := • "=" [25-25]
26
  = := "=" • [25-26]
  binds := binds attrpath = • expr ; [18-26]
  expr := • expr_function [26-26]
  expr_function := • expr_if [26-26]
  expr_if := • expr_op [26-26]
  expr_op := • expr_op EQ expr_op [26-26]
  expr_op := • expr_op NEQ expr_op [26-26]
  expr_op := • expr_op < expr_op [26-26]
  expr_op := • expr_op LEQ expr_op [26-26]
  expr_op := • expr_op > expr_op [26-26]
  expr_op := • expr_op GEQ expr_op [26-26]
  expr_op := • expr_op AND expr_op [26-26]
  expr_op := • expr_op OR expr_op [26-26]
  expr_op := • expr_op IMPL expr_op [26-26]
  expr_op := • expr_op UPDATE expr_op [26-26]
  expr_op := • expr_op ? attrpath [26-26]
  expr_op := • expr_op + expr_op [26-26]
  expr_op := • expr_op - expr_op [26-26]
  expr_op := • expr_op * expr_op [26-26]
  expr_op := • expr_op / expr_op [26-26]
  expr_op := • expr_op CONCAT expr_op [26-26]
  expr_op := • expr_app [26-26]
  expr_app := • expr_app expr_select [26-26]
  expr_app := • expr_select [26-26]
  expr_select := • expr_simple . attrpath [26-26]
  expr_select := • expr_simple . attrpath OR_KW expr_select [26-26]
  expr_select := • expr_simple OR_KW [26-26]
  expr_select := • expr_simple [26-26]
  expr_simple := • " string_parts " [26-26]
  " := • "\"" [26-26]
27
  " := "\"" • [26-27]
  expr_simple := " • string_parts " [26-27]
  string_parts := • STR [27-27]
  string_parts := • string_parts_interpolated [27-27]
  string_parts := • [27-27]
  STR := • "STR" [27-27]
  string_parts_interpolated := • string_parts_interpolated STR [27-27]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [27-27]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [27-27]
  expr_simple := " string_parts • " [26-27]
28
  STR := "STR" • [27-28]
  string_parts := STR • [27-28]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [27-28]
  expr_simple := " string_parts • " [26-28]
  " := • "\"" [28-28]
29
  " := "\"" • [28-29]
  expr_simple := " string_parts " • [26-29]
  expr_select := expr_simple • . attrpath [26-29]
  expr_select := expr_simple • . attrpath OR_KW expr_select [26-29]
  expr_select := expr_simple • OR_KW [26-29]
  expr_select := expr_simple • [26-29]
  expr_app := expr_select • [26-29]
  expr_op := expr_app • [26-29]
  expr_app := expr_app • expr_select [26-29]
  expr_if := expr_op • [26-29]
  expr_op := expr_op • EQ expr_op [26-29]
  expr_op := expr_op • NEQ expr_op [26-29]
  expr_op := expr_op • < expr_op [26-29]
  expr_op := expr_op • LEQ expr_op [26-29]
  expr_op := expr_op • > expr_op [26-29]
  expr_op := expr_op • GEQ expr_op [26-29]
  expr_op := expr_op • AND expr_op [26-29]
  expr_op := expr_op • OR expr_op [26-29]
  expr_op := expr_op • IMPL expr_op [26-29]
  expr_op := expr_op • UPDATE expr_op [26-29]
  expr_op := expr_op • ? attrpath [26-29]
  expr_op := expr_op • + expr_op [26-29]
  expr_op := expr_op • - expr_op [26-29]
  expr_op := expr_op • * expr_op [26-29]
  expr_op := expr_op • / expr_op [26-29]
  expr_op := expr_op • CONCAT expr_op [26-29]
  expr_function := expr_if • [26-29]
  expr := expr_function • [26-29]
  binds := binds attrpath = expr • ; [18-29]
  ; := • ";" [29-29]
30
  ; := ";" • [29-30]
  binds := binds attrpath = expr ; • [18-30]
  expr_simple := REC { binds • } [16-30]
  binds := binds • attrpath = expr ; [18-30]
  binds := binds • INHERIT attrs ; [18-30]
  binds := binds • INHERIT ( expr ) attrs ; [18-30]
  attrpath := • attrpath . attr [30-30]
  attrpath := • attrpath . string_attr [30-30]
  attrpath := • attr [30-30]
  attr := • ID [30-30]
  ID := • "ID" [30-30]
31
  ID := "ID" • [30-31]
  attr := ID • [30-31]
  attrpath := attr • [30-31]
  binds := binds attrpath • = expr ; [18-31]
  attrpath := attrpath • . attr [30-31]
  attrpath := attrpath • . string_attr [30-31]
  = := • "=" [31-31]
32
  = := "=" • [31-32]
  binds := binds attrpath = • expr ; [18-32]
  expr := • expr_function [32-32]
  expr_function := • ID : expr_function [32-32]
  expr_function := • ID @ { formals } : expr_function [32-32]
  expr_function := • expr_if [32-32]
  ID := • "ID" [32-32]
  expr_if := • expr_op [32-32]
  expr_op := • expr_op EQ expr_op [32-32]
  expr_op := • expr_op NEQ expr_op [32-32]
  expr_op := • expr_op < expr_op [32-32]
  expr_op := • expr_op LEQ expr_op [32-32]
  expr_op := • expr_op > expr_op [32-32]
  expr_op := • expr_op GEQ expr_op [32-32]
  expr_op := • expr_op AND expr_op [32-32]
  expr_op := • expr_op OR expr_op [32-32]
  expr_op := • expr_op IMPL expr_op [32-32]
  expr_op := • expr_op UPDATE expr_op [32-32]
  expr_op := • expr_op ? attrpath [32-32]
  expr_op := • expr_op + expr_op [32-32]
  expr_op := • expr_op - expr_op [32-32]
  expr_op := • expr_op * expr_op [32-32]
  expr_op := • expr_op / expr_op [32-32]
  expr_op := • expr_op CONCAT expr_op [32-32]
  expr_op := • expr_app [32-32]
  expr_app := • expr_app expr_select [32-32]
  expr_app := • expr_select [32-32]
  expr_select := • expr_simple . attrpath [32-32]
  expr_select := • expr_simple . attrpath OR_KW expr_select [32-32]
  expr_select := • expr_simple OR_KW [32-32]
  expr_select := • expr_simple [32-32]
  expr_simple := • ID [32-32]
33
  ID := "ID" • [32-33]
  expr_function := ID • : expr_function [32-33]
  expr_function := ID • @ { formals } : expr_function [32-33]
  expr_simple := ID • [32-33]
  expr_select := expr_simple • . attrpath [32-33]
  expr_select := expr_simple • . attrpath OR_KW expr_select [32-33]
  expr_select := expr_simple • OR_KW [32-33]
  expr_select := expr_simple • [32-33]
  expr_app := expr_select • [32-33]
  expr_op := expr_app • [32-33]
  expr_app := expr_app • expr_select [32-33]
  expr_if := expr_op • [32-33]
  expr_op := expr_op • EQ expr_op [32-33]
  expr_op := expr_op • NEQ expr_op [32-33]
  expr_op := expr_op • < expr_op [32-33]
  expr_op := expr_op • LEQ expr_op [32-33]
  expr_op := expr_op • > expr_op [32-33]
  expr_op := expr_op • GEQ expr_op [32-33]
  expr_op := expr_op • AND expr_op [32-33]
  expr_op := expr_op • OR expr_op [32-33]
  expr_op := expr_op • IMPL expr_op [32-33]
  expr_op := expr_op • UPDATE expr_op [32-33]
  expr_op := expr_op • ? attrpath [32-33]
  expr_op := expr_op • + expr_op [32-33]
  expr_op := expr_op • - expr_op [32-33]
  expr_op := expr_op • * expr_op [32-33]
  expr_op := expr_op • / expr_op [32-33]
  expr_op := expr_op • CONCAT expr_op [32-33]
  expr_select := • expr_simple . attrpath [33-33]
  expr_select := • expr_simple . attrpath OR_KW expr_select [33-33]
  expr_select := • expr_simple OR_KW [33-33]
  expr_select := • expr_simple [33-33]
  expr_function := expr_if • [32-33]
  expr_simple := • { binds } [33-33]
  expr := expr_function • [32-33]
  { := • "{" [33-33]
  binds := binds attrpath = expr • ; [18-33]
34
  { := "{" • [33-34]
  expr_simple := { • binds } [33-34]
  binds := • binds attrpath = expr ; [34-34]
  binds := • binds INHERIT attrs ; [34-34]
  binds := • binds INHERIT ( expr ) attrs ; [34-34]
  binds := • [34-34]
  expr_simple := { binds • } [33-34]
  binds := binds • attrpath = expr ; [34-34]
  binds := binds • INHERIT attrs ; [34-34]
  binds := binds • INHERIT ( expr ) attrs ; [34-34]
  attrpath := • attrpath . attr [34-34]
  attrpath := • attrpath . string_attr [34-34]
  attrpath := • attr [34-34]
  attr := • ID [34-34]
  ID := • "ID" [34-34]
35
  ID := "ID" • [34-35]
  attr := ID • [34-35]
  attrpath := attr • [34-35]
  binds := binds attrpath • = expr ; [34-35]
  attrpath := attrpath • . attr [34-35]
  attrpath := attrpath • . string_attr [34-35]
  = := • "=" [35-35]
36
  = := "=" • [35-36]
  binds := binds attrpath = • expr ; [34-36]
  expr := • expr_function [36-36]
  expr_function := • expr_if [36-36]
  expr_if := • expr_op [36-36]
  expr_op := • expr_op EQ expr_op [36-36]
  expr_op := • expr_op NEQ expr_op [36-36]
  expr_op := • expr_op < expr_op [36-36]
  expr_op := • expr_op LEQ expr_op [36-36]
  expr_op := • expr_op > expr_op [36-36]
  expr_op := • expr_op GEQ expr_op [36-36]
  expr_op := • expr_op AND expr_op [36-36]
  expr_op := • expr_op OR expr_op [36-36]
  expr_op := • expr_op IMPL expr_op [36-36]
  expr_op := • expr_op UPDATE expr_op [36-36]
  expr_op := • expr_op ? attrpath [36-36]
  expr_op := • expr_op + expr_op [36-36]
  expr_op := • expr_op - expr_op [36-36]
  expr_op := • expr_op * expr_op [36-36]
  expr_op := • expr_op / expr_op [36-36]
  expr_op := • expr_op CONCAT expr_op [36-36]
  expr_op := • expr_app [36-36]
  expr_app := • expr_app expr_select [36-36]
  expr_app := • expr_select [36-36]
  expr_select := • expr_simple . attrpath [36-36]
  expr_select := • expr_simple . attrpath OR_KW expr_select [36-36]
  expr_select := • expr_simple OR_KW [36-36]
  expr_select := • expr_simple [36-36]
  expr_simple := • " string_parts " [36-36]
  " := • "\"" [36-36]
37
  " := "\"" • [36-37]
  expr_simple := " • string_parts " [36-37]
  string_parts := • STR [37-37]
  string_parts := • string_parts_interpolated [37-37]
  string_parts := • [37-37]
  STR := • "STR" [37-37]
  string_parts_interpolated := • string_parts_interpolated STR [37-37]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [37-37]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [37-37]
  expr_simple := " string_parts • " [36-37]
38
  STR := "STR" • [37-38]
  string_parts := STR • [37-38]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [37-38]
  expr_simple := " string_parts • " [36-38]
  " := • "\"" [38-38]
39
  " := "\"" • [38-39]
  expr_simple := " string_parts " • [36-39]
  expr_select := expr_simple • . attrpath [36-39]
  expr_select := expr_simple • . attrpath OR_KW expr_select [36-39]
  expr_select := expr_simple • OR_KW [36-39]
  expr_select := expr_simple • [36-39]
  expr_app := expr_select • [36-39]
  expr_op := expr_app • [36-39]
  expr_app := expr_app • expr_select [36-39]
  expr_if := expr_op • [36-39]
  expr_op := expr_op • EQ expr_op [36-39]
  expr_op := expr_op • NEQ expr_op [36-39]
  expr_op := expr_op • < expr_op [36-39]
  expr_op := expr_op • LEQ expr_op [36-39]
  expr_op := expr_op • > expr_op [36-39]
  expr_op := expr_op • GEQ expr_op [36-39]
  expr_op := expr_op • AND expr_op [36-39]
  expr_op := expr_op • OR expr_op [36-39]
  expr_op := expr_op • IMPL expr_op [36-39]
  expr_op := expr_op • UPDATE expr_op [36-39]
  expr_op := expr_op • ? attrpath [36-39]
  expr_op := expr_op • + expr_op [36-39]
  expr_op := expr_op • - expr_op [36-39]
  expr_op := expr_op • * expr_op [36-39]
  expr_op := expr_op • / expr_op [36-39]
  expr_op := expr_op • CONCAT expr_op [36-39]
  expr_function := expr_if • [36-39]
  expr := expr_function • [36-39]
  binds := binds attrpath = expr • ; [34-39]
  ; := • ";" [39-39]
40
  ; := ";" • [39-40]
  binds := binds attrpath = expr ; • [34-40]
  expr_simple := { binds • } [33-40]
  binds := binds • attrpath = expr ; [34-40]
  binds := binds • INHERIT attrs ; [34-40]
  binds := binds • INHERIT ( expr ) attrs ; [34-40]
  attrpath := • attrpath . attr [40-40]
  attrpath := • attrpath . string_attr [40-40]
  attrpath := • attr [40-40]
  attr := • ID [40-40]
  ID := • "ID" [40-40]
41
  ID := "ID" • [40-41]
  attr := ID • [40-41]
  attrpath := attr • [40-41]
  binds := binds attrpath • = expr ; [34-41]
  attrpath := attrpath • . attr [40-41]
  attrpath := attrpath • . string_attr [40-41]
  = := • "=" [41-41]
42
  = := "=" • [41-42]
  binds := binds attrpath = • expr ; [34-42]
  expr := • expr_function [42-42]
  expr_function := • expr_if [42-42]
  expr_if := • expr_op [42-42]
  expr_op := • expr_op EQ expr_op [42-42]
  expr_op := • expr_op NEQ expr_op [42-42]
  expr_op := • expr_op < expr_op [42-42]
  expr_op := • expr_op LEQ expr_op [42-42]
  expr_op := • expr_op > expr_op [42-42]
  expr_op := • expr_op GEQ expr_op [42-42]
  expr_op := • expr_op AND expr_op [42-42]
  expr_op := • expr_op OR expr_op [42-42]
  expr_op := • expr_op IMPL expr_op [42-42]
  expr_op := • expr_op UPDATE expr_op [42-42]
  expr_op := • expr_op ? attrpath [42-42]
  expr_op := • expr_op + expr_op [42-42]
  expr_op := • expr_op - expr_op [42-42]
  expr_op := • expr_op * expr_op [42-42]
  expr_op := • expr_op / expr_op [42-42]
  expr_op := • expr_op CONCAT expr_op [42-42]
  expr_op := • expr_app [42-42]
  expr_app := • expr_app expr_select [42-42]
  expr_app := • expr_select [42-42]
  expr_select := • expr_simple . attrpath [42-42]
  expr_select := • expr_simple . attrpath OR_KW expr_select [42-42]
  expr_select := • expr_simple OR_KW [42-42]
  expr_select := • expr_simple [42-42]
  expr_simple := • " string_parts " [42-42]
  " := • "\"" [42-42]
43
  " := "\"" • [42-43]
  expr_simple := " • string_parts " [42-43]
  string_parts := • STR [43-43]
  string_parts := • string_parts_interpolated [43-43]
  string_parts := • [43-43]
  STR := • "STR" [43-43]
  string_parts_interpolated := • string_parts_interpolated STR [43-43]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [43-43]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [43-43]
  expr_simple := " string_parts • " [42-43]
44
  STR := "STR" • [43-44]
  string_parts := STR • [43-44]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [43-44]
  expr_simple := " string_parts • " [42-44]
  " := • "\"" [44-44]
45
  " := "\"" • [44-45]
  expr_simple := " string_parts " • [42-45]
  expr_select := expr_simple • . attrpath [42-45]
  expr_select := expr_simple • . attrpath OR_KW expr_select [42-45]
  expr_select := expr_simple • OR_KW [42-45]
  expr_select := expr_simple • [42-45]
  expr_app := expr_select • [42-45]
  expr_op := expr_app • [42-45]
  expr_app := expr_app • expr_select [42-45]
  expr_if := expr_op • [42-45]
  expr_op := expr_op • EQ expr_op [42-45]
  expr_op := expr_op • NEQ expr_op [42-45]
  expr_op := expr_op • < expr_op [42-45]
  expr_op := expr_op • LEQ expr_op [42-45]
  expr_op := expr_op • > expr_op [42-45]
  expr_op := expr_op • GEQ expr_op [42-45]
  expr_op := expr_op • AND expr_op [42-45]
  expr_op := expr_op • OR expr_op [42-45]
  expr_op := expr_op • IMPL expr_op [42-45]
  expr_op := expr_op • UPDATE expr_op [42-45]
  expr_op := expr_op • ? attrpath [42-45]
  expr_op := expr_op • + expr_op [42-45]
  expr_op := expr_op • - expr_op [42-45]
  expr_op := expr_op • * expr_op [42-45]
  expr_op := expr_op • / expr_op [42-45]
  expr_op := expr_op • CONCAT expr_op [42-45]
  expr_function := expr_if • [42-45]
  expr := expr_function • [42-45]
  binds := binds attrpath = expr • ; [34-45]
  ; := • ";" [45-45]
46
  ; := ";" • [45-46]
  binds := binds attrpath = expr ; • [34-46]
  expr_simple := { binds • } [33-46]
  binds := binds • attrpath = expr ; [34-46]
  binds := binds • INHERIT attrs ; [34-46]
  binds := binds • INHERIT ( expr ) attrs ; [34-46]
  attrpath := • attrpath . attr [46-46]
  attrpath := • attrpath . string_attr [46-46]
  attrpath := • attr [46-46]
  attr := • ID [46-46]
  ID := • "ID" [46-46]
47
  ID := "ID" • [46-47]
  attr := ID • [46-47]
  attrpath := attr • [46-47]
  binds := binds attrpath • = expr ; [34-47]
  attrpath := attrpath • . attr [46-47]
  attrpath := attrpath • . string_attr [46-47]
  = := • "=" [47-47]
48
  = := "=" • [47-48]
  binds := binds attrpath = • expr ; [34-48]
  expr := • expr_function [48-48]
  expr_function := • ID : expr_function [48-48]
  expr_function := • ID @ { formals } : expr_function [48-48]
  expr_function := • expr_if [48-48]
  ID := • "ID" [48-48]
  expr_if := • expr_op [48-48]
  expr_op := • expr_op EQ expr_op [48-48]
  expr_op := • expr_op NEQ expr_op [48-48]
  expr_op := • expr_op < expr_op [48-48]
  expr_op := • expr_op LEQ expr_op [48-48]
  expr_op := • expr_op > expr_op [48-48]
  expr_op := • expr_op GEQ expr_op [48-48]
  expr_op := • expr_op AND expr_op [48-48]
  expr_op := • expr_op OR expr_op [48-48]
  expr_op := • expr_op IMPL expr_op [48-48]
  expr_op := • expr_op UPDATE expr_op [48-48]
  expr_op := • expr_op ? attrpath [48-48]
  expr_op := • expr_op + expr_op [48-48]
  expr_op := • expr_op - expr_op [48-48]
  expr_op := • expr_op * expr_op [48-48]
  expr_op := • expr_op / expr_op [48-48]
  expr_op := • expr_op CONCAT expr_op [48-48]
  expr_op := • expr_app [48-48]
  expr_app := • expr_app expr_select [48-48]
  expr_app := • expr_select [48-48]
  expr_select := • expr_simple . attrpath [48-48]
  expr_select := • expr_simple . attrpath OR_KW expr_select [48-48]
  expr_select := • expr_simple OR_KW [48-48]
  expr_select := • expr_simple [48-48]
  expr_simple := • ID [48-48]
49
  ID := "ID" • [48-49]
  expr_function := ID • : expr_function [48-49]
  expr_function := ID • @ { formals } : expr_function [48-49]
  expr_simple := ID • [48-49]
  expr_select := expr_simple • . attrpath [48-49]
  expr_select := expr_simple • . attrpath OR_KW expr_select [48-49]
  expr_select := expr_simple • OR_KW [48-49]
  expr_select := expr_simple • [48-49]
  expr_app := expr_select • [48-49]
  expr_op := expr_app • [48-49]
  expr_app := expr_app • expr_select [48-49]
  expr_if := expr_op • [48-49]
  expr_op := expr_op • EQ expr_op [48-49]
  expr_op := expr_op • NEQ expr_op [48-49]
  expr_op := expr_op • < expr_op [48-49]
  expr_op := expr_op • LEQ expr_op [48-49]
  expr_op := expr_op • > expr_op [48-49]
  expr_op := expr_op • GEQ expr_op [48-49]
  expr_op := expr_op • AND expr_op [48-49]
  expr_op := expr_op • OR expr_op [48-49]
  expr_op := expr_op • IMPL expr_op [48-49]
  expr_op := expr_op • UPDATE expr_op [48-49]
  expr_op := expr_op • ? attrpath [48-49]
  expr_op := expr_op • + expr_op [48-49]
  expr_op := expr_op • - expr_op [48-49]
  expr_op := expr_op • * expr_op [48-49]
  expr_op := expr_op • / expr_op [48-49]
  expr_op := expr_op • CONCAT expr_op [48-49]
  expr_function := expr_if • [48-49]
  expr := expr_function • [48-49]
  binds := binds attrpath = expr • ; [34-49]
  ; := • ";" [49-49]
50
  ; := ";" • [49-50]
  binds := binds attrpath = expr ; • [34-50]
  expr_simple := { binds • } [33-50]
  binds := binds • attrpath = expr ; [34-50]
  binds := binds • INHERIT attrs ; [34-50]
  binds := binds • INHERIT ( expr ) attrs ; [34-50]
  attrpath := • attrpath . attr [50-50]
  attrpath := • attrpath . string_attr [50-50]
  attrpath := • attr [50-50]
  attr := • ID [50-50]
  ID := • "ID" [50-50]
51
  ID := "ID" • [50-51]
  attr := ID • [50-51]
  attrpath := attr • [50-51]
  binds := binds attrpath • = expr ; [34-51]
  attrpath := attrpath • . attr [50-51]
  attrpath := attrpath • . string_attr [50-51]
  = := • "=" [51-51]
52
  = := "=" • [51-52]
  binds := binds attrpath = • expr ; [34-52]
  expr := • expr_function [52-52]
  expr_function := • expr_if [52-52]
  expr_if := • expr_op [52-52]
  expr_op := • expr_op EQ expr_op [52-52]
  expr_op := • expr_op NEQ expr_op [52-52]
  expr_op := • expr_op < expr_op [52-52]
  expr_op := • expr_op LEQ expr_op [52-52]
  expr_op := • expr_op > expr_op [52-52]
  expr_op := • expr_op GEQ expr_op [52-52]
  expr_op := • expr_op AND expr_op [52-52]
  expr_op := • expr_op OR expr_op [52-52]
  expr_op := • expr_op IMPL expr_op [52-52]
  expr_op := • expr_op UPDATE expr_op [52-52]
  expr_op := • expr_op ? attrpath [52-52]
  expr_op := • expr_op + expr_op [52-52]
  expr_op := • expr_op - expr_op [52-52]
  expr_op := • expr_op * expr_op [52-52]
  expr_op := • expr_op / expr_op [52-52]
  expr_op := • expr_op CONCAT expr_op [52-52]
  expr_op := • expr_app [52-52]
  expr_app := • expr_app expr_select [52-52]
  expr_app := • expr_select [52-52]
  expr_select := • expr_simple . attrpath [52-52]
  expr_select := • expr_simple . attrpath OR_KW expr_select [52-52]
  expr_select := • expr_simple OR_KW [52-52]
  expr_select := • expr_simple [52-52]
  expr_simple := • " string_parts " [52-52]
  " := • "\"" [52-52]
53
  " := "\"" • [52-53]
  expr_simple := " • string_parts " [52-53]
  string_parts := • STR [53-53]
  string_parts := • string_parts_interpolated [53-53]
  string_parts := • [53-53]
  STR := • "STR" [53-53]
  string_parts_interpolated := • string_parts_interpolated STR [53-53]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [53-53]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [53-53]
  expr_simple := " string_parts • " [52-53]
54
  STR := "STR" • [53-54]
  string_parts := STR • [53-54]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [53-54]
  expr_simple := " string_parts • " [52-54]
  " := • "\"" [54-54]
55
  " := "\"" • [54-55]
  expr_simple := " string_parts " • [52-55]
  expr_select := expr_simple • . attrpath [52-55]
  expr_select := expr_simple • . attrpath OR_KW expr_select [52-55]
  expr_select := expr_simple • OR_KW [52-55]
  expr_select := expr_simple • [52-55]
  expr_app := expr_select • [52-55]
  expr_op := expr_app • [52-55]
  expr_app := expr_app • expr_select [52-55]
  expr_if := expr_op • [52-55]
  expr_op := expr_op • EQ expr_op [52-55]
  expr_op := expr_op • NEQ expr_op [52-55]
  expr_op := expr_op • < expr_op [52-55]
  expr_op := expr_op • LEQ expr_op [52-55]
  expr_op := expr_op • > expr_op [52-55]
  expr_op := expr_op • GEQ expr_op [52-55]
  expr_op := expr_op • AND expr_op [52-55]
  expr_op := expr_op • OR expr_op [52-55]
  expr_op := expr_op • IMPL expr_op [52-55]
  expr_op := expr_op • UPDATE expr_op [52-55]
  expr_op := expr_op • ? attrpath [52-55]
  expr_op := expr_op • + expr_op [52-55]
  expr_op := expr_op • - expr_op [52-55]
  expr_op := expr_op • * expr_op [52-55]
  expr_op := expr_op • / expr_op [52-55]
  expr_op := expr_op • CONCAT expr_op [52-55]
  expr_function := expr_if • [52-55]
  expr := expr_function • [52-55]
  binds := binds attrpath = expr • ; [34-55]
  ; := • ";" [55-55]
56
  ; := ";" • [55-56]
  binds := binds attrpath = expr ; • [34-56]
  expr_simple := { binds • } [33-56]
  binds := binds • attrpath = expr ; [34-56]
  binds := binds • INHERIT attrs ; [34-56]
  binds := binds • INHERIT ( expr ) attrs ; [34-56]
  } := • "}" [56-56]
57
  } := "}" • [56-57]
  expr_simple := { binds } • [33-57]
  expr_select := expr_simple • . attrpath [33-57]
  expr_select := expr_simple • . attrpath OR_KW expr_select [33-57]
  expr_select := expr_simple • OR_KW [33-57]
  expr_select := expr_simple • [33-57]
  expr_app := expr_app expr_select • [32-57]
  expr_op := expr_app • [32-57]
  expr_app := expr_app • expr_select [32-57]
  expr_if := expr_op • [32-57]
  expr_op := expr_op • EQ expr_op [32-57]
  expr_op := expr_op • NEQ expr_op [32-57]
  expr_op := expr_op • < expr_op [32-57]
  expr_op := expr_op • LEQ expr_op [32-57]
  expr_op := expr_op • > expr_op [32-57]
  expr_op := expr_op • GEQ expr_op [32-57]
  expr_op := expr_op • AND expr_op [32-57]
  expr_op := expr_op • OR expr_op [32-57]
  expr_op := expr_op • IMPL expr_op [32-57]
  expr_op := expr_op • UPDATE expr_op [32-57]
  expr_op := expr_op • ? attrpath [32-57]
  expr_op := expr_op • + expr_op [32-57]
  expr_op := expr_op • - expr_op [32-57]
  expr_op := expr_op • * expr_op [32-57]
  expr_op := expr_op • / expr_op [32-57]
  expr_op := expr_op • CONCAT expr_op [32-57]
  expr_function := expr_if • [32-57]
  expr := expr_function • [32-57]
  binds := binds attrpath = expr • ; [18-57]
  ; := • ";" [57-57]
58
  ; := ";" • [57-58]
  binds := binds attrpath = expr ; • [18-58]
  expr_simple := REC { binds • } [16-58]
  binds := binds • attrpath = expr ; [18-58]
  binds := binds • INHERIT attrs ; [18-58]
  binds := binds • INHERIT ( expr ) attrs ; [18-58]
  attrpath := • attrpath . attr [58-58]
  attrpath := • attrpath . string_attr [58-58]
  attrpath := • attr [58-58]
  attr := • ID [58-58]
  ID := • "ID" [58-58]
59
  ID := "ID" • [58-59]
  attr := ID • [58-59]
  attrpath := attr • [58-59]
  binds := binds attrpath • = expr ; [18-59]
  attrpath := attrpath • . attr [58-59]
  attrpath := attrpath • . string_attr [58-59]
  = := • "=" [59-59]
60
  = := "=" • [59-60]
  binds := binds attrpath = • expr ; [18-60]
  expr := • expr_function [60-60]
  expr_function := • expr_if [60-60]
  expr_if := • expr_op [60-60]
  expr_op := • expr_op EQ expr_op [60-60]
  expr_op := • expr_op NEQ expr_op [60-60]
  expr_op := • expr_op < expr_op [60-60]
  expr_op := • expr_op LEQ expr_op [60-60]
  expr_op := • expr_op > expr_op [60-60]
  expr_op := • expr_op GEQ expr_op [60-60]
  expr_op := • expr_op AND expr_op [60-60]
  expr_op := • expr_op OR expr_op [60-60]
  expr_op := • expr_op IMPL expr_op [60-60]
  expr_op := • expr_op UPDATE expr_op [60-60]
  expr_op := • expr_op ? attrpath [60-60]
  expr_op := • expr_op + expr_op [60-60]
  expr_op := • expr_op - expr_op [60-60]
  expr_op := • expr_op * expr_op [60-60]
  expr_op := • expr_op / expr_op [60-60]
  expr_op := • expr_op CONCAT expr_op [60-60]
  expr_op := • expr_app [60-60]
  expr_app := • expr_app expr_select [60-60]
  expr_app := • expr_select [60-60]
  expr_select := • expr_simple . attrpath [60-60]
  expr_select := • expr_simple . attrpath OR_KW expr_select [60-60]
  expr_select := • expr_simple OR_KW [60-60]
  expr_select := • expr_simple [60-60]
  expr_simple := • " string_parts " [60-60]
  " := • "\"" [60-60]
61
  " := "\"" • [60-61]
  expr_simple := " • string_parts " [60-61]
  string_parts := • STR [61-61]
  string_parts := • string_parts_interpolated [61-61]
  string_parts := • [61-61]
  STR := • "STR" [61-61]
  string_parts_interpolated := • string_parts_interpolated STR [61-61]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [61-61]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [61-61]
  expr_simple := " string_parts • " [60-61]
62
  STR := "STR" • [61-62]
  string_parts := STR • [61-62]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [61-62]
  expr_simple := " string_parts • " [60-62]
  " := • "\"" [62-62]
63
  " := "\"" • [62-63]
  expr_simple := " string_parts " • [60-63]
  expr_select := expr_simple • . attrpath [60-63]
  expr_select := expr_simple • . attrpath OR_KW expr_select [60-63]
  expr_select := expr_simple • OR_KW [60-63]
  expr_select := expr_simple • [60-63]
  expr_app := expr_select • [60-63]
  expr_op := expr_app • [60-63]
  expr_app := expr_app • expr_select [60-63]
  expr_if := expr_op • [60-63]
  expr_op := expr_op • EQ expr_op [60-63]
  expr_op := expr_op • NEQ expr_op [60-63]
  expr_op := expr_op • < expr_op [60-63]
  expr_op := expr_op • LEQ expr_op [60-63]
  expr_op := expr_op • > expr_op [60-63]
  expr_op := expr_op • GEQ expr_op [60-63]
  expr_op := expr_op • AND expr_op [60-63]
  expr_op := expr_op • OR expr_op [60-63]
  expr_op := expr_op • IMPL expr_op [60-63]
  expr_op := expr_op • UPDATE expr_op [60-63]
  expr_op := expr_op • ? attrpath [60-63]
  expr_op := expr_op • + expr_op [60-63]
  expr_op := expr_op • - expr_op [60-63]
  expr_op := expr_op • * expr_op [60-63]
  expr_op := expr_op • / expr_op [60-63]
  expr_op := expr_op • CONCAT expr_op [60-63]
  expr_function := expr_if • [60-63]
  expr := expr_function • [60-63]
  binds := binds attrpath = expr • ; [18-63]
  ; := • ";" [63-63]
64
  ; := ";" • [63-64]
  binds := binds attrpath = expr ; • [18-64]
  expr_simple := REC { binds • } [16-64]
  binds := binds • attrpath = expr ; [18-64]
  binds := binds • INHERIT attrs ; [18-64]
  binds := binds • INHERIT ( expr ) attrs ; [18-64]
  attrpath := • attrpath . attr [64-64]
  attrpath := • attrpath . string_attr [64-64]
  attrpath := • attr [64-64]
  attr := • ID [64-64]
  ID := • "ID" [64-64]
65
  ID := "ID" • [64-65]
  attr := ID • [64-65]
  attrpath := attr • [64-65]
  binds := binds attrpath • = expr ; [18-65]
  attrpath := attrpath • . attr [64-65]
  attrpath := attrpath • . string_attr [64-65]
  . := • "." [65-65]
66
  . := "." • [65-66]
  attrpath := attrpath . • attr [64-66]
  attrpath := attrpath . • string_attr [64-66]
  attr := • ID [66-66]
  ID := • "ID" [66-66]
67
  ID := "ID" • [66-67]
  attr := ID • [66-67]
  attrpath := attrpath . attr • [64-67]
  binds := binds attrpath • = expr ; [18-67]
  attrpath := attrpath • . attr [64-67]
  attrpath := attrpath • . string_attr [64-67]
  = := • "=" [67-67]
68
  = := "=" • [67-68]
  binds := binds attrpath = • expr ; [18-68]
  expr := • expr_function [68-68]
  expr_function := • { formals } : expr_function [68-68]
  expr_function := • { formals } @ ID : expr_function [68-68]
  expr_function := • expr_if [68-68]
  { := • "{" [68-68]
  expr_if := • expr_op [68-68]
  expr_op := • expr_op EQ expr_op [68-68]
  expr_op := • expr_op NEQ expr_op [68-68]
  expr_op := • expr_op < expr_op [68-68]
  expr_op := • expr_op LEQ expr_op [68-68]
  expr_op := • expr_op > expr_op [68-68]
  expr_op := • expr_op GEQ expr_op [68-68]
  expr_op := • expr_op AND expr_op [68-68]
  expr_op := • expr_op OR expr_op [68-68]
  expr_op := • expr_op IMPL expr_op [68-68]
  expr_op := • expr_op UPDATE expr_op [68-68]
  expr_op := • expr_op ? attrpath [68-68]
  expr_op := • expr_op + expr_op [68-68]
  expr_op := • expr_op - expr_op [68-68]
  expr_op := • expr_op * expr_op [68-68]
  expr_op := • expr_op / expr_op [68-68]
  expr_op := • expr_op CONCAT expr_op [68-68]
  expr_op := • expr_app [68-68]
  expr_app := • expr_app expr_select [68-68]
  expr_app := • expr_select [68-68]
  expr_select := • expr_simple . attrpath [68-68]
  expr_select := • expr_simple . attrpath OR_KW expr_select [68-68]
  expr_select := • expr_simple OR_KW [68-68]
  expr_select := • expr_simple [68-68]
  expr_simple := • { binds } [68-68]
69
  { := "{" • [68-69]
  expr_function := { • formals } : expr_function [68-69]
  expr_function := { • formals } @ ID : expr_function [68-69]
  expr_simple := { • binds } [68-69]
  formals := • formal , formals [69-69]
  formals := • formal [69-69]
  formals := • [69-69]
  binds := • binds attrpath = expr ; [69-69]
  binds := • binds INHERIT attrs ; [69-69]
  binds := • binds INHERIT ( expr ) attrs ; [69-69]
  binds := • [69-69]
  formal := • ID [69-69]
  formal := • ID ? expr [69-69]
  expr_function := { formals • } : expr_function [68-69]
  expr_function := { formals • } @ ID : expr_function [68-69]
  expr_simple := { binds • } [68-69]
  binds := binds • attrpath = expr ; [69-69]
  binds := binds • INHERIT attrs ; [69-69]
  binds := binds • INHERIT ( expr ) attrs ; [69-69]
  ID := • "ID" [69-69]
  attrpath := • attrpath . attr [69-69]
  attrpath := • attrpath . string_attr [69-69]
  attrpath := • attr [69-69]
  attr := • ID [69-69]
70
  ID := "ID" • [69-70]
  formal := ID • [69-70]
  formal := ID • ? expr [69-70]
  attr := ID • [69-70]
  formals := formal • , formals [69-70]
  formals := formal • [69-70]
  attrpath := attr • [69-70]
  expr_function := { formals • } : expr_function [68-70]
  expr_function := { formals • } @ ID : expr_function [68-70]
  binds := binds attrpath • = expr ; [69-70]
  attrpath := attrpath • . attr [69-70]
  attrpath := attrpath • . string_attr [69-70]
  = := • "=" [70-70]
71
  = := "=" • [70-71]
  binds := binds attrpath = • expr ; [69-71]
  expr := • expr_function [71-71]
  expr_function := • ID : expr_function [71-71]
  expr_function := • ID @ { formals } : expr_function [71-71]
  expr_function := • expr_if [71-71]
  ID := • "ID" [71-71]
  expr_if := • expr_op [71-71]
  expr_op := • expr_op EQ expr_op [71-71]
  expr_op := • expr_op NEQ expr_op [71-71]
  expr_op := • expr_op < expr_op [71-71]
  expr_op := • expr_op LEQ expr_op [71-71]
  expr_op := • expr_op > expr_op [71-71]
  expr_op := • expr_op GEQ expr_op [71-71]
  expr_op := • expr_op AND expr_op [71-71]
  expr_op := • expr_op OR expr_op [71-71]
  expr_op := • expr_op IMPL expr_op [71-71]
  expr_op := • expr_op UPDATE expr_op [71-71]
  expr_op := • expr_op ? attrpath [71-71]
  expr_op := • expr_op + expr_op [71-71]
  expr_op := • expr_op - expr_op [71-71]
  expr_op := • expr_op * expr_op [71-71]
  expr_op := • expr_op / expr_op [71-71]
  expr_op := • expr_op CONCAT expr_op [71-71]
  expr_op := • expr_app [71-71]
  expr_app := • expr_app expr_select [71-71]
  expr_app := • expr_select [71-71]
  expr_select := • expr_simple . attrpath [71-71]
  expr_select := • expr_simple . attrpath OR_KW expr_select [71-71]
  expr_select := • expr_simple OR_KW [71-71]
  expr_select := • expr_simple [71-71]
  expr_simple := • ID [71-71]
72
  ID := "ID" • [71-72]
  expr_function := ID • : expr_function [71-72]
  expr_function := ID • @ { formals } : expr_function [71-72]
  expr_simple := ID • [71-72]
  expr_select := expr_simple • . attrpath [71-72]
  expr_select := expr_simple • . attrpath OR_KW expr_select [71-72]
  expr_select := expr_simple • OR_KW [71-72]
  expr_select := expr_simple • [71-72]
  expr_app := expr_select • [71-72]
  expr_op := expr_app • [71-72]
  expr_app := expr_app • expr_select [71-72]
  expr_if := expr_op • [71-72]
  expr_op := expr_op • EQ expr_op [71-72]
  expr_op := expr_op • NEQ expr_op [71-72]
  expr_op := expr_op • < expr_op [71-72]
  expr_op := expr_op • LEQ expr_op [71-72]
  expr_op := expr_op • > expr_op [71-72]
  expr_op := expr_op • GEQ expr_op [71-72]
  expr_op := expr_op • AND expr_op [71-72]
  expr_op := expr_op • OR expr_op [71-72]
  expr_op := expr_op • IMPL expr_op [71-72]
  expr_op := expr_op • UPDATE expr_op [71-72]
  expr_op := expr_op • ? attrpath [71-72]
  expr_op := expr_op • + expr_op [71-72]
  expr_op := expr_op • - expr_op [71-72]
  expr_op := expr_op • * expr_op [71-72]
  expr_op := expr_op • / expr_op [71-72]
  expr_op := expr_op • CONCAT expr_op [71-72]
  expr_select := • expr_simple . attrpath [72-72]
  expr_select := • expr_simple . attrpath OR_KW expr_select [72-72]
  expr_select := • expr_simple OR_KW [72-72]
  expr_select := • expr_simple [72-72]
  expr_function := expr_if • [71-72]
  expr_simple := • { binds } [72-72]
  expr := expr_function • [71-72]
  { := • "{" [72-72]
  binds := binds attrpath = expr • ; [69-72]
73
  { := "{" • [72-73]
  expr_simple := { • binds } [72-73]
  binds := • binds attrpath = expr ; [73-73]
  binds := • binds INHERIT attrs ; [73-73]
  binds := • binds INHERIT ( expr ) attrs ; [73-73]
  binds := • [73-73]
  expr_simple := { binds • } [72-73]
  binds := binds • attrpath = expr ; [73-73]
  binds := binds • INHERIT attrs ; [73-73]
  binds := binds • INHERIT ( expr ) attrs ; [73-73]
  attrpath := • attrpath . attr [73-73]
  attrpath := • attrpath . string_attr [73-73]
  attrpath := • attr [73-73]
  attr := • ID [73-73]
  ID := • "ID" [73-73]
74
  ID := "ID" • [73-74]
  attr := ID • [73-74]
  attrpath := attr • [73-74]
  binds := binds attrpath • = expr ; [73-74]
  attrpath := attrpath • . attr [73-74]
  attrpath := attrpath • . string_attr [73-74]
  = := • "=" [74-74]
75
  = := "=" • [74-75]
  binds := binds attrpath = • expr ; [73-75]
  expr := • expr_function [75-75]
  expr_function := • ID : expr_function [75-75]
  expr_function := • ID @ { formals } : expr_function [75-75]
  expr_function := • expr_if [75-75]
  ID := • "ID" [75-75]
  expr_if := • expr_op [75-75]
  expr_op := • expr_op EQ expr_op [75-75]
  expr_op := • expr_op NEQ expr_op [75-75]
  expr_op := • expr_op < expr_op [75-75]
  expr_op := • expr_op LEQ expr_op [75-75]
  expr_op := • expr_op > expr_op [75-75]
  expr_op := • expr_op GEQ expr_op [75-75]
  expr_op := • expr_op AND expr_op [75-75]
  expr_op := • expr_op OR expr_op [75-75]
  expr_op := • expr_op IMPL expr_op [75-75]
  expr_op := • expr_op UPDATE expr_op [75-75]
  expr_op := • expr_op ? attrpath [75-75]
  expr_op := • expr_op + expr_op [75-75]
  expr_op := • expr_op - expr_op [75-75]
  expr_op := • expr_op * expr_op [75-75]
  expr_op := • expr_op / expr_op [75-75]
  expr_op := • expr_op CONCAT expr_op [75-75]
  expr_op := • expr_app [75-75]
  expr_app := • expr_app expr_select [75-75]
  expr_app := • expr_select [75-75]
  expr_select := • expr_simple . attrpath [75-75]
  expr_select := • expr_simple . attrpath OR_KW expr_select [75-75]
  expr_select := • expr_simple OR_KW [75-75]
  expr_select := • expr_simple [75-75]
  expr_simple := • ID [75-75]
76
  ID := "ID" • [75-76]
  expr_function := ID • : expr_function [75-76]
  expr_function := ID • @ { formals } : expr_function [75-76]
  expr_simple := ID • [75-76]
  expr_select := expr_simple • . attrpath [75-76]
  expr_select := expr_simple • . attrpath OR_KW expr_select [75-76]
  expr_select := expr_simple • OR_KW [75-76]
  expr_select := expr_simple • [75-76]
  expr_app := expr_select • [75-76]
  expr_op := expr_app • [75-76]
  expr_app := expr_app • expr_select [75-76]
  expr_if := expr_op • [75-76]
  expr_op := expr_op • EQ expr_op [75-76]
  expr_op := expr_op • NEQ expr_op [75-76]
  expr_op := expr_op • < expr_op [75-76]
  expr_op := expr_op • LEQ expr_op [75-76]
  expr_op := expr_op • > expr_op [75-76]
  expr_op := expr_op • GEQ expr_op [75-76]
  expr_op := expr_op • AND expr_op [75-76]
  expr_op := expr_op • OR expr_op [75-76]
  expr_op := expr_op • IMPL expr_op [75-76]
  expr_op := expr_op • UPDATE expr_op [75-76]
  expr_op := expr_op • ? attrpath [75-76]
  expr_op := expr_op • + expr_op [75-76]
  expr_op := expr_op • - expr_op [75-76]
  expr_op := expr_op • * expr_op [75-76]
  expr_op := expr_op • / expr_op [75-76]
  expr_op := expr_op • CONCAT expr_op [75-76]
  expr_function := expr_if • [75-76]
  expr := expr_function • [75-76]
  binds := binds attrpath = expr • ; [73-76]
  ; := • ";" [76-76]
77
  ; := ";" • [76-77]
  binds := binds attrpath = expr ; • [73-77]
  expr_simple := { binds • } [72-77]
  binds := binds • attrpath = expr ; [73-77]
  binds := binds • INHERIT attrs ; [73-77]
  binds := binds • INHERIT ( expr ) attrs ; [73-77]
  } := • "}" [77-77]
78
  } := "}" • [77-78]
  expr_simple := { binds } • [72-78]
  expr_select := expr_simple • . attrpath [72-78]
  expr_select := expr_simple • . attrpath OR_KW expr_select [72-78]
  expr_select := expr_simple • OR_KW [72-78]
  expr_select := expr_simple • [72-78]
  expr_app := expr_app expr_select • [71-78]
  expr_op := expr_app • [71-78]
  expr_app := expr_app • expr_select [71-78]
  expr_if := expr_op • [71-78]
  expr_op := expr_op • EQ expr_op [71-78]
  expr_op := expr_op • NEQ expr_op [71-78]
  expr_op := expr_op • < expr_op [71-78]
  expr_op := expr_op • LEQ expr_op [71-78]
  expr_op := expr_op • > expr_op [71-78]
  expr_op := expr_op • GEQ expr_op [71-78]
  expr_op := expr_op • AND expr_op [71-78]
  expr_op := expr_op • OR expr_op [71-78]
  expr_op := expr_op • IMPL expr_op [71-78]
  expr_op := expr_op • UPDATE expr_op [71-78]
  expr_op := expr_op • ? attrpath [71-78]
  expr_op := expr_op • + expr_op [71-78]
  expr_op := expr_op • - expr_op [71-78]
  expr_op := expr_op • * expr_op [71-78]
  expr_op := expr_op • / expr_op [71-78]
  expr_op := expr_op • CONCAT expr_op [71-78]
  expr_function := expr_if • [71-78]
  expr := expr_function • [71-78]
  binds := binds attrpath = expr • ; [69-78]
  ; := • ";" [78-78]
79
  ; := ";" • [78-79]
  binds := binds attrpath = expr ; • [69-79]
  expr_simple := { binds • } [68-79]
  binds := binds • attrpath = expr ; [69-79]
  binds := binds • INHERIT attrs ; [69-79]
  binds := binds • INHERIT ( expr ) attrs ; [69-79]
  } := • "}" [79-79]
80
  } := "}" • [79-80]
  expr_simple := { binds } • [68-80]
  expr_select := expr_simple • . attrpath [68-80]
  expr_select := expr_simple • . attrpath OR_KW expr_select [68-80]
  expr_select := expr_simple • OR_KW [68-80]
  expr_select := expr_simple • [68-80]
  expr_app := expr_select • [68-80]
  expr_op := expr_app • [68-80]
  expr_app := expr_app • expr_select [68-80]
  expr_if := expr_op • [68-80]
  expr_op := expr_op • EQ expr_op [68-80]
  expr_op := expr_op • NEQ expr_op [68-80]
  expr_op := expr_op • < expr_op [68-80]
  expr_op := expr_op • LEQ expr_op [68-80]
  expr_op := expr_op • > expr_op [68-80]
  expr_op := expr_op • GEQ expr_op [68-80]
  expr_op := expr_op • AND expr_op [68-80]
  expr_op := expr_op • OR expr_op [68-80]
  expr_op := expr_op • IMPL expr_op [68-80]
  expr_op := expr_op • UPDATE expr_op [68-80]
  expr_op := expr_op • ? attrpath [68-80]
  expr_op := expr_op • + expr_op [68-80]
  expr_op := expr_op • - expr_op [68-80]
  expr_op := expr_op • * expr_op [68-80]
  expr_op := expr_op • / expr_op [68-80]
  expr_op := expr_op • CONCAT expr_op [68-80]
  expr_function := expr_if • [68-80]
  expr := expr_function • [68-80]
  binds := binds attrpath = expr • ; [18-80]
  ; := • ";" [80-80]
81
  ; := ";" • [80-81]
  binds := binds attrpath = expr ; • [18-81]
  expr_simple := REC { binds • } [16-81]
  binds := binds • attrpath = expr ; [18-81]
  binds := binds • INHERIT attrs ; [18-81]
  binds := binds • INHERIT ( expr ) attrs ; [18-81]
  attrpath := • attrpath . attr [81-81]
  attrpath := • attrpath . string_attr [81-81]
  attrpath := • attr [81-81]
  attr := • ID [81-81]
  ID := • "ID" [81-81]
82
  ID := "ID" • [81-82]
  attr := ID • [81-82]
  attrpath := attr • [81-82]
  binds := binds attrpath • = expr ; [18-82]
  attrpath := attrpath • . attr [81-82]
  attrpath := attrpath • . string_attr [81-82]
  = := • "=" [82-82]
83
  = := "=" • [82-83]
  binds := binds attrpath = • expr ; [18-83]
  expr := • expr_function [83-83]
  expr_function := • WITH expr ; expr_function [83-83]
  WITH := • "WITH" [83-83]
84
  WITH := "WITH" • [83-84]
  expr_function := WITH • expr ; expr_function [83-84]
  expr := • expr_function [84-84]
  expr_function := • ID : expr_function [84-84]
  expr_function := • ID @ { formals } : expr_function [84-84]
  expr_function := • expr_if [84-84]
  ID := • "ID" [84-84]
  expr_if := • expr_op [84-84]
  expr_op := • expr_op EQ expr_op [84-84]
  expr_op := • expr_op NEQ expr_op [84-84]
  expr_op := • expr_op < expr_op [84-84]
  expr_op := • expr_op LEQ expr_op [84-84]
  expr_op := • expr_op > expr_op [84-84]
  expr_op := • expr_op GEQ expr_op [84-84]
  expr_op := • expr_op AND expr_op [84-84]
  expr_op := • expr_op OR expr_op [84-84]
  expr_op := • expr_op IMPL expr_op [84-84]
  expr_op := • expr_op UPDATE expr_op [84-84]
  expr_op := • expr_op ? attrpath [84-84]
  expr_op := • expr_op + expr_op [84-84]
  expr_op := • expr_op - expr_op [84-84]
  expr_op := • expr_op * expr_op [84-84]
  expr_op := • expr_op / expr_op [84-84]
  expr_op := • expr_op CONCAT expr_op [84-84]
  expr_op := • expr_app [84-84]
  expr_app := • expr_app expr_select [84-84]
  expr_app := • expr_select [84-84]
  expr_select := • expr_simple . attrpath [84-84]
  expr_select := • expr_simple . attrpath OR_KW expr_select [84-84]
  expr_select := • expr_simple OR_KW [84-84]
  expr_select := • expr_simple [84-84]
  expr_simple := • ID [84-84]
85
  ID := "ID" • [84-85]
  expr_function := ID • : expr_function [84-85]
  expr_function := ID • @ { formals } : expr_function [84-85]
  expr_simple := ID • [84-85]
  expr_select := expr_simple • . attrpath [84-85]
  expr_select := expr_simple • . attrpath OR_KW expr_select [84-85]
  expr_select := expr_simple • OR_KW [84-85]
  expr_select := expr_simple • [84-85]
  expr_app := expr_select • [84-85]
  expr_op := expr_app • [84-85]
  expr_app := expr_app • expr_select [84-85]
  expr_if := expr_op • [84-85]
  expr_op := expr_op • EQ expr_op [84-85]
  expr_op := expr_op • NEQ expr_op [84-85]
  expr_op := expr_op • < expr_op [84-85]
  expr_op := expr_op • LEQ expr_op [84-85]
  expr_op := expr_op • > expr_op [84-85]
  expr_op := expr_op • GEQ expr_op [84-85]
  expr_op := expr_op • AND expr_op [84-85]
  expr_op := expr_op • OR expr_op [84-85]
  expr_op := expr_op • IMPL expr_op [84-85]
  expr_op := expr_op • UPDATE expr_op [84-85]
  expr_op := expr_op • ? attrpath [84-85]
  expr_op := expr_op • + expr_op [84-85]
  expr_op := expr_op • - expr_op [84-85]
  expr_op := expr_op • * expr_op [84-85]
  expr_op := expr_op • / expr_op [84-85]
  expr_op := expr_op • CONCAT expr_op [84-85]
  expr_function := expr_if • [84-85]
  expr := expr_function • [84-85]
  expr_function := WITH expr • ; expr_function [83-85]
  ; := • ";" [85-85]
86
  ; := ";" • [85-86]
  expr_function := WITH expr ; • expr_function [83-86]
  expr_function := • { formals } : expr_function [86-86]
  expr_function := • { formals } @ ID : expr_function [86-86]
  expr_function := • expr_if [86-86]
  { := • "{" [86-86]
  expr_if := • expr_op [86-86]
  expr_op := • expr_op EQ expr_op [86-86]
  expr_op := • expr_op NEQ expr_op [86-86]
  expr_op := • expr_op < expr_op [86-86]
  expr_op := • expr_op LEQ expr_op [86-86]
  expr_op := • expr_op > expr_op [86-86]
  expr_op := • expr_op GEQ expr_op [86-86]
  expr_op := • expr_op AND expr_op [86-86]
  expr_op := • expr_op OR expr_op [86-86]
  expr_op := • expr_op IMPL expr_op [86-86]
  expr_op := • expr_op UPDATE expr_op [86-86]
  expr_op := • expr_op ? attrpath [86-86]
  expr_op := • expr_op + expr_op [86-86]
  expr_op := • expr_op - expr_op [86-86]
  expr_op := • expr_op * expr_op [86-86]
  expr_op := • expr_op / expr_op [86-86]
  expr_op := • expr_op CONCAT expr_op [86-86]
  expr_op := • expr_app [86-86]
  expr_app := • expr_app expr_select [86-86]
  expr_app := • expr_select [86-86]
  expr_select := • expr_simple . attrpath [86-86]
  expr_select := • expr_simple . attrpath OR_KW expr_select [86-86]
  expr_select := • expr_simple OR_KW [86-86]
  expr_select := • expr_simple [86-86]
  expr_simple := • { binds } [86-86]
87
  { := "{" • [86-87]
  expr_function := { • formals } : expr_function [86-87]
  expr_function := { • formals } @ ID : expr_function [86-87]
  expr_simple := { • binds } [86-87]
  formals := • formal , formals [87-87]
  formals := • formal [87-87]
  formals := • [87-87]
  binds := • binds attrpath = expr ; [87-87]
  binds := • binds INHERIT attrs ; [87-87]
  binds := • binds INHERIT ( expr ) attrs ; [87-87]
  binds := • [87-87]
  formal := • ID [87-87]
  formal := • ID ? expr [87-87]
  expr_function := { formals • } : expr_function [86-87]
  expr_function := { formals • } @ ID : expr_function [86-87]
  expr_simple := { binds • } [86-87]
  binds := binds • attrpath = expr ; [87-87]
  binds := binds • INHERIT attrs ; [87-87]
  binds := binds • INHERIT ( expr ) attrs ; [87-87]
  ID := • "ID" [87-87]
  attrpath := • attrpath . attr [87-87]
  attrpath := • attrpath . string_attr [87-87]
  attrpath := • attr [87-87]
  attr := • ID [87-87]
88
  ID := "ID" • [87-88]
  formal := ID • [87-88]
  formal := ID • ? expr [87-88]
  attr := ID • [87-88]
  formals := formal • , formals [87-88]
  formals := formal • [87-88]
  attrpath := attr • [87-88]
  expr_function := { formals • } : expr_function [86-88]
  expr_function := { formals • } @ ID : expr_function [86-88]
  binds := binds attrpath • = expr ; [87-88]
  attrpath := attrpath • . attr [87-88]
  attrpath := attrpath • . string_attr [87-88]
  = := • "=" [88-88]
89
  = := "=" • [88-89]
  binds := binds attrpath = • expr ; [87-89]
  expr := • expr_function [89-89]
  expr_function := • expr_if [89-89]
  expr_if := • expr_op [89-89]
  expr_op := • expr_op EQ expr_op [89-89]
  expr_op := • expr_op NEQ expr_op [89-89]
  expr_op := • expr_op < expr_op [89-89]
  expr_op := • expr_op LEQ expr_op [89-89]
  expr_op := • expr_op > expr_op [89-89]
  expr_op := • expr_op GEQ expr_op [89-89]
  expr_op := • expr_op AND expr_op [89-89]
  expr_op := • expr_op OR expr_op [89-89]
  expr_op := • expr_op IMPL expr_op [89-89]
  expr_op := • expr_op UPDATE expr_op [89-89]
  expr_op := • expr_op ? attrpath [89-89]
  expr_op := • expr_op + expr_op [89-89]
  expr_op := • expr_op - expr_op [89-89]
  expr_op := • expr_op * expr_op [89-89]
  expr_op := • expr_op / expr_op [89-89]
  expr_op := • expr_op CONCAT expr_op [89-89]
  expr_op := • expr_app [89-89]
  expr_app := • expr_app expr_select [89-89]
  expr_app := • expr_select [89-89]
  expr_select := • expr_simple . attrpath [89-89]
  expr_select := • expr_simple . attrpath OR_KW expr_select [89-89]
  expr_select := • expr_simple OR_KW [89-89]
  expr_select := • expr_simple [89-89]
  expr_simple := • " string_parts " [89-89]
  " := • "\"" [89-89]
90
  " := "\"" • [89-90]
  expr_simple := " • string_parts " [89-90]
  string_parts := • STR [90-90]
  string_parts := • string_parts_interpolated [90-90]
  string_parts := • [90-90]
  STR := • "STR" [90-90]
  string_parts_interpolated := • string_parts_interpolated STR [90-90]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [90-90]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [90-90]
  expr_simple := " string_parts • " [89-90]
91
  STR := "STR" • [90-91]
  string_parts := STR • [90-91]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [90-91]
  expr_simple := " string_parts • " [89-91]
  " := • "\"" [91-91]
92
  " := "\"" • [91-92]
  expr_simple := " string_parts " • [89-92]
  expr_select := expr_simple • . attrpath [89-92]
  expr_select := expr_simple • . attrpath OR_KW expr_select [89-92]
  expr_select := expr_simple • OR_KW [89-92]
  expr_select := expr_simple • [89-92]
  expr_app := expr_select • [89-92]
  expr_op := expr_app • [89-92]
  expr_app := expr_app • expr_select [89-92]
  expr_if := expr_op • [89-92]
  expr_op := expr_op • EQ expr_op [89-92]
  expr_op := expr_op • NEQ expr_op [89-92]
  expr_op := expr_op • < expr_op [89-92]
  expr_op := expr_op • LEQ expr_op [89-92]
  expr_op := expr_op • > expr_op [89-92]
  expr_op := expr_op • GEQ expr_op [89-92]
  expr_op := expr_op • AND expr_op [89-92]
  expr_op := expr_op • OR expr_op [89-92]
  expr_op := expr_op • IMPL expr_op [89-92]
  expr_op := expr_op • UPDATE expr_op [89-92]
  expr_op := expr_op • ? attrpath [89-92]
  expr_op := expr_op • + expr_op [89-92]
  expr_op := expr_op • - expr_op [89-92]
  expr_op := expr_op • * expr_op [89-92]
  expr_op := expr_op • / expr_op [89-92]
  expr_op := expr_op • CONCAT expr_op [89-92]
  expr_function := expr_if • [89-92]
  expr := expr_function • [89-92]
  binds := binds attrpath = expr • ; [87-92]
  ; := • ";" [92-92]
93
  ; := ";" • [92-93]
  binds := binds attrpath = expr ; • [87-93]
  expr_simple := { binds • } [86-93]
  binds := binds • attrpath = expr ; [87-93]
  binds := binds • INHERIT attrs ; [87-93]
  binds := binds • INHERIT ( expr ) attrs ; [87-93]
  attrpath := • attrpath . attr [93-93]
  attrpath := • attrpath . string_attr [93-93]
  attrpath := • attr [93-93]
  attr := • ID [93-93]
  ID := • "ID" [93-93]
94
  ID := "ID" • [93-94]
  attr := ID • [93-94]
  attrpath := attr • [93-94]
  binds := binds attrpath • = expr ; [87-94]
  attrpath := attrpath • . attr [93-94]
  attrpath := attrpath • . string_attr [93-94]
  = := • "=" [94-94]
95
  = := "=" • [94-95]
  binds := binds attrpath = • expr ; [87-95]
  expr := • expr_function [95-95]
  expr_function := • expr_if [95-95]
  expr_if := • expr_op [95-95]
  expr_op := • expr_op EQ expr_op [95-95]
  expr_op := • expr_op NEQ expr_op [95-95]
  expr_op := • expr_op < expr_op [95-95]
  expr_op := • expr_op LEQ expr_op [95-95]
  expr_op := • expr_op > expr_op [95-95]
  expr_op := • expr_op GEQ expr_op [95-95]
  expr_op := • expr_op AND expr_op [95-95]
  expr_op := • expr_op OR expr_op [95-95]
  expr_op := • expr_op IMPL expr_op [95-95]
  expr_op := • expr_op UPDATE expr_op [95-95]
  expr_op := • expr_op ? attrpath [95-95]
  expr_op := • expr_op + expr_op [95-95]
  expr_op := • expr_op - expr_op [95-95]
  expr_op := • expr_op * expr_op [95-95]
  expr_op := • expr_op / expr_op [95-95]
  expr_op := • expr_op CONCAT expr_op [95-95]
  expr_op := • expr_app [95-95]
  expr_app := • expr_app expr_select [95-95]
  expr_app := • expr_select [95-95]
  expr_select := • expr_simple . attrpath [95-95]
  expr_select := • expr_simple . attrpath OR_KW expr_select [95-95]
  expr_select := • expr_simple OR_KW [95-95]
  expr_select := • expr_simple [95-95]
  expr_simple := • " string_parts " [95-95]
  " := • "\"" [95-95]
96
  " := "\"" • [95-96]
  expr_simple := " • string_parts " [95-96]
  string_parts := • STR [96-96]
  string_parts := • string_parts_interpolated [96-96]
  string_parts := • [96-96]
  STR := • "STR" [96-96]
  string_parts_interpolated := • string_parts_interpolated STR [96-96]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [96-96]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [96-96]
  expr_simple := " string_parts • " [95-96]
97
  STR := "STR" • [96-97]
  string_parts := STR • [96-97]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [96-97]
  expr_simple := " string_parts • " [95-97]
  " := • "\"" [97-97]
98
  " := "\"" • [97-98]
  expr_simple := " string_parts " • [95-98]
  expr_select := expr_simple • . attrpath [95-98]
  expr_select := expr_simple • . attrpath OR_KW expr_select [95-98]
  expr_select := expr_simple • OR_KW [95-98]
  expr_select := expr_simple • [95-98]
  expr_app := expr_select • [95-98]
  expr_op := expr_app • [95-98]
  expr_app := expr_app • expr_select [95-98]
  expr_if := expr_op • [95-98]
  expr_op := expr_op • EQ expr_op [95-98]
  expr_op := expr_op • NEQ expr_op [95-98]
  expr_op := expr_op • < expr_op [95-98]
  expr_op := expr_op • LEQ expr_op [95-98]
  expr_op := expr_op • > expr_op [95-98]
  expr_op := expr_op • GEQ expr_op [95-98]
  expr_op := expr_op • AND expr_op [95-98]
  expr_op := expr_op • OR expr_op [95-98]
  expr_op := expr_op • IMPL expr_op [95-98]
  expr_op := expr_op • UPDATE expr_op [95-98]
  expr_op := expr_op • ? attrpath [95-98]
  expr_op := expr_op • + expr_op [95-98]
  expr_op := expr_op • - expr_op [95-98]
  expr_op := expr_op • * expr_op [95-98]
  expr_op := expr_op • / expr_op [95-98]
  expr_op := expr_op • CONCAT expr_op [95-98]
  expr_function := expr_if • [95-98]
  expr := expr_function • [95-98]
  binds := binds attrpath = expr • ; [87-98]
  ; := • ";" [98-98]
99
  ; := ";" • [98-99]
  binds := binds attrpath = expr ; • [87-99]
  expr_simple := { binds • } [86-99]
  binds := binds • attrpath = expr ; [87-99]
  binds := binds • INHERIT attrs ; [87-99]
  binds := binds • INHERIT ( expr ) attrs ; [87-99]
  attrpath := • attrpath . attr [99-99]
  attrpath := • attrpath . string_attr [99-99]
  attrpath := • attr [99-99]
  attr := • ID [99-99]
  ID := • "ID" [99-99]
100
  ID := "ID" • [99-100]
  attr := ID • [99-100]
  attrpath := attr • [99-100]
  binds := binds attrpath • = expr ; [87-100]
  attrpath := attrpath • . attr [99-100]
  attrpath := attrpath • . string_attr [99-100]
  = := • "=" [100-100]
101
  = := "=" • [100-101]
  binds := binds attrpath = • expr ; [87-101]
  expr := • expr_function [101-101]
  expr_function := • expr_if [101-101]
  expr_if := • expr_op [101-101]
  expr_op := • expr_op EQ expr_op [101-101]
  expr_op := • expr_op NEQ expr_op [101-101]
  expr_op := • expr_op < expr_op [101-101]
  expr_op := • expr_op LEQ expr_op [101-101]
  expr_op := • expr_op > expr_op [101-101]
  expr_op := • expr_op GEQ expr_op [101-101]
  expr_op := • expr_op AND expr_op [101-101]
  expr_op := • expr_op OR expr_op [101-101]
  expr_op := • expr_op IMPL expr_op [101-101]
  expr_op := • expr_op UPDATE expr_op [101-101]
  expr_op := • expr_op ? attrpath [101-101]
  expr_op := • expr_op + expr_op [101-101]
  expr_op := • expr_op - expr_op [101-101]
  expr_op := • expr_op * expr_op [101-101]
  expr_op := • expr_op / expr_op [101-101]
  expr_op := • expr_op CONCAT expr_op [101-101]
  expr_op := • expr_app [101-101]
  expr_app := • expr_app expr_select [101-101]
  expr_app := • expr_select [101-101]
  expr_select := • expr_simple . attrpath [101-101]
  expr_select := • expr_simple . attrpath OR_KW expr_select [101-101]
  expr_select := • expr_simple OR_KW [101-101]
  expr_select := • expr_simple [101-101]
  expr_simple := • " string_parts " [101-101]
  " := • "\"" [101-101]
102
  " := "\"" • [101-102]
  expr_simple := " • string_parts " [101-102]
  string_parts := • STR [102-102]
  string_parts := • string_parts_interpolated [102-102]
  string_parts := • [102-102]
  STR := • "STR" [102-102]
  string_parts_interpolated := • string_parts_interpolated STR [102-102]
  string_parts_interpolated := • string_parts_interpolated DOLLAR_CURLY expr } [102-102]
  string_parts_interpolated := • STR DOLLAR_CURLY expr } [102-102]
  expr_simple := " string_parts • " [101-102]
103
  STR := "STR" • [102-103]
  string_parts := STR • [102-103]
  string_parts_interpolated := STR • DOLLAR_CURLY expr } [102-103]
  expr_simple := " string_parts • " [101-103]
  DOLLAR_CURLY := • "DOLLAR_CURLY" [103-103]
104
  DOLLAR_CURLY := "DOLLAR_CURLY" • [103-104]
  string_parts_interpolated := STR DOLLAR_CURLY • expr } [102-104]
  expr := • expr_function [104-104]
  expr_function := • ID : expr_function [104-104]
  expr_function := • ID @ { formals } : expr_function [104-104]
  expr_function := • expr_if [104-104]
  ID := • "ID" [104-104]
  expr_if := • expr_op [104-104]
  expr_op := • expr_op EQ expr_op [104-104]
  expr_op := • expr_op NEQ expr_op [104-104]
  expr_op := • expr_op < expr_op [104-104]
  expr_op := • expr_op LEQ expr_op [104-104]
  expr_op := • expr_op > expr_op [104-104]
  expr_op := • expr_op GEQ expr_op [104-104]
  expr_op := • expr_op AND expr_op [104-104]
  expr_op := • expr_op OR expr_op [104-104]
  expr_op := • expr_op IMPL expr_op [104-104]
  expr_op := • expr_op UPDATE expr_op [104-104]
  expr_op := • expr_op ? attrpath [104-104]
  expr_op := • expr_op + expr_op [104-104]
  expr_op := • expr_op - expr_op [104-104]
  expr_op := • expr_op * expr_op [104-104]
  expr_op := • expr_op / expr_op [104-104]
  expr_op := • expr_op CONCAT expr_op [104-104]
  expr_op := • expr_app [104-104]
  expr_app := • expr_app expr_select [104-104]
  expr_app := • expr_select [104-104]
  expr_select := • expr_simple . attrpath [104-104]
  expr_select := • expr_simple . attrpath OR_KW expr_select [104-104]
  expr_select := • expr_simple OR_KW [104-104]
  expr_select := • expr_simple [104-104]
  expr_simple := • ID [104-104]
105
  ID := "ID" • [104-105]
  expr_function := ID • : expr_function [104-105]
  expr_function := ID • @ { formals } : expr_function [104-105]
  expr_simple := ID • [104-105]
  expr_select := expr_simple • . attrpath [104-105]
  expr_select := expr_simple • . attrpath OR_KW expr_select [104-105]
  expr_select := expr_simple • OR_KW [104-105]
  expr_select := expr_simple • [104-105]
  expr_app := expr_select • [104-105]
  expr_op := expr_app • [104-105]
  expr_app := expr_app • expr_select [104-105]
  expr_if := expr_op • [104-105]
  expr_op := expr_op • EQ expr_op [104-105]
  expr_op := expr_op • NEQ expr_op [104-105]
  expr_op := expr_op • < expr_op [104-105]
  expr_op := expr_op • LEQ expr_op [104-105]
  expr_op := expr_op • > expr_op [104-105]
  expr_op := expr_op • GEQ expr_op [104-105]
  expr_op := expr_op • AND expr_op [104-105]
  expr_op := expr_op • OR expr_op [104-105]
  expr_op := expr_op • IMPL expr_op [104-105]
  expr_op := expr_op • UPDATE expr_op [104-105]
  expr_op := expr_op • ? attrpath [104-105]
  expr_op := expr_op • + expr_op [104-105]
  expr_op := expr_op • - expr_op [104-105]
  expr_op := expr_op • * expr_op [104-105]
  expr_op := expr_op • / expr_op [104-105]
  expr_op := expr_op • CONCAT expr_op [104-105]
  expr_function := expr_if • [104-105]
  expr := expr_function • [104-105]
  string_parts_interpolated := STR DOLLAR_CURLY expr • } [102-105]
  } := • "}" [105-105]
106
  } := "}" • [105-106]
  string_parts_interpolated := STR DOLLAR_CURLY expr } • [102-106]
  string_parts := string_parts_interpolated • [102-106]
  string_parts_interpolated := string_parts_interpolated • STR [102-106]
  string_parts_interpolated := string_parts_interpolated • DOLLAR_CURLY expr } [102-106]
  expr_simple := " string_parts • " [101-106]
  STR := • "STR" [106-106]
107
  STR := "STR" • [106-107]
  string_parts_interpolated := string_parts_interpolated STR • [102-107]
  string_parts := string_parts_interpolated • [102-107]
  string_parts_interpolated := string_parts_interpolated • STR [102-107]
  string_parts_interpolated := string_parts_interpolated • DOLLAR_CURLY expr } [102-107]
  expr_simple := " string_parts • " [101-107]
  " := • "\"" [107-107]
108
  " := "\"" • [107-108]
  expr_simple := " string_parts " • [101-108]
  expr_select := expr_simple • . attrpath [101-108]
  expr_select := expr_simple • . attrpath OR_KW expr_select [101-108]
  expr_select := expr_simple • OR_KW [101-108]
  expr_select := expr_simple • [101-108]
  expr_app := expr_select • [101-108]
  expr_op := expr_app • [101-108]
  expr_app := expr_app • expr_select [101-108]
  expr_if := expr_op • [101-108]
  expr_op := expr_op • EQ expr_op [101-108]
  expr_op := expr_op • NEQ expr_op [101-108]
  expr_op := expr_op • < expr_op [101-108]
  expr_op := expr_op • LEQ expr_op [101-108]
  expr_op := expr_op • > expr_op [101-108]
  expr_op := expr_op • GEQ expr_op [101-108]
  expr_op := expr_op • AND expr_op [101-108]
  expr_op := expr_op • OR expr_op [101-108]
  expr_op := expr_op • IMPL expr_op [101-108]
  expr_op := expr_op • UPDATE expr_op [101-108]
  expr_op := expr_op • ? attrpath [101-108]
  expr_op := expr_op • + expr_op [101-108]
  expr_op := expr_op • - expr_op [101-108]
  expr_op := expr_op • * expr_op [101-108]
  expr_op := expr_op • / expr_op [101-108]
  expr_op := expr_op • CONCAT expr_op [101-108]
  expr_function := expr_if • [101-108]
  expr := expr_function • [101-108]
  binds := binds attrpath = expr • ; [87-108]
  ; := • ";" [108-108]
109
  ; := ";" • [108-109]
  binds := binds attrpath = expr ; • [87-109]
  expr_simple := { binds • } [86-109]
  binds := binds • attrpath = expr ; [87-109]
  binds := binds • INHERIT attrs ; [87-109]
  binds := binds • INHERIT ( expr ) attrs ; [87-109]
  attrpath := • attrpath . attr [109-109]
  attrpath := • attrpath . string_attr [109-109]
  attrpath := • attr [109-109]
  attr := • ID [109-109]
  ID := • "ID" [109-109]
110
  ID := "ID" • [109-110]
  attr := ID • [109-110]
  attrpath := attr • [109-110]
  binds := binds attrpath • = expr ; [87-110]
  attrpath := attrpath • . attr [109-110]
  attrpath := attrpath • . string_attr [109-110]
  = := • "=" [110-110]
111
  = := "=" • [110-111]
  binds := binds attrpath = • expr ; [87-111]
  expr := • expr_function [111-111]
  expr_function := • ID : expr_function [111-111]
  expr_function := • ID @ { formals } : expr_function [111-111]
  expr_function := • expr_if [111-111]
  ID := • "ID" [111-111]
  expr_if := • expr_op [111-111]
  expr_op := • expr_op EQ expr_op [111-111]
  expr_op := • expr_op NEQ expr_op [111-111]
  expr_op := • expr_op < expr_op [111-111]
  expr_op := • expr_op LEQ expr_op [111-111]
  expr_op := • expr_op > expr_op [111-111]
  expr_op := • expr_op GEQ expr_op [111-111]
  expr_op := • expr_op AND expr_op [111-111]
  expr_op := • expr_op OR expr_op [111-111]
  expr_op := • expr_op IMPL expr_op [111-111]
  expr_op := • expr_op UPDATE expr_op [111-111]
  expr_op := • expr_op ? attrpath [111-111]
  expr_op := • expr_op + expr_op [111-111]
  expr_op := • expr_op - expr_op [111-111]
  expr_op := • expr_op * expr_op [111-111]
  expr_op := • expr_op / expr_op [111-111]
  expr_op := • expr_op CONCAT expr_op [111-111]
  expr_op := • expr_app [111-111]
  expr_app := • expr_app expr_select [111-111]
  expr_app := • expr_select [111-111]
  expr_select := • expr_simple . attrpath [111-111]
  expr_select := • expr_simple . attrpath OR_KW expr_select [111-111]
  expr_select := • expr_simple OR_KW [111-111]
  expr_select := • expr_simple [111-111]
  expr_simple := • ID [111-111]
112
  ID := "ID" • [111-112]
  expr_function := ID • : expr_function [111-112]
  expr_function := ID • @ { formals } : expr_function [111-112]
  expr_simple := ID • [111-112]
  expr_select := expr_simple • . attrpath [111-112]
  expr_select := expr_simple • . attrpath OR_KW expr_select [111-112]
  expr_select := expr_simple • OR_KW [111-112]
  expr_select := expr_simple • [111-112]
  . := • "." [112-112]
  expr_app := expr_select • [111-112]
  expr_op := expr_app • [111-112]
  expr_app := expr_app • expr_select [111-112]
  expr_if := expr_op • [111-112]
  expr_op := expr_op • EQ expr_op [111-112]
  expr_op := expr_op • NEQ expr_op [111-112]
  expr_op := expr_op • < expr_op [111-112]
  expr_op := expr_op • LEQ expr_op [111-112]
  expr_op := expr_op • > expr_op [111-112]
  expr_op := expr_op • GEQ expr_op [111-112]
  expr_op := expr_op • AND expr_op [111-112]
  expr_op := expr_op • OR expr_op [111-112]
  expr_op := expr_op • IMPL expr_op [111-112]
  expr_op := expr_op • UPDATE expr_op [111-112]
  expr_op := expr_op • ? attrpath [111-112]
  expr_op := expr_op • + expr_op [111-112]
  expr_op := expr_op • - expr_op [111-112]
  expr_op := expr_op • * expr_op [111-112]
  expr_op := expr_op • / expr_op [111-112]
  expr_op := expr_op • CONCAT expr_op [111-112]
  expr_function := expr_if • [111-112]
  expr := expr_function • [111-112]
  binds := binds attrpath = expr • ; [87-112]
113
  . := "." • [112-113]
  expr_select := expr_simple . • attrpath [111-113]
  expr_select := expr_simple . • attrpath OR_KW expr_select [111-113]
  attrpath := • attrpath . attr [113-113]
  attrpath := • attrpath . string_attr [113-113]
  attrpath := • attr [113-113]
  attr := • ID [113-113]
  ID := • "ID" [113-113]
114
  ID := "ID" • [113-114]
  attr := ID • [113-114]
  attrpath := attr • [113-114]
  expr_select := expr_simple . attrpath • [111-114]
  expr_select := expr_simple . attrpath • OR_KW expr_select [111-114]
  attrpath := attrpath • . attr [113-114]
  attrpath := attrpath • . string_attr [113-114]
  expr_app := expr_select • [111-114]
  expr_op := expr_app • [111-114]
  expr_app := expr_app • expr_select [111-114]
  expr_if := expr_op • [111-114]
  expr_op := expr_op • EQ expr_op [111-114]
  expr_op := expr_op • NEQ expr_op [111-114]
  expr_op := expr_op • < expr_op [111-114]
  expr_op := expr_op • LEQ expr_op [111-114]
  expr_op := expr_op • > expr_op [111-114]
  expr_op := expr_op • GEQ expr_op [111-114]
  expr_op := expr_op • AND expr_op [111-114]
  expr_op := expr_op • OR expr_op [111-114]
  expr_op := expr_op • IMPL expr_op [111-114]
  expr_op := expr_op • UPDATE expr_op [111-114]
  expr_op := expr_op • ? attrpath [111-114]
  expr_op := expr_op • + expr_op [111-114]
  expr_op := expr_op • - expr_op [111-114]
  expr_op := expr_op • * expr_op [111-114]
  expr_op := expr_op • / expr_op [111-114]
  expr_op := expr_op • CONCAT expr_op [111-114]
  expr_function := expr_if • [111-114]
  expr := expr_function • [111-114]
  binds := binds attrpath = expr • ; [87-114]
  ; := • ";" [114-114]
115
  ; := ";" • [114-115]
  binds := binds attrpath = expr ; • [87-115]
  expr_simple := { binds • } [86-115]
  binds := binds • attrpath = expr ; [87-115]
  binds := binds • INHERIT attrs ; [87-115]
  binds := binds • INHERIT ( expr ) attrs ; [87-115]
  attrpath := • attrpath . attr [115-115]
  attrpath := • attrpath . string_attr [115-115]
  attrpath := • attr [115-115]
  attr := • ID [115-115]
  ID := • "ID" [115-115]
116
  ID := "ID" • [115-116]
  attr := ID • [115-116]
  attrpath := attr • [115-116]
  binds := binds attrpath • = expr ; [87-116]
  attrpath := attrpath • . attr [115-116]
  attrpath := attrpath • . string_attr [115-116]
  = := • "=" [116-116]
117
  = := "=" • [116-117]
  binds := binds attrpath = • expr ; [87-117]
  expr := • expr_function [117-117]
  expr_function := • WITH expr ; expr_function [117-117]
  WITH := • "WITH" [117-117]
118
  WITH := "WITH" • [117-118]
  expr_function := WITH • expr ; expr_function [117-118]
  expr := • expr_function [118-118]
  expr_function := • ID : expr_function [118-118]
  expr_function := • ID @ { formals } : expr_function [118-118]
  expr_function := • expr_if [118-118]
  ID := • "ID" [118-118]
  expr_if := • expr_op [118-118]
  expr_op := • expr_op EQ expr_op [118-118]
  expr_op := • expr_op NEQ expr_op [118-118]
  expr_op := • expr_op < expr_op [118-118]
  expr_op := • expr_op LEQ expr_op [118-118]
  expr_op := • expr_op > expr_op [118-118]
  expr_op := • expr_op GEQ expr_op [118-118]
  expr_op := • expr_op AND expr_op [118-118]
  expr_op := • expr_op OR expr_op [118-118]
  expr_op := • expr_op IMPL expr_op [118-118]
  expr_op := • expr_op UPDATE expr_op [118-118]
  expr_op := • expr_op ? attrpath [118-118]
  expr_op := • expr_op + expr_op [118-118]
  expr_op := • expr_op - expr_op [118-118]
  expr_op := • expr_op * expr_op [118-118]
  expr_op := • expr_op / expr_op [118-118]
  expr_op := • expr_op CONCAT expr_op [118-118]
  expr_op := • expr_app [118-118]
  expr_app := • expr_app expr_select [118-118]
  expr_app := • expr_select [118-118]
  expr_select := • expr_simple . attrpath [118-118]
  expr_select := • expr_simple . attrpath OR_KW expr_select [118-118]
  expr_select := • expr_simple OR_KW [118-118]
  expr_select := • expr_simple [118-118]
  expr_simple := • ID [118-118]
119
  ID := "ID" • [118-119]
  expr_function := ID • : expr_function [118-119]
  expr_function := ID • @ { formals } : expr_function [118-119]
  expr_simple := ID • [118-119]
  expr_select := expr_simple • . attrpath [118-119]
  expr_select := expr_simple • . attrpath OR_KW expr_select [118-119]
  expr_select := expr_simple • OR_KW [118-119]
  expr_select := expr_simple • [118-119]
  expr_app := expr_select • [118-119]
  expr_op := expr_app • [118-119]
  expr_app := expr_app • expr_select [118-119]
  expr_if := expr_op • [118-119]
  expr_op := expr_op • EQ expr_op [118-119]
  expr_op := expr_op • NEQ expr_op [118-119]
  expr_op := expr_op • < expr_op [118-119]
  expr_op := expr_op • LEQ expr_op [118-119]
  expr_op := expr_op • > expr_op [118-119]
  expr_op := expr_op • GEQ expr_op [118-119]
  expr_op := expr_op • AND expr_op [118-119]
  expr_op := expr_op • OR expr_op [118-119]
  expr_op := expr_op • IMPL expr_op [118-119]
  expr_op := expr_op • UPDATE expr_op [118-119]
  expr_op := expr_op • ? attrpath [118-119]
  expr_op := expr_op • + expr_op [118-119]
  expr_op := expr_op • - expr_op [118-119]
  expr_op := expr_op • * expr_op [118-119]
  expr_op := expr_op • / expr_op [118-119]
  expr_op := expr_op • CONCAT expr_op [118-119]
  expr_function := expr_if • [118-119]
  expr := expr_function • [118-119]
  expr_function := WITH expr • ; expr_function [117-119]
  ; := • ";" [119-119]
120
  ; := ";" • [119-120]
  expr_function := WITH expr ; • expr_function [117-120]
  expr_function := • expr_if [120-120]
  expr_if := • expr_op [120-120]
  expr_op := • expr_op EQ expr_op [120-120]
  expr_op := • expr_op NEQ expr_op [120-120]
  expr_op := • expr_op < expr_op [120-120]
  expr_op := • expr_op LEQ expr_op [120-120]
  expr_op := • expr_op > expr_op [120-120]
  expr_op := • expr_op GEQ expr_op [120-120]
  expr_op := • expr_op AND expr_op [120-120]
  expr_op := • expr_op OR expr_op [120-120]
  expr_op := • expr_op IMPL expr_op [120-120]
  expr_op := • expr_op UPDATE expr_op [120-120]
  expr_op := • expr_op ? attrpath [120-120]
  expr_op := • expr_op + expr_op [120-120]
  expr_op := • expr_op - expr_op [120-120]
  expr_op := • expr_op * expr_op [120-120]
  expr_op := • expr_op / expr_op [120-120]
  expr_op := • expr_op CONCAT expr_op [120-120]
  expr_op := • expr_app [120-120]
  expr_app := • expr_app expr_select [120-120]
  expr_app := • expr_select [120-120]
  expr_select := • expr_simple . attrpath [120-120]
  expr_select := • expr_simple . attrpath OR_KW expr_select [120-120]
  expr_select := • expr_simple OR_KW [120-120]
  expr_select := • expr_simple [120-120]
  expr_simple := • [ expr_list ] [120-120]
  [ := • "[" [120-120]
121
  [ := "[" • [120-121]
  expr_simple := [ • expr_list ] [120-121]
  expr_list := • expr_list expr_select [121-121]
  expr_list := • [121-121]
  expr_simple := [ expr_list • ] [120-121]
  expr_list := expr_list • expr_select [121-121]
  expr_select := • expr_simple . attrpath [121-121]
  expr_select := • expr_simple . attrpath OR_KW expr_select [121-121]
  expr_select := • expr_simple OR_KW [121-121]
  expr_select := • expr_simple [121-121]
  expr_simple := • ID [121-121]
  ID := • "ID" [121-121]
122
  ID := "ID" • [121-122]
  expr_simple := ID • [121-122]
  expr_select := expr_simple • . attrpath [121-122]
  expr_select := expr_simple • . attrpath OR_KW expr_select [121-122]
  expr_select := expr_simple • OR_KW [121-122]
  expr_select := expr_simple • [121-122]
  expr_list := expr_list expr_select • [121-122]
  expr_simple := [ expr_list • ] [120-122]
  expr_list := expr_list • expr_select [121-122]
  expr_select := • expr_simple . attrpath [122-122]
  expr_select := • expr_simple . attrpath OR_KW expr_select [122-122]
  expr_select := • expr_simple OR_KW [122-122]
  expr_select := • expr_simple [122-122]
  expr_simple := • ID [122-122]
  ID := • "ID" [122-122]
123
  ID := "ID" • [122-123]
  expr_simple := ID • [122-123]
  expr_select := expr_simple • . attrpath [122-123]
  expr_select := expr_simple • . attrpath OR_KW expr_select [122-123]
  expr_select := expr_simple • OR_KW [122-123]
  expr_select := expr_simple • [122-123]
  expr_list := expr_list expr_select • [121-123]
  expr_simple := [ expr_list • ] [120-123]
  expr_list := expr_list • expr_select [121-123]
  ] := • "]" [123-123]
124
  ] := "]" • [123-124]
  expr_simple := [ expr_list ] • [120-124]
  expr_select := expr_simple • . attrpath [120-124]
  expr_select := expr_simple • . attrpath OR_KW expr_select [120-124]
  expr_select := expr_simple • OR_KW [120-124]
  expr_select := expr_simple • [120-124]
  expr_app := expr_select • [120-124]
  expr_op := expr_app • [120-124]
  expr_app := expr_app • expr_select [120-124]
  expr_if := expr_op • [120-124]
  expr_op := expr_op • EQ expr_op [120-124]
  expr_op := expr_op • NEQ expr_op [120-124]
  expr_op := expr_op • < expr_op [120-124]
  expr_op := expr_op • LEQ expr_op [120-124]
  expr_op := expr_op • > expr_op [120-124]
  expr_op := expr_op • GEQ expr_op [120-124]
  expr_op := expr_op • AND expr_op [120-124]
  expr_op := expr_op • OR expr_op [120-124]
  expr_op := expr_op • IMPL expr_op [120-124]
  expr_op := expr_op • UPDATE expr_op [120-124]
  expr_op := expr_op • ? attrpath [120-124]
  expr_op := expr_op • + expr_op [120-124]
  expr_op := expr_op • - expr_op [120-124]
  expr_op := expr_op • * expr_op [120-124]
  expr_op := expr_op • / expr_op [120-124]
  expr_op := expr_op • CONCAT expr_op [120-124]
  expr_function := expr_if • [120-124]
  expr_function := WITH expr ; expr_function • [117-124]
  expr := expr_function • [117-124]
  binds := binds attrpath = expr • ; [87-124]
  ; := • ";" [124-124]
125
  ; := ";" • [124-125]
  binds := binds attrpath = expr ; • [87-125]
  expr_simple := { binds • } [86-125]
  binds := binds • attrpath = expr ; [87-125]
  binds := binds • INHERIT attrs ; [87-125]
  binds := binds • INHERIT ( expr ) attrs ; [87-125]
  } := • "}" [125-125]
126
  } := "}" • [125-126]
  expr_simple := { binds } • [86-126]
  expr_select := expr_simple • . attrpath [86-126]
  expr_select := expr_simple • . attrpath OR_KW expr_select [86-126]
  expr_select := expr_simple • OR_KW [86-126]
  expr_select := expr_simple • [86-126]
  expr_app := expr_select • [86-126]
  expr_op := expr_app • [86-126]
  expr_app := expr_app • expr_select [86-126]
  expr_if := expr_op • [86-126]
  expr_op := expr_op • EQ expr_op [86-126]
  expr_op := expr_op • NEQ expr_op [86-126]
  expr_op := expr_op • < expr_op [86-126]
  expr_op := expr_op • LEQ expr_op [86-126]
  expr_op := expr_op • > expr_op [86-126]
  expr_op := expr_op • GEQ expr_op [86-126]
  expr_op := expr_op • AND expr_op [86-126]
  expr_op := expr_op • OR expr_op [86-126]
  expr_op := expr_op • IMPL expr_op [86-126]
  expr_op := expr_op • UPDATE expr_op [86-126]
  expr_op := expr_op • ? attrpath [86-126]
  expr_op := expr_op • + expr_op [86-126]
  expr_op := expr_op • - expr_op [86-126]
  expr_op := expr_op • * expr_op [86-126]
  expr_op := expr_op • / expr_op [86-126]
  expr_op := expr_op • CONCAT expr_op [86-126]
  expr_function := expr_if • [86-126]
  expr_function := WITH expr ; expr_function • [83-126]
  expr := expr_function • [83-126]
  binds := binds attrpath = expr • ; [18-126]
  ; := • ";" [126-126]
127
  ; := ";" • [126-127]
  binds := binds attrpath = expr ; • [18-127]
  expr_simple := REC { binds • } [16-127]
  binds := binds • attrpath = expr ; [18-127]
  binds := binds • INHERIT attrs ; [18-127]
  binds := binds • INHERIT ( expr ) attrs ; [18-127]
  } := • "}" [127-127]
128
  } := "}" • [127-128]
  expr_simple := REC { binds } • [16-128]
  expr_select := expr_simple • . attrpath [16-128]
  expr_select := expr_simple • . attrpath OR_KW expr_select [16-128]
  expr_select := expr_simple • OR_KW [16-128]
  expr_select := expr_simple • [16-128]
  . := • "." [128-128]
  OR_KW := • "OR_KW" [128-128]
  expr_app := expr_app expr_select • [13-128]
  expr_op := expr_app • [13-128]
  expr_app := expr_app • expr_select [13-128]
  expr_if := expr_op • [13-128]
  expr_op := expr_op • EQ expr_op [13-128]
  expr_op := expr_op • NEQ expr_op [13-128]
  expr_op := expr_op • < expr_op [13-128]
  expr_op := expr_op • LEQ expr_op [13-128]
  expr_op := expr_op • > expr_op [13-128]
  expr_op := expr_op • GEQ expr_op [13-128]
  expr_op := expr_op • AND expr_op [13-128]
  expr_op := expr_op • OR expr_op [13-128]
  expr_op := expr_op • IMPL expr_op [13-128]
  expr_op := expr_op • UPDATE expr_op [13-128]
  expr_op := expr_op • ? attrpath [13-128]
  expr_op := expr_op • + expr_op [13-128]
  expr_op := expr_op • - expr_op [13-128]
  expr_op := expr_op • * expr_op [13-128]
  expr_op := expr_op • / expr_op [13-128]
  expr_op := expr_op • CONCAT expr_op [13-128]
  expr_select := • expr_simple . attrpath [128-128]
  expr_select := • expr_simple . attrpath OR_KW expr_select [128-128]
  expr_select := • expr_simple OR_KW [128-128]
  expr_select := • expr_simple [128-128]
  expr_function := expr_if • [13-128]
  EQ := • "EQ" [128-128]
  NEQ := • "NEQ" [128-128]
  < := • "<" [128-128]
  LEQ := • "LEQ" [128-128]
  > := • ">" [128-128]
  GEQ := • "GEQ" [128-128]
  AND := • "AND" [128-128]
  OR := • "OR" [128-128]
  IMPL := • "IMPL" [128-128]
  UPDATE := • "UPDATE" [128-128]
  ? := • "?" [128-128]
  + := • "+" [128-128]
  - := • "-" [128-128]
  * := • "*" [128-128]
  / := • "/" [128-128]
  CONCAT := • "CONCAT" [128-128]
  expr_simple := • ID [128-128]
  expr_simple := • INT [128-128]
  expr_simple := • FLOAT [128-128]
  expr_simple := • " string_parts " [128-128]
  expr_simple := • IND_STRING_OPEN ind_string_parts IND_STRING_CLOSE [128-128]
  expr_simple := • path_start PATH_END [128-128]
  expr_simple := • path_start string_parts_interpolated PATH_END [128-128]
  expr_simple := • SPATH [128-128]
  expr_simple := • URI [128-128]
  expr_simple := • ( expr ) [128-128]
  expr_simple := • LET { binds } [128-128]
  expr_simple := • REC { binds } [128-128]
  expr_simple := • { binds } [128-128]
  expr_simple := • [ expr_list ] [128-128]
  expr_function := { formals } : expr_function • [0-128]
  ID := • "ID" [128-128]
  INT := • "INT" [128-128]
  FLOAT := • "FLOAT" [128-128]
  " := • "\"" [128-128]
  IND_STRING_OPEN := • "IND_STRING_OPEN" [128-128]
  path_start := • PATH [128-128]
  path_start := • HPATH [128-128]
  SPATH := • "SPATH" [128-128]
  URI := • "URI" [128-128]
  ( := • "(" [128-128]
  LET := • "LET" [128-128]
  REC := • "REC" [128-128]
  { := • "{" [128-128]
  [ := • "[" [128-128]
  expr := expr_function • [0-128]
  PATH := • "PATH" [128-128]
  HPATH := • "HPATH" [128-128]
  Γ := expr • [0-128]