0
  Γ := • expr [0-0]
  expr := • expr_function [0-0]
  expr_function := • ID : expr_function [0-0]
  expr_function := • ID @ { formals } : expr_function [0-0]
  expr_function := • expr_if [0-0]
  ID := • "ID" [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 := • ID [0-0]
1
  ID := "ID" • [0-1]
  expr_function := ID • : expr_function [0-1]
  expr_function := ID • @ { formals } : expr_function [0-1]
  expr_simple := ID • [0-1]
  expr_select := expr_simple • . attrpath [0-1]
  expr_select := expr_simple • . attrpath OR_KW expr_select [0-1]
  expr_select := expr_simple • OR_KW [0-1]
  expr_select := expr_simple • [0-1]
  expr_app := expr_select • [0-1]
  expr_op := expr_app • [0-1]
  expr_app := expr_app • expr_select [0-1]
  expr_if := expr_op • [0-1]
  expr_op := expr_op • EQ expr_op [0-1]
  expr_op := expr_op • NEQ expr_op [0-1]
  expr_op := expr_op • < expr_op [0-1]
  expr_op := expr_op • LEQ expr_op [0-1]
  expr_op := expr_op • > expr_op [0-1]
  expr_op := expr_op • GEQ expr_op [0-1]
  expr_op := expr_op • AND expr_op [0-1]
  expr_op := expr_op • OR expr_op [0-1]
  expr_op := expr_op • IMPL expr_op [0-1]
  expr_op := expr_op • UPDATE expr_op [0-1]
  expr_op := expr_op • ? attrpath [0-1]
  expr_op := expr_op • + expr_op [0-1]
  expr_op := expr_op • - expr_op [0-1]
  expr_op := expr_op • * expr_op [0-1]
  expr_op := expr_op • / expr_op [0-1]
  expr_op := expr_op • CONCAT expr_op [0-1]
  expr_select := • expr_simple . attrpath [1-1]
  expr_select := • expr_simple . attrpath OR_KW expr_select [1-1]
  expr_select := • expr_simple OR_KW [1-1]
  expr_select := • expr_simple [1-1]
  expr_function := expr_if • [0-1]
  expr_simple := • SPATH [1-1]
  expr := expr_function • [0-1]
  SPATH := • "SPATH" [1-1]
  Γ := expr • [0-1]
2
  SPATH := "SPATH" • [1-2]
  expr_simple := SPATH • [1-2]
  expr_select := expr_simple • . attrpath [1-2]
  expr_select := expr_simple • . attrpath OR_KW expr_select [1-2]
  expr_select := expr_simple • OR_KW [1-2]
  expr_select := expr_simple • [1-2]
  expr_app := expr_app expr_select • [0-2]
  expr_op := expr_app • [0-2]
  expr_app := expr_app • expr_select [0-2]
  expr_if := expr_op • [0-2]
  expr_op := expr_op • EQ expr_op [0-2]
  expr_op := expr_op • NEQ expr_op [0-2]
  expr_op := expr_op • < expr_op [0-2]
  expr_op := expr_op • LEQ expr_op [0-2]
  expr_op := expr_op • > expr_op [0-2]
  expr_op := expr_op • GEQ expr_op [0-2]
  expr_op := expr_op • AND expr_op [0-2]
  expr_op := expr_op • OR expr_op [0-2]
  expr_op := expr_op • IMPL expr_op [0-2]
  expr_op := expr_op • UPDATE expr_op [0-2]
  expr_op := expr_op • ? attrpath [0-2]
  expr_op := expr_op • + expr_op [0-2]
  expr_op := expr_op • - expr_op [0-2]
  expr_op := expr_op • * expr_op [0-2]
  expr_op := expr_op • / expr_op [0-2]
  expr_op := expr_op • CONCAT expr_op [0-2]
  expr_select := • expr_simple . attrpath [2-2]
  expr_select := • expr_simple . attrpath OR_KW expr_select [2-2]
  expr_select := • expr_simple OR_KW [2-2]
  expr_select := • expr_simple [2-2]
  expr_function := expr_if • [0-2]
  expr_simple := • { binds } [2-2]
  expr := expr_function • [0-2]
  { := • "{" [2-2]
  Γ := expr • [0-2]
3
  { := "{" • [2-3]
  expr_simple := { • binds } [2-3]
  binds := • binds attrpath = expr ; [3-3]
  binds := • binds INHERIT attrs ; [3-3]
  binds := • binds INHERIT ( expr ) attrs ; [3-3]
  binds := • [3-3]
  expr_simple := { binds • } [2-3]
  binds := binds • attrpath = expr ; [3-3]
  binds := binds • INHERIT attrs ; [3-3]
  binds := binds • INHERIT ( expr ) attrs ; [3-3]
  } := • "}" [3-3]
4
  } := "}" • [3-4]
  expr_simple := { binds } • [2-4]
  expr_select := expr_simple • . attrpath [2-4]
  expr_select := expr_simple • . attrpath OR_KW expr_select [2-4]
  expr_select := expr_simple • OR_KW [2-4]
  expr_select := expr_simple • [2-4]
  . := • "." [4-4]
  OR_KW := • "OR_KW" [4-4]
  expr_app := expr_app expr_select • [0-4]
  expr_op := expr_app • [0-4]
  expr_app := expr_app • expr_select [0-4]
  expr_if := expr_op • [0-4]
  expr_op := expr_op • EQ expr_op [0-4]
  expr_op := expr_op • NEQ expr_op [0-4]
  expr_op := expr_op • < expr_op [0-4]
  expr_op := expr_op • LEQ expr_op [0-4]
  expr_op := expr_op • > expr_op [0-4]
  expr_op := expr_op • GEQ expr_op [0-4]
  expr_op := expr_op • AND expr_op [0-4]
  expr_op := expr_op • OR expr_op [0-4]
  expr_op := expr_op • IMPL expr_op [0-4]
  expr_op := expr_op • UPDATE expr_op [0-4]
  expr_op := expr_op • ? attrpath [0-4]
  expr_op := expr_op • + expr_op [0-4]
  expr_op := expr_op • - expr_op [0-4]
  expr_op := expr_op • * expr_op [0-4]
  expr_op := expr_op • / expr_op [0-4]
  expr_op := expr_op • CONCAT expr_op [0-4]
  expr_select := • expr_simple . attrpath [4-4]
  expr_select := • expr_simple . attrpath OR_KW expr_select [4-4]
  expr_select := • expr_simple OR_KW [4-4]
  expr_select := • expr_simple [4-4]
  expr_function := expr_if • [0-4]
  EQ := • "EQ" [4-4]
  NEQ := • "NEQ" [4-4]
  < := • "<" [4-4]
  LEQ := • "LEQ" [4-4]
  > := • ">" [4-4]
  GEQ := • "GEQ" [4-4]
  AND := • "AND" [4-4]
  OR := • "OR" [4-4]
  IMPL := • "IMPL" [4-4]
  UPDATE := • "UPDATE" [4-4]
  ? := • "?" [4-4]
  + := • "+" [4-4]
  - := • "-" [4-4]
  * := • "*" [4-4]
  / := • "/" [4-4]
  CONCAT := • "CONCAT" [4-4]
  expr_simple := • ID [4-4]
  expr_simple := • INT [4-4]
  expr_simple := • FLOAT [4-4]
  expr_simple := • " string_parts " [4-4]
  expr_simple := • IND_STRING_OPEN ind_string_parts IND_STRING_CLOSE [4-4]
  expr_simple := • path_start PATH_END [4-4]
  expr_simple := • path_start string_parts_interpolated PATH_END [4-4]
  expr_simple := • SPATH [4-4]
  expr_simple := • URI [4-4]
  expr_simple := • ( expr ) [4-4]
  expr_simple := • LET { binds } [4-4]
  expr_simple := • REC { binds } [4-4]
  expr_simple := • { binds } [4-4]
  expr_simple := • [ expr_list ] [4-4]
  expr := expr_function • [0-4]
  ID := • "ID" [4-4]
  INT := • "INT" [4-4]
  FLOAT := • "FLOAT" [4-4]
  " := • "\"" [4-4]
  IND_STRING_OPEN := • "IND_STRING_OPEN" [4-4]
  path_start := • PATH [4-4]
  path_start := • HPATH [4-4]
  SPATH := • "SPATH" [4-4]
  URI := • "URI" [4-4]
  ( := • "(" [4-4]
  LET := • "LET" [4-4]
  REC := • "REC" [4-4]
  { := • "{" [4-4]
  [ := • "[" [4-4]
  Γ := expr • [0-4]
  PATH := • "PATH" [4-4]
  HPATH := • "HPATH" [4-4]