Array.new(256, 0).tap do |table|
[0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x20].each { |byte| table[byte] |= WHITESPACE }
(0x30..0x39).each { |byte| table[byte] |= DIGIT | HEX_DIGIT | IDENTIFIER_PART }
(0x41..0x46).each { |byte| table[byte] |= HEX_DIGIT }
(0x61..0x66).each { |byte| table[byte] |= HEX_DIGIT }
(0x41..0x5a).each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
(0x61..0x7a).each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
[0x24, 0x5f].each { |byte| table[byte] |= IDENTIFIER_START | IDENTIFIER_PART }
[0x22, 0x27].each { |byte| table[byte] |= QUOTE }
[0x7b, 0x7d, 0x5b, 0x5d, 0x3a, 0x2c].each { |byte| table[byte] |= PUNCTUATOR }
table[0x2f] |= SLASH
table[0x5c] |= BACKSLASH
[0x0a, 0x0d].each { |byte| table[byte] |= LINE_TERMINATOR }
end.freeze