Some languages may have rules like:
expression : logicalExpression (logicalOp logicalExpression)?
logicalExpression : relation (relationalOp relation)?
relation : term (addOp term)?
term : factor (multOp factor)?
factor : (unaryOp) primary
primary : instantiation | variable | functionCall | literal
instantiation : NEW ( namespaceIdentifier '.')? className
'(' (expression ( ',' expression ))? ')'
functionCall : identifier '(' (expression ( ',' expression))? ')'
How would you handle the instantaion or function call? We'd need to add customization so
these can be lexed/parsed as a primary element of the expression.