Abstract syntax of Yul.
We introduce an abstract syntax of Yul based on its concrete syntax; more precisely, on the new grammar.
The abstract syntax defined here is fairly close to the concrete syntax, more precisely to the grammar, which already omits lexical entities like whitespace. The reason for this closeness is that we want to keep as much information as possible in the abstract syntax. In some cases our abstract syntax may be broader than the concrete syntax, to keep the definition of the abstract syntax slightly simpler; the important thing is that all the concrete syntax is representable in abstract syntax.
It is not yet clear whether the proper handling of Yul dialects will require extending this abstract syntax with types (which are not present in the new grammar). For now we omit types, but we may revisit this at some point.