Шаблон проектирования для создания ассемблера

Я делаю ассемблер 8051.

Прежде всего, это токенизатор, который читает следующие токены, устанавливает флаги ошибок, распознает EOF и т. Д. .
Затем идет основной цикл компилятора, который читает следующие лексемы и проверяет правильность мнемоники:

mnemonic= NextToken();
if (mnemonic.Error)
{
    //throw some error
}
else if (mnemonic.Text == "ADD")
{
    ...
}
else if (mnemonic.Text == "ADDC")
{
    ...
}

И продолжается несколько случаев. Хуже того, код внутри каждого случая, который проверяет допустимые параметры, а затем преобразует его в скомпилированный код. Сейчас это выглядит так:

if (mnemonic.Text == "MOV")
{
    arg1 = NextToken();
    if (arg1.Error) { /* throw error */ break; }
    arg2 = NextToken();
    if (arg2.Error) { /* throw error */ break; }

    if (arg1.Text == "A")
    {
        if (arg2.Text == "B")
            output << 0x1234; //Example compiled code
        else if (arg2.Text == "@B")
            output << 0x5678; //Example compiled code
        else
            /* throw "Invalid parameters" */
    }
    else if (arg1.Text == "B")
    {
        if (arg2.Text == "A")
            output << 0x9ABC; //Example compiled code
        else if (arg2.Text == "@A")
            output << 0x0DEF; //Example compiled code
        else
            /* throw "Invalid parameters" */
    }
}

Для каждой мнемоники я должен проверить допустимые параметры, а затем создать правильный скомпилированный код. Очень похожие коды для проверки допустимых параметров для каждого повторения мнемоники в каждом случае.

Так есть ли шаблон проектирования для улучшения этого кода?
Или просто более простой способ реализовать это?

Edit: Я принял ответ плинтуса, благодаря ему. Тем не менее, если у вас есть идеи по этому поводу, я буду рад их изучить. Всем спасибо.

8
задан Hossein 9 April 2011 в 12:41
поделиться