/* Binding levels (well...): 0 = lowest 1 = arrows (> lowest) 2 = arrowsr (> arrows) 3 = word (> arrows) 4 = juxta, idword, subword (> word) */ static S snlParse_rules = [[ // highest (strongest binding) level = idword = subword = subword // = subword // random symbols we'd want to use // (they don't parse if not listed here) ? = symbol ! = symbol : = symbol * = symbol "=" = symbol + = symbol , = symbol . = symbol = idword = word = word // juxtaposition on highest level = juxta = word // bracketing takes us to highest level [ ] = square ( ) = round = subword = subword // < is intermediate = arrowsr > = realarrowr = arrowsr < = realarrow = arrows = arrows = lowest // allow empty here = lowest ]]; static Explain snlParse(S input) { ret explainFull(snlTok(input), snlParse_rules, "lowest"); }