Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [Dltk-dev] AST Discussion

Hi Andrey, yes removing is a good first step.

Generalize the ASTNode hierarchy so it better fits all dynamic languages. Various languages have different notions of what an '_expression_' and a 'statement' are. I suggest removing _expression_ and Statement from the ASTNode hierarchy (i.e. flattening the hierchy).

I believe those nodes are mostly unused already, so removing them completely would be a logic step forward. +1.

Modify the ASTVisitor to support the flattened hierarchy, currently it has

visit(_expression_ ..) visit(Statement..) visit(MethodDeclaration... visit(ModuleDeclaration and visit(TypeDeclaration...

change to something like

visitExpression(ASTNode.. visitStatement(ASTNode etc

and each node would have to call the appropriate visit method.  

For supporting a single language it makes sense since it helps represents the structure/logic of the grammar/ast but it's not required and since it's problematic for multiple languages, I think you are probably right that we could ignore it in the visitor.
 Is there any reason to differentiate statements and expressions at the visitor level? Is anything in DLTK core interested in that information at all?

AST's would probably have to be created from factories so they can be configured for each language (ie whether an type of node is a statement or _expression_). 

Yes that makes sense. I guess we need input from some of the other languages, do they need the information about whether something is an _expression_ or not? 

I believe a somewhat better idea is to provide abstract AST classes, so that concrete language frameworks can derive from them and provide specific language-dependant behaviour/properties, such as whether the node is a statement.

On the other hand, we might finally have some use for Bit1..Bit64 flags. (BTW my request to add another 64 was completely ignored. I still miss them!) 
 
Just curious what did you want the extra bits for?
 
Mark 

Anyway, the method of AST node creation is up to the language framework, so this does not really matter for the design of DLTK core.


Andrey.


Back to the top