In addition, here's a few exercises. What do the following get tokenized as?

&^==
&&^
<<-
++=
-&^
/^*

> On Oct 31, 2016, at 4:48 PM, Pietro Gagliardi <andl...@lostsig.net> wrote:
> 
> In Go, as in most languages, spaces do not *have to* delimit tokens. A token 
> ends when the leftmost longest matching token is found, and the rest is 
> placed back in the input buffer for the next token. So
> 
>       &&& true
>       1) read & — this can be &, &=, &&, &^, or &^=, so read again
>       2) read & — we now have &&, can't go further so give && to parser
>       3) read & — this can be &, &=, &&, &^, or &^=, so read again
>       4) read space — no match; give the & we have saved to the parser, then 
> ignore the space
>       5) read "true" (which itself breaks down into steps like the above)
> 
> I know there are some languages (like Swift) which allow you to create your 
> own operators, and thus have certain rules for significant spaces; to my 
> knowledge, these are in the minority.
> 
>> On Oct 31, 2016, at 3:45 PM, mhhc...@gmail.com <mailto:mhhc...@gmail.com> 
>> wrote:
>> 
>> Hi,
>> 
>> noticed that an instant ago,
>> 
>> package main
>> import (
>>     "fmt"
>> )
>> 
>> func main() {
>>     if true &&& true &&& false {
>>         fmt.Println("ok")
>>     }
>> }
>> 
>> Gives this output,
>> 
>> tmp/sandbox074568120/main.go:8: cannot take the address of true
>> tmp/sandbox074568120/main.go:8: invalid operation: true && &true (mismatched 
>> types bool and *bool)
>> tmp/sandbox074568120/main.go:8: cannot take the address of false
>> 
>> the triple ampersands is parsed as : 
>> true && &true
>> 
>> No syntax error is reported :/ &&& is not intended, its a typo and should be 
>> reported so.
>> 
>> In my simple example its still ok because another error pops in to prevent 
>> that.
>> 
>> But in my real life example it passes, This code builds fine, maybe with 
>> side effects, i m not sure.
>> func (i *InputResolver) setResult(value interface{}, err error) {
>>   if err!=nil &&& i.LastValue!=nil &&& i.LastErr==nil{
>>     return // skip the new set as it reports error in producing and that the 
>> last value did produce properly.
>>   }
>>   i.LastValue = value
>>   i.LastErr = err
>> }
>> 
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts+unsubscr...@googlegroups.com 
>> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to golang-nuts+unsubscr...@googlegroups.com 
> <mailto:golang-nuts+unsubscr...@googlegroups.com>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to