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";