Skip to content

Instantly share code, notes, and snippets.

@laughinghan
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save laughinghan/11b56580b74985b3a8d0 to your computer and use it in GitHub Desktop.
Save laughinghan/11b56580b74985b3a8d0 to your computer and use it in GitHub Desktop.
scan that shit
var patterns = [];
(function (args) {
for (var i = 0; i < args.length; i++) {
if (!args[i]) continue;
var parts = args[i].source.split('::=');
var name = parts[0].trim();
var pattern = RegExp('^(?:' + parts[1].trim() + ')');
patterns.push([name, pattern]);
}
})([
/ left ::= [{(\[] /,
/ right ::= [})\]] /,
/ newline ::= \r\n|\r|\n /,
/ whitespace ::= \s+ /,
/ hash ::= #[^\r\n]* /,
/ line ::= \/\/[^\r\n]* /,
/ block ::= \/\*.*?\*\/ /,
/ identifier ::= [a-zA-Z][a-zA-z0-9]* /,
/ single ::= '(\\['\\/bfnrtu']|[^'\\'])*' /,
/ double ::= "(\\["\\/bfnrtu"]|[^"\\"])*" /,
/ error ::= '|"[^\r\n]* /,
/ integer ::= [0-9]+ /,
/ junk ::= [^\r \n {(\[ \])} # ' " \s]* /,
]);
return function (s) {
for (var i = 0; i < patterns.length; i++) {
var name = patterns[i][0];
var re = patterns[i][1];
var match = s.match(re);
if (match) {
var lexeme = match[0];
return [name, lexeme];
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment