Вам нужно будет написать токенизатор- (цепочку).
Жетон класса {
статический анализ токена (строковая программа);
void Execute (состояние CurrentProgramState);
}
Сначала необходимо получить токен Программы, который пытается проанализировать весь текст, передав его множеству меньших токенов, которые создают из него токены. Каждый успешно пройденный токен потребляет немного строки, поэтому в конце строка становится пустой. (И, наконец, Программный токен имеет упорядоченный список токенов).
Затем, когда вызывается Program.Execute (), он отслеживает CurrentProgramState и передает это состояние своим токенам, которые изменяют состояние игры в соответствии с его параметрами.
Небольшой пример.
Скажем, у нас есть язык, в котором есть только два типа токенов
с (для прямой)
номер (на сколько)
class StraightToken
{
public StraightToken(NumberToken howFar)
{
this.howFar = howFar;
}
private NumberToken howFar;
static Token Parse(string program)
{
if(program.StartsWith("s ")
{
NumberToken number = NumberToken.Parse(program.substring(2));
if(howFar != null)
{
return new StraightToken(number);
}
}
return null;
}
public void Execute(ProgramState state)
{
state.Position += this.howFar.value;
}
}
class NumberToken
{
public int value;
public NumberToken(int value;)
{
this.value = value;
}
static Token Parse(string program)
{
if(IsDigit(program[0]))
{
program = program.SubString(1);
return new NumberToken((int)program[0])
}
}
}