JSTTL.ParseString.prototype.parseString

FAIL (noscript)




  // to handle empty case
  content := 'content-start' template;
  content := 'content-start';

  template := template tag;
  template := template 'text';
  template := tag;
  template := 'text';

  tag := directives 'eod';
  tag := 'eod';

  directives := directives ";" directive;
  directives := directives ";";
  directives := directive;
  // directives := ";"; // XXX

  directive := get;
  directive := set;
  directive := block;
  directive := if;
  
  get := 'GET' righthand;
  get := righthand;

  righthand := expression filters conditions; // XXX
  righthand := expression filters; // XXX
  righthand := expression conditions; // XXX
  righthand := expression;
  
  set := 'SET' set-expression;
  set := set-expression;
  
  set-expressions := set-expression; //XXX
  set-expression := variable-name "=" righthand;

  block := 'BLOCK' block-name 'eod' template 'END';
  block := 'BLOCK' block-name 'eod' 'END';
  // XXX 'eod' template -> optional-content

  block-name := 'identifier';
  block-name := 'number';
  block-name := path; // XXX

  if := if-unless expression optional-content else 'END';
  if := if-unless expression optional-content 'END';
  if-unless := 'IF';
  if-unless := 'UNLESS';

  else := 'ELSE' optional-content;
  else := elsif;

  elsif := 'ELSIF' expression optional-content else;
  elsif := 'ELSIF' expression optional-content;

  optional-content := 'eod' template;
  optional-content := 'eod';
  optional-content := ';' directives 'eod' template;
  optional-content := ';' directives 'eod';
  optional-content := ';' directives ';';
  optional-content := ';';
  
  expression := expression "&&" expression1;
  expression := expression "||" expression1;
  expression := expression1;

  expression1 := expression1 "==" expression2;
  expression1 := expression1 "!=" expression2;
  expression1 := expression1 "<=" expression2;
  expression1 := expression1 ">=" expression2;
  expression1 := expression1 "<"  expression2;
  expression1 := expression1 ">"  expression2;
  expression1 := expression2;
  
  expression2 := expression2 "+" expression3;
  expression2 := expression2 "-" expression3;
  expression2 := expression2 "_" expression3;
  expression2 := expression3;

  expression3 := expression3 "*" expression4;
  expression3 := expression3 "/" expression4;
  expression3 := expression3 "div" expression4;
  expression3 := expression3 "mod" expression4;
  expression3 := expression4;
  
  expression4 := "not" term;
  expression4 := term;
  
  term := scalar-term;
  term := "(" expression ")";
  
  scalar-term := lvalue;
  scalar-term := 'string';
  scalar-term := "number";
  
  lvalue := lvalue "." variable-name;
  lvalue := variable-name;
   
  variable-name := "identifier";