Я бы предпочел держаться подальше от «слишком большой» объектной ориентации из-за проблем с производительностью.

аю 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" */
    }
}

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

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

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

Ответы на вопрос(5)

Ваш ответ на вопрос