@ ProgramNode (location: (1,0)-(14,10)) ├── locals: [] └── statements: @ StatementsNode (location: (1,0)-(14,10)) └── body: (length: 14) ├── @ RationalNode (location: (1,0)-(1,4)) │ └── numeric: │ @ FloatNode (location: (1,0)-(1,3)) ├── @ RationalNode (location: (2,0)-(2,3)) │ └── numeric: │ @ IntegerNode (location: (2,0)-(2,2)) │ └── flags: decimal ├── @ IntegerNode (location: (3,0)-(3,3)) │ └── flags: hexadecimal ├── @ IntegerNode (location: (4,0)-(4,5)) │ └── flags: decimal ├── @ FloatNode (location: (5,0)-(5,4)) ├── @ FloatNode (location: (6,0)-(6,14)) ├── @ FloatNode (location: (7,0)-(7,15)) ├── @ StringNode (location: (8,0)-(8,2)) │ ├── flags: ∅ │ ├── opening_loc: (8,0)-(8,1) = "?" │ ├── content_loc: (8,1)-(8,2) = "c" │ ├── closing_loc: ∅ │ └── unescaped: "c" ├── @ RegularExpressionNode (location: (9,0)-(9,5)) │ ├── opening_loc: (9,0)-(9,3) = "%r(" │ ├── content_loc: (9,3)-(9,4) = "/" │ ├── closing_loc: (9,4)-(9,5) = ")" │ ├── unescaped: "/" │ └── flags: ∅ ├── @ RegularExpressionNode (location: (10,0)-(10,6)) │ ├── opening_loc: (10,0)-(10,3) = "%r(" │ ├── content_loc: (10,3)-(10,5) = "\\)" │ ├── closing_loc: (10,5)-(10,6) = ")" │ ├── unescaped: "\\)" │ └── flags: ∅ ├── @ InterpolatedRegularExpressionNode (location: (11,0)-(11,14)) │ ├── opening_loc: (11,0)-(11,3) = "%r(" │ ├── parts: (length: 2) │ │ ├── @ EmbeddedStatementsNode (location: (11,3)-(11,10)) │ │ │ ├── opening_loc: (11,3)-(11,5) = "\#{" │ │ │ ├── statements: │ │ │ │ @ StatementsNode (location: (11,5)-(11,9)) │ │ │ │ └── body: (length: 1) │ │ │ │ └── @ InstanceVariableReadNode (location: (11,5)-(11,9)) │ │ │ │ └── name: :@bar │ │ │ └── closing_loc: (11,9)-(11,10) = "}" │ │ └── @ StringNode (location: (11,10)-(11,13)) │ │ ├── flags: ∅ │ │ ├── opening_loc: ∅ │ │ ├── content_loc: (11,10)-(11,13) = "baz" │ │ ├── closing_loc: ∅ │ │ └── unescaped: "baz" │ ├── closing_loc: (11,13)-(11,14) = ")" │ └── flags: ∅ ├── @ FloatNode (location: (12,0)-(12,16)) ├── @ FloatNode (location: (13,0)-(13,17)) └── @ CallNode (location: (14,0)-(14,10)) ├── receiver: ∅ ├── call_operator_loc: ∅ ├── name: :w ├── message_loc: (14,0)-(14,1) = "w" ├── opening_loc: (14,1)-(14,2) = "(" ├── arguments: │ @ ArgumentsNode (location: (14,2)-(14,9)) │ ├── arguments: (length: 1) │ │ └── @ CallNode (location: (14,2)-(14,9)) │ │ ├── receiver: ∅ │ │ ├── call_operator_loc: ∅ │ │ ├── name: :foo │ │ ├── message_loc: (14,2)-(14,5) = "foo" │ │ ├── opening_loc: ∅ │ │ ├── arguments: │ │ │ @ ArgumentsNode (location: (14,6)-(14,9)) │ │ │ ├── arguments: (length: 1) │ │ │ │ └── @ CallNode (location: (14,6)-(14,9)) │ │ │ │ ├── receiver: ∅ │ │ │ │ ├── call_operator_loc: ∅ │ │ │ │ ├── name: :bar │ │ │ │ ├── message_loc: (14,6)-(14,9) = "bar" │ │ │ │ ├── opening_loc: ∅ │ │ │ │ ├── arguments: ∅ │ │ │ │ ├── closing_loc: ∅ │ │ │ │ ├── block: ∅ │ │ │ │ └── flags: variable_call │ │ │ └── flags: ∅ │ │ ├── closing_loc: ∅ │ │ ├── block: ∅ │ │ └── flags: ∅ │ └── flags: ∅ ├── closing_loc: (14,9)-(14,10) = ")" ├── block: ∅ └── flags: ∅