@ ProgramNode (location: (0...434))
├── locals: []
└── statements:
    @ StatementsNode (location: (0...434))
    └── body: (length: 36)
        ├── @ DefNode (location: (0...9))
        │   ├── name: :!
        │   ├── name_loc: (4...5) = "!"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (0...3) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (6...9) = "end"
        ├── @ DefNode (location: (11...21))
        │   ├── name: :!=
        │   ├── name_loc: (15...17) = "!="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (11...14) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (18...21) = "end"
        ├── @ DefNode (location: (23...33))
        │   ├── name: :!~
        │   ├── name_loc: (27...29) = "!~"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (23...26) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (30...33) = "end"
        ├── @ DefNode (location: (35...44))
        │   ├── name: :%
        │   ├── name_loc: (39...40) = "%"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (35...38) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (41...44) = "end"
        ├── @ DefNode (location: (46...60))
        │   ├── name: :+
        │   ├── name_loc: (55...56) = "+"
        │   ├── receiver:
        │   │   @ SelfNode (location: (50...54))
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (46...49) = "def"
        │   ├── operator_loc: (54...55) = "."
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (57...60) = "end"
        ├── @ DefNode (location: (62...71))
        │   ├── name: :&
        │   ├── name_loc: (66...67) = "&"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (62...65) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (68...71) = "end"
        ├── @ DefNode (location: (73...82))
        │   ├── name: :*
        │   ├── name_loc: (77...78) = "*"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (73...76) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (79...82) = "end"
        ├── @ DefNode (location: (84...94))
        │   ├── name: :**
        │   ├── name_loc: (88...90) = "**"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (84...87) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (91...94) = "end"
        ├── @ StringNode (location: (96...102))
        │   ├── opening_loc: (96...98) = "%|"
        │   ├── content_loc: (98...101) = "abc"
        │   ├── closing_loc: (101...102) = "|"
        │   └── unescaped: "abc"
        ├── @ DefNode (location: (104...117))
        │   ├── name: :+
        │   ├── name_loc: (108...109) = "+"
        │   ├── receiver: ∅
        │   ├── parameters:
        │   │   @ ParametersNode (location: (110...113))
        │   │   ├── requireds: (length: 0)
        │   │   ├── optionals: (length: 0)
        │   │   ├── rest: ∅
        │   │   ├── posts: (length: 0)
        │   │   ├── keywords: (length: 0)
        │   │   ├── keyword_rest:
        │   │   │   @ KeywordRestParameterNode (location: (110...113))
        │   │   │   ├── name: :b
        │   │   │   ├── name_loc: (112...113) = "b"
        │   │   │   └── operator_loc: (110...112) = "**"
        │   │   └── block: ∅
        │   ├── body: ∅
        │   ├── locals: [:b]
        │   ├── def_keyword_loc: (104...107) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (114...117) = "end"
        ├── @ DefNode (location: (119...130))
        │   ├── name: :+
        │   ├── name_loc: (123...124) = "+"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (119...122) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: (124...125) = "("
        │   ├── rparen_loc: (125...126) = ")"
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (127...130) = "end"
        ├── @ DefNode (location: (132...143))
        │   ├── name: :+
        │   ├── name_loc: (136...137) = "+"
        │   ├── receiver: ∅
        │   ├── parameters:
        │   │   @ ParametersNode (location: (138...139))
        │   │   ├── requireds: (length: 1)
        │   │   │   └── @ RequiredParameterNode (location: (138...139))
        │   │   │       └── name: :b
        │   │   ├── optionals: (length: 0)
        │   │   ├── rest: ∅
        │   │   ├── posts: (length: 0)
        │   │   ├── keywords: (length: 0)
        │   │   ├── keyword_rest: ∅
        │   │   └── block: ∅
        │   ├── body: ∅
        │   ├── locals: [:b]
        │   ├── def_keyword_loc: (132...135) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (140...143) = "end"
        ├── @ DefNode (location: (145...159))
        │   ├── name: :+
        │   ├── name_loc: (154...155) = "+"
        │   ├── receiver:
        │   │   @ SelfNode (location: (149...153))
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (145...148) = "def"
        │   ├── operator_loc: (153...154) = "."
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (156...159) = "end"
        ├── @ DefNode (location: (161...170))
        │   ├── name: :+
        │   ├── name_loc: (165...166) = "+"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (161...164) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (167...170) = "end"
        ├── @ DefNode (location: (172...182))
        │   ├── name: :+@
        │   ├── name_loc: (176...178) = "+@"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (172...175) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (179...182) = "end"
        ├── @ DefNode (location: (184...193))
        │   ├── name: :-
        │   ├── name_loc: (188...189) = "-"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (184...187) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (190...193) = "end"
        ├── @ DefNode (location: (195...206))
        │   ├── name: :-
        │   ├── name_loc: (201...202) = "-"
        │   ├── receiver:
        │   │   @ CallNode (location: (199...200))
        │   │   ├── receiver: ∅
        │   │   ├── call_operator_loc: ∅
        │   │   ├── message_loc: (199...200) = "a"
        │   │   ├── opening_loc: ∅
        │   │   ├── arguments: ∅
        │   │   ├── closing_loc: ∅
        │   │   ├── block: ∅
        │   │   ├── flags: variable_call
        │   │   └── name: "a"
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (195...198) = "def"
        │   ├── operator_loc: (200...201) = "."
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (203...206) = "end"
        ├── @ DefNode (location: (208...218))
        │   ├── name: :-@
        │   ├── name_loc: (212...214) = "-@"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (208...211) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (215...218) = "end"
        ├── @ DefNode (location: (220...229))
        │   ├── name: :/
        │   ├── name_loc: (224...225) = "/"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (220...223) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (226...229) = "end"
        ├── @ DefNode (location: (231...240))
        │   ├── name: :<
        │   ├── name_loc: (235...236) = "<"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (231...234) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (237...240) = "end"
        ├── @ DefNode (location: (242...252))
        │   ├── name: :<<
        │   ├── name_loc: (246...248) = "<<"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (242...245) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (249...252) = "end"
        ├── @ DefNode (location: (254...264))
        │   ├── name: :<=
        │   ├── name_loc: (258...260) = "<="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (254...257) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (261...264) = "end"
        ├── @ DefNode (location: (266...277))
        │   ├── name: :<=>
        │   ├── name_loc: (270...273) = "<=>"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (266...269) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (274...277) = "end"
        ├── @ DefNode (location: (279...289))
        │   ├── name: :==
        │   ├── name_loc: (283...285) = "=="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (279...282) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (286...289) = "end"
        ├── @ DefNode (location: (291...302))
        │   ├── name: :===
        │   ├── name_loc: (295...298) = "==="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (291...294) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (299...302) = "end"
        ├── @ DefNode (location: (304...314))
        │   ├── name: :=~
        │   ├── name_loc: (308...310) = "=~"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (304...307) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (311...314) = "end"
        ├── @ DefNode (location: (316...325))
        │   ├── name: :>
        │   ├── name_loc: (320...321) = ">"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (316...319) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (322...325) = "end"
        ├── @ DefNode (location: (327...337))
        │   ├── name: :>=
        │   ├── name_loc: (331...333) = ">="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (327...330) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (334...337) = "end"
        ├── @ DefNode (location: (339...349))
        │   ├── name: :>>
        │   ├── name_loc: (343...345) = ">>"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (339...342) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (346...349) = "end"
        ├── @ DefNode (location: (351...361))
        │   ├── name: :[]
        │   ├── name_loc: (355...357) = "[]"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (351...354) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (358...361) = "end"
        ├── @ DefNode (location: (363...374))
        │   ├── name: :[]=
        │   ├── name_loc: (367...370) = "[]="
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (363...366) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (371...374) = "end"
        ├── @ DefNode (location: (376...385))
        │   ├── name: :^
        │   ├── name_loc: (380...381) = "^"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (376...379) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (382...385) = "end"
        ├── @ DefNode (location: (387...396))
        │   ├── name: :`
        │   ├── name_loc: (391...392) = "`"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (387...390) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (393...396) = "end"
        ├── @ DefNode (location: (398...412))
        │   ├── name: :`
        │   ├── name_loc: (407...408) = "`"
        │   ├── receiver:
        │   │   @ SelfNode (location: (402...406))
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (398...401) = "def"
        │   ├── operator_loc: (406...407) = "."
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (409...412) = "end"
        ├── @ DefNode (location: (414...423))
        │   ├── name: :|
        │   ├── name_loc: (418...419) = "|"
        │   ├── receiver: ∅
        │   ├── parameters: ∅
        │   ├── body: ∅
        │   ├── locals: []
        │   ├── def_keyword_loc: (414...417) = "def"
        │   ├── operator_loc: ∅
        │   ├── lparen_loc: ∅
        │   ├── rparen_loc: ∅
        │   ├── equal_loc: ∅
        │   └── end_keyword_loc: (420...423) = "end"
        └── @ DefNode (location: (425...434))
            ├── name: :~
            ├── name_loc: (429...430) = "~"
            ├── receiver: ∅
            ├── parameters: ∅
            ├── body: ∅
            ├── locals: []
            ├── def_keyword_loc: (425...428) = "def"
            ├── operator_loc: ∅
            ├── lparen_loc: ∅
            ├── rparen_loc: ∅
            ├── equal_loc: ∅
            └── end_keyword_loc: (431...434) = "end"
