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.

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);
}

Publicar un comentario en la entrada

Últimos links en indiza.com