On Wednesday, December 25, Alt Mcarter wrote: > But I'm wondering, is there a way to write token var in such a way that it > matches <[a..z]>+ EXCEPT when it is a keyword (print, for, to, next, etc.)?
You could use a negative code assertion -- #!/usr/bin/env raku my @keywords = <print for to next>; grammar G { rule TOP { <var> } rule var { <id> <!{ $<id> eq @keywords.any }> } token id { <[a..z]>+ } } use Test; ok G.parse('fine'); ok G.parse('finetoo'); nok G.parse('print'); nok G.parse('for'); nok G.parse('to'); nok G.parse('next'); ok G.parse('forth'); (you can also use before/after assertions -- see <https://stackoverflow.com/questions/42538548/perl6-negating-multiple-words-and-permutations-of-their-chars-inside-a-regex>) Brian