Skip to content

Commit

Permalink
Resolve template parameters as RhsSymbols. Disallow nested arguments.
Browse files Browse the repository at this point in the history
  • Loading branch information
inspirer committed Dec 14, 2014
1 parent 4793240 commit e9edd94
Show file tree
Hide file tree
Showing 7 changed files with 989 additions and 960 deletions.
Expand Up @@ -436,9 +436,16 @@ private RhsSymbol convertPrimary(Symbol outer, ITmaRhsPart part) {

if (part instanceof TmaRhsSymbol) {
TmaSymref symref = ((TmaRhsSymbol) part).getReference();
TemplateParameter param = resolver.tryResolveParam(symref);
if (param != null) {
return builder.templateSymbol(param, resolver.resolveArgs(symref), part);
}

Symbol resolved = resolver.resolve(symref);
if (resolved == null) return null;
return builder.symbol(resolved, resolver.resolveArgs(symref), part);
if (resolved != null) {
return builder.symbol(resolved, resolver.resolveArgs(symref), part);
}
return null;

} else if (part instanceof TmaRhsNested) {
Nonterminal nested = (Nonterminal) resolver.createNestedNonTerm(outer, part);
Expand Down Expand Up @@ -542,7 +549,8 @@ private RhsSymbol createList(RhsSequence inner, boolean nonEmpty, RhsPart separa

if (separator != null && !nonEmpty) {
// (a separator ',')* => alistopt ::= alist | ; alist ::= a | alist ',' a ;
result = builder.addShared(builder.optional(builder.symbol(result, null, origin), origin), listName + "_opt");
result = builder.addShared(builder.optional(builder.symbol(result, null, origin), origin), listName +
"_opt");
}
return builder.symbol(result, null, origin);
}
Expand Down
Expand Up @@ -310,10 +310,15 @@ TemplateParameter resolveParam(TmaIdentifier id) {
return param;
}

TemplateParameter tryResolveParam(TmaSymref id) {
return parametersMap.get(id.getName());
}

Symbol resolve(TmaSymref id) {
String name = id.getName();
Symbol sym = symbolsMap.get(name);
if (sym == null) {
// TODO make "opt" configurable in options
if (name.length() > 3 && name.endsWith("opt")) {
sym = symbolsMap.get(name.substring(0, name.length() - 3));
if (sym != null) {
Expand Down
1,052 changes: 530 additions & 522 deletions tm-tool/textmapper/src/org/textmapper/tool/parser/TMParser.java

Large diffs are not rendered by default.

Expand Up @@ -475,7 +475,7 @@ param_type (TmaParamType) ::=
param_value (ITmaParamValue) ::=
literal
| symref
| symref_noargs
;
predicate_primary (ITmaPredicateExpression) ::=
Expand Down
4 changes: 2 additions & 2 deletions tm-tool/textmapper/test/tm/TMAst.last
Expand Up @@ -67,7 +67,7 @@ identifier : Identifier ::=
{ID}
;

class Symref : ParamValue, Expression {
class Symref : Expression, ParamValue {
String name;
SymrefArgs args;
}
Expand Down Expand Up @@ -601,7 +601,7 @@ interface ParamValue {

param_value : ParamValue ::=
this=literal
| this=symref
| this=symref_noargs
;

class BoolPredicate : PredicateExpression {
Expand Down
870 changes: 439 additions & 431 deletions tm-tool/textmapper/test/tm/TMParser.java

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tm-tool/textmapper/test/tm/textmapper.tm
Expand Up @@ -400,7 +400,7 @@ param_type ::=
param_value ::=
literal
| symref
| symref_noargs
;
predicate_primary returns predicate_expression ::=
Expand Down

0 comments on commit e9edd94

Please sign in to comment.