with ( Parser.Operators ) {
var g = Behaviors.Stylesheet.Grammar;
var t = Behaviors.Stylesheet.Translator;
// basic tokens
g.lbrace = token('{'); g.rbrace = token('}');
g.lparen = token(/\(/); g.rparen = token(/\)/);
g.colon = token(':'); g.semicolon = token(';');
// attributes
g.attrName = token(/[\w\-\d]+/);
g.attrValue = token(/[^;\}]+/);
g.attr = pair(g.attrName,g.attrValue,g.colon);
g.attrList = list(g.attr,g.semicolon,true);
g.style = process(
between(g.lbrace,g.attrList,g.rbrace),t.style);
// style rules
g.selector = token(/[^\{]+/);
g.rule = each(g.selector,g.style);
g.rules = process(many(g.rule),t.rules);
// comments
g.inlineComment = token(/\x2F\x2F[^\n]\n/);
g.multilineComment = token(/\x2F\x2A.*?\x2A\x2F/);
g.comments = ignore(
any(g.inlineComment,g.multilineComment));
// parser
Behaviors.Stylesheet._parse = process(
many(any(g.comments,g.rules)),t.parse);
}
23 abril, 2008
Cruiser, un parseador Javascript
cruiser en Google Code.
Cuando alcanzas los límites de las expresiones regulares de Javascript, puedes pensar que lo que estás intentando hacer no debe ser una buena idea, o como ha hecho esta gente, escribirse un parseador. Esta librería permite escribir parseadores de forma sencilla. Está basada en una gran función, en lugar de usar la solución de YACC de generar código, que es más rápida.
No hay comentarios:
Publicar un comentario