Skip to content

Commit

Permalink
Lexer and parser: better parsing of modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
matej21 committed Mar 11, 2016
1 parent ce95fec commit 529653a
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 9 deletions.
Expand Up @@ -24,7 +24,7 @@ SYMBOL = [_[:letter:]][_0-9[:letter:]]*(-[_0-9[:letter:]]+)* //todo: unicode let

<YYINITIAL> {

"|" {MODIFIERS} {
"|" / {MODIFIERS} {
return T_MACRO_MODIFIERS;
}

Expand Down
2 changes: 1 addition & 1 deletion src/com/jantvrdik/intellij/latte/parser/LatteParser.bnf
Expand Up @@ -60,7 +60,7 @@ private
classicMacroContent ::= macroName macroContent

private
macroContent ::= macroArgs? T_MACRO_MODIFIERS?
macroContent ::= macroArgs? (T_MACRO_MODIFIERS macroArgs)*

private
macroName ::= T_MACRO_NAME
Expand Down
Expand Up @@ -47,13 +47,18 @@ public void testMacroLexer() {
lexer.start("$var|noescape");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS_VAR, "$var"),
Pair.create(T_MACRO_MODIFIERS, "|noescape"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "noescape"),
});

lexer.start("$var|truncate:10|upper");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS_VAR, "$var"),
Pair.create(T_MACRO_MODIFIERS, "|truncate:10|upper"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "truncate:"),
Pair.create(T_MACRO_ARGS_NUMBER, "10"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "upper"),
});

// https://github.com/nette/latte/issues/13
Expand All @@ -63,7 +68,8 @@ public void testMacroLexer() {
Pair.create(T_MACRO_ARGS_VAR, "$a"),
Pair.create(T_MACRO_ARGS, " as "),
Pair.create(T_MACRO_ARGS_VAR, "$v"),
Pair.create(T_MACRO_MODIFIERS, "|noiterator "),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "noiterator "),
});

lexer.start(" function() { } ");
Expand All @@ -75,28 +81,34 @@ public void testMacroLexer() {
lexer.start("{a|b}");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS, "{a"),
Pair.create(T_MACRO_MODIFIERS, "|b}"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "b}"),
});

lexer.start("a|b:{}");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS, "a"),
Pair.create(T_MACRO_MODIFIERS, "|b:{}"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "b:{}"),
});

lexer.start("'{}}'{|a:'{}}'}");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS_STRING, "'{}}'"),
Pair.create(T_MACRO_ARGS, "{"),
Pair.create(T_MACRO_MODIFIERS, "|a:'{}}'}"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "a:"),
Pair.create(T_MACRO_ARGS_STRING, "'{}}'"),
Pair.create(T_MACRO_ARGS, "}"),
});

lexer.start(" 'function() { $a = $b|c() }' |mod");
assertTokens(lexer, new Pair[]{
Pair.create(T_MACRO_ARGS, " "),
Pair.create(T_MACRO_ARGS_STRING, "'function() { $a = $b|c() }'"),
Pair.create(T_MACRO_ARGS, " "),
Pair.create(T_MACRO_MODIFIERS, "|mod"),
Pair.create(T_MACRO_MODIFIERS, "|"),
Pair.create(T_MACRO_ARGS, "mod"),
});

lexer.start("1");
Expand Down

0 comments on commit 529653a

Please sign in to comment.