Example for the `>>` case: ``` [[block]] struct B { a: array<array<i32,2>>; } // That >> should two copies of GREATER_THAN, not one copy of SHIFT_RIGHT ``` Example for the `]]` case: ``` fn foo() { var a : array<i32,10>; let v = a[a[0]]; // That ]] should be two copies of BRACKET_RIGHT instead of ATTR_RIGHT. } ``` Tint parses these provisionally as the longer token, then backtracks to split them if needed. I think the group has already discussed this but I can't find the tracking issue. Related: #1063 validating the grammar is unambiguous