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.