                      +----+                      
                      | x  |                      
                      |    |                      
                      +----+                      
                         |                        
                         v                        
+------------------------------------------------+
|                   D2 Parser                    |
|                                                |
+------------------------------------------------+
|+reader                           io.RuneReader |
|+readerPos                       d2ast.Position |
|-lookahead                               []rune |
+------------------------------------------------+
|#peekn(n int)              (s string, eof bool) |
|+peek()                      (r rune, eof bool) |
|+rewind()                                  void |
|+commit()                                  void |
|                                                |
+------------------------------------------------+
                         |                        
                         v                        
                      +----+                      
                      | y  |                      
                      |    |                      
                      +----+                      
