context-free grammar
SiegeLord
none at none.org
Fri Mar 4 20:01:01 PST 2011
bearophile Wrote:
> Simen kjaeraas:
>
> > Well, obviously not. The grammar has one and only one meaning for that
> > example - that of an a* called b, being set to c. This can be inferred
> > with no other context.
>
> This little program:
>
> struct Foo {
> int x;
> Foo opBinary(string op:"*")(Foo other) {
> Foo result = Foo(x * other.x);
> return result;
> }
> void opAssign(Foo other) {
> x = other.x;
> }
> }
> void main() {
> Foo a, b, c;
> a * b = c;
> }
>
> Gives:
> test.d(10): Error: a is used as a type
> test.d(10): Error: cannot implicitly convert expression (c) of type Foo to _error_*
> test.d(10): Error: declaration test.main.b is already defined
>
>
> While this one gives no errors:
>
> struct Foo {
> int x;
> Foo opBinary(string op:"*")(Foo other) {
> Foo result = Foo(x * other.x);
> return result;
> }
> void opAssign(Foo other) {
> x = other.x;
> }
> }
> void main() {
> Foo a, b, c;
> (a * b) = c;
> }
>
> Bye,
> bearophile
Yeah, and this:
struct Foo {
}
void main() {
Foo a, b, c;
(a * b) = c;
}
Gives an error. I don't see any problem here:
a * b; // always a pointer declaration
(a * b); // always a binary expression
-SiegeLord
More information about the Digitalmars-d
mailing list