У меня есть переводчик, который решает польскую нотацию. У меня есть все операции и числа в токенах, и у меня есть список токенов. Так, например - - 5 4 2
список с этими маркерами:Переводчик рекурсивный Польский Обозначение с помощью списка токенов
SubtractionToken, SubtractionToken, NumberToken, NumberToken, NumberToken, STOPToken.
Пример лексемы:
class SubstractToken : IBinaryOperation
{
public Number Interpret(Number value1, Number value2)
{
Number c = new Number(value1.Value() - value2.Value());
return c;
}
}
class Number : IToken
{
private int value;
public Number(int val)
{
value = val;
}
public int Value()
{
return value;
}
}
Таким образом, я не могу понять, как сделать рекурсивную функцию для решения этой проблемы. Потому что, когда я SubstractionToken.Inrerpret (значение, значение), мне нужно указать значения от numberTokens
, что должно быть выводом из себя, но что произойдет, если следующий токен - это токен операции? или у нас есть - 5 - 7 2
? Я не знаю, как реализовать такую рекурсивную функцию, которая обнаружит, что первая операция должна быть выполнена - 7 2 then - 5 и resultof (- 7 2), запомните результаты и вернитесь к предыдущим не выполненным операциям. Любая помощь?
Похоже, вам нужно больше парсера, чем интерпретатор. – stuartd
@stuartd: OP, вероятно, пытается разобрать и интерпретировать одновременно. – IAbstract
Взгляните на [это] (http://codereview.stackexchange.com/questions/48632/math-equation-as-string-to-reverse-polish-notation-parser). Я написал это примерно 2 года назад в качестве учебного проекта. Это, безусловно, может быть улучшено, но это должно помочь. – JRLambert