digitalmars.D - need examples to understand postfix expression grammar
- FabArd (10/10) Apr 16 2023 Hi,
- Timon Gehr (14/28) Apr 16 2023 It's for conversion to the specified basic type (including qualified one...
- Bastiaan Veelo (7/17) Apr 16 2023 I think `double(2)` would be an example, as in
- FabArd (29/29) Apr 19 2023 Thank you for your examples.
- =?UTF-8?Q?Ali_=c3=87ehreli?= (17/19) Apr 19 2023 A couple of perhaps-too-pedantic corrections:
- FabArd (27/27) Apr 20 2023 I am trying to put the D grammar rules into tree-sitter in order
Hi, I have trouble understanding these two rules of grammar : PostfixExpression: - PostfixExpression ( ArgumentListopt ) - TypeCtorsopt BasicType ( ArgumentListopt ) It seems to me that the first rule corresponds to a function call expression. Is my analysis correct? As for the second one, I don't understand how to use it. Can you give me examples of how to use it?
Apr 16 2023
On 4/16/23 18:59, FabArd wrote:Hi, I have trouble understanding these two rules of grammar : PostfixExpression: - PostfixExpression ( ArgumentListopt ) - TypeCtorsopt BasicType ( ArgumentListopt ) It seems to me that the first rule corresponds to a function call expression. Is my analysis correct? ...Yes.As for the second one, I don't understand how to use it. Can you give me examples of how to use it?It's for conversion to the specified basic type (including qualified ones). E.g., this works --- void main(){ auto x = immutable double(2); static assert(is(typeof(x)==immutable double)); assert(x==2); } --- TBH I think it would be better if basic types were just expressions in their own right, but the parser currently is what it is, so atm this requires a specialized grammar rule.
Apr 16 2023
On Sunday, 16 April 2023 at 16:59:21 UTC, FabArd wrote:Hi, I have trouble understanding these two rules of grammar : PostfixExpression: - PostfixExpression ( ArgumentList<sub>opt</sub> ) - TypeCtorsopt BasicType ( ArgumentList<sub>opt</sub> ) It seems to me that the first rule corresponds to a function call expression. Is my analysis correct?I think it is.As for the second one, I don't understand how to use it. Can you give me examples of how to use it?I think `double(2)` would be an example, as in ```d assert(1 / double(2) == 0.5); ``` -- Bastiaan.
Apr 16 2023
Thank you for your examples.
I did some tests based on your examples and I found that you can
also assign a type to an auto variable:
```d
void main(){
auto x = double();
x = 2;
static assert(is(typeof(x) == double));
assert(x == 2);
}
```
Another example with a qualified identifier:
```d
class Test {
enum nb : int {
one = 1
}
}
void main(){
auto d = Test.nb();
static assert(is(typeof(d) == Test.nb));
}
```
It seems that the grammar rule could be written more precisely:
PostfixExpression:
- PostfixExpression ( ArgumentListopt )
- TypeCtors<opt> BasicType ( AssignExpressionopt )
Indeed the type conversion takes only one or no argument but
never a list.
Apr 19 2023
On 4/19/23 08:40, FabArd wrote:assign a type to an auto variable:[...]auto x = double();A couple of perhaps-too-pedantic corrections: 1) "auto variable" is nothing special. D has type inference and 'auto' is just a place holder in your example. Otherwise, type inference is in effect anyway: auto a = double(); const b = double(); immutable c = double(); shared d = double(); static e = double(); nogc f = double(); nothrow g = double(); pure h = double(); 2) The right hand side is not a type but an expression: double() is the construction of a double value of double.init. Ali
Apr 19 2023
I am trying to put the D grammar rules into tree-sitter in order
to understand how it works and to deepen my knowledge of the D
language.
So how to determine the following expressions:
1 Window window = Platform.instance.createWindow("Bezier
curves", 300, 500);
2 window.show();
3 return Platform.instance.enterMessageLoop();
4 Point sz = font.textSize(text);
My problem is that all these expressions are interpreted with
"type conversion" expression rule and not function call
expression rule.
How to distinguish a function call expression from a "type
conversion" expression?
Knowing that the two rules can be applied to all these
expressions.
To solve part of my problem a solution would be to be able to
restrict a rule to its strict minimum. This is why I made the
previous proposal.
Is it correct to restrict this rule as I propose?
If possible, line 1 of the above examples becomes a function call
expression.
If not can you give me examples of type conversion expression
with a list of arguments.
Would there be a safe way to determine a function call expression
from a type conversion expression?
Thanks
Apr 20 2023









Timon Gehr <timon.gehr gmx.ch> 