I was working recently on an ANTLR based parser for the DDT project. As a phase 1. I’m trying to get the current AST hierachy working under this new parser without having to rely on the Descent parser. It isn’t finished yet, but it is at the level of progress where it worthy perhaps for other to look at it. To see what is missing here’s my sketchy list:
- Missing import expression node in the AST
import expression : ‘import’ ‘(‘ assignExpression ‘)’ ;
- Clarify the function literals
- Missing static if expression.
- Missing static assert expression.
- How to deal with conditional statements (version, debug, and such)?
- Struct initializer must be implemented.
- What is ExpIftype is for? Is that something to do with the template stuff? Or static if?
- IsExpression in the AST somewhere? (It’s pretty tough expression btw).
: is ( Type )
| is ( Type : TypeSpecialization )
| is ( Type == TypeSpecialization )
| is ( Type Identifier )
| is ( Type Identifier : TypeSpecialization )
| is ( Type Identifier == TypeSpecialization )
| is ( Type Identifier : TypeSpecialization , TemplateParameterList )
| is ( Type Identifier == TypeSpecialization , TemplateParameterList )
- Template declarations are missing in the parser rules.
- Template instances are missing in the parser rules.
- Proper attribute specifier implementation. (That is, accumulate all the attribute specifier to the corresponding definition).
- Error handling and error recovery resembling to the Descent’s parser’s one.
The actual state is on my clone’s master branch here:
As I try to replace the current parser without changing much of the current state of the code (I made very few, the most obvious
modifications, such as constructors for creating AST nodes without the conversion process, and in very few places I added extra fields to currently existing nodes.), I wouldn’t add at this point any new features, or mess with the AST hierarchy.
This is my first try to create parser with a parser generator, and I admit, many places there’s need to improve the current state. Later on, we should change the ASTNeoNode hierarchy to work with on the CommonTree ANTLR object, which would eliminate the need for individual object creation as an action code. (Not sure completely how, but I think it is possible to create heterogeneous trees with ANTLR using factory pattern which in turn would need the ASTNeoNode classes and
interfaces to be more consistent as they are today. As an example of inconsistencies, at the current state some nodes are using ArrayView, others use simple arrays of objects, and so on.