Я хочу разобрать выражения типа
- a
- ++ a
- a ++
- ++ a ++
- ++ a ++++
Оператор предварительного увеличения имеет приоритет над оператором постинкремента.
У меня есть следующие анализаторы:
public static readonly TokenListParser<LangToken, UnaryOperator> Increment = Token.EqualTo(LangToken.DoublePlus).Select(x => UnaryOperators.Increment);
public static readonly TokenListParser<LangToken, UnaryOperator> Decrement = Token.EqualTo(LangToken.DoubleMinus).Select(x => UnaryOperators.Decrement);
public static readonly TokenListParser<LangToken, Expression> Identifier = Token.EqualTo(LangToken.Identifier).Select(x => (Expression)new Id(x.ToStringValue()));
public static readonly TokenListParser<LangToken, Expression> A =
from c in Parse.Ref(() => Expression)
from op in Increment.Or(Decrement)
select (Expression)new OpNode(op, c);
public static readonly TokenListParser<LangToken, Expression> B =
from op in Increment.Or(Decrement)
from c in Parse.Ref(() => Expression)
select (Expression)new OpNode(op, c);
public static readonly TokenListParser<LangToken, Expression> Expression = A.Or(B).Or(Identifier);
Однако,когда я анализирую простое выражение типа "a ++" с помощью синтаксического анализатора Expression
, тест зависает.Я предполагаю, что это связано с проблемой рекурсии.
Но в чем проблема и как ее решить?