-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
entweder ..., oder operator #72
Conversation
alias for unequal
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ein XOR Operator ist eine gute Idee, allerdings braucht es tatsächlich einen eigenen Operator, und nicht nur Syntax-Sugar:
Schreibe (entweder "Hallo", oder "Welt") auf eine Zeile.
Die Ausgabe ist "wahr", was überhaupt keinen Sinn macht, da man entweder "Hallo" oder "Welt" erwarten würde.
Dieser naive Fix funktioniert auch nicht:
return &ast.BinaryExpr{
Range: token.Range{
Start: tok.Range.Start,
End: rhs.GetRange().End,
},
Tok: *tok,
Lhs: &ast.CastExpr{
Range: lhs.GetRange(),
Lhs: lhs,
Type: ddptypes.WAHRHEITSWERT,
},
Operator: ast.BIN_UNEQUAL,
Rhs: &ast.CastExpr{
Range: rhs.GetRange(),
Lhs: rhs,
Type: ddptypes.WAHRHEITSWERT,
},
}
denn die Fehlermeldung wäre:
Typ Fehler (3004) in test.ddp (Z: 3, S: 20)
3 | Schreibe (entweder "Hallo", oder "Welt") auf eine Zeile.
| ^^^^^^^
Ein Ausdruck vom Typ Text kann nicht in den Typ Wahrheitswert umgewandelt werden.
Diese Fehlermeldung ist nicht sonderlich genau, und man kennt sie eigentlich nur vom als
Operator.
Warum?
Um eine
entweder ... oder ...
Entscheidung in DDP machen zu können, müsste man, entweder den Boolschen Ausdruck ausschreiben, oder den ungleich Operator benutzen.Das Ausschreiben ist da aber viel zu lang:
Wenn (nicht a und b) ist oder (a und nicht b) ist, ...
und den ungleich Operator bei Wahrheitswerten zu benutzen macht Sprachlich wenig sinn.Beispiel
Implementation
Der
entweder ..., oder ...
ist nur Zucker für denungleich
operator, da er sich genau so verhält wie ein XOR.Hinweis: Diese PR hat nichts mit #65 zu tun - es fügt nur
entweder ... oder
als Binären Operator hinzu.