January 04, 2005 D doc BNF question | ||||
---|---|---|---|---|
| ||||
An oversimplification of the D BNF expression section has expressions threaded. Here is a grossly simplified example: ---------------------------------------------------------------- Expression: AddExpression AddExpression: MulExpression AddExpression + MulExpression AddExpression - MulExpression MulExpression: PrimaryExpression MulExpression * UnaryExpression MulExpression / UnaryExpression PrimaryExpression: Identifier NumericLiteral ---------------------------------------------------------------- The BNF seems to imply: All expressions are AddExpressions All AddExpressions are MulExpressions All MulExpressions are PrimaryExpressions Which seems counter-intuitive to me. I am wondering why the recursive definition is used instead of something like this: ---------------------------------------------------------------- Expression: PrimaryExpression MulExpression AddExpression PrimaryExpression: Identifier NumericLiteral MulExpression: Expression * Expression Expression / Expression AddExpression: Expression + Expression Expression - Expression ---------------------------------------------------------------- The same threaded style BNF is used in the BNF I found for both ANSI C and Java. I would like to understand why the first instead of the second. Thanks! http://acm.zju.edu.cn/maxiao/major/compile/article/yaccforc.htm http://www.cs.uiowa.edu/~fleck/JavaBNF.htm |
January 04, 2005 Re: D doc BNF question | ||||
---|---|---|---|---|
| ||||
Posted in reply to parabolis | > ----------------------------------------------------------------
> The same threaded style BNF is used in the BNF I found for both ANSI C and Java. I would like to understand why the first instead of the second. Thanks!
unambiguous operator precedence. The expression a+b*c must parse as a+(b*c) and not (a+b)*c.
|
Copyright © 1999-2021 by the D Language Foundation