Данная документация была сгенерирована нейросетью на основе анализа исходного кода и может содержать неточности и упрощения.
Реальные технические детали реализации могут отличаться от описанных. Для получения точной информации обращайтесь к:
Нейросеть могла неправильно интерпретировать некоторые аспекты архитектуры, алгоритмов или назначения методов.
Кодогенератор представляет собой абстрактный базовый класс, реализующий механизм генерации кода для целевой платформы через систему областей видимости (scopes).
Иерархическая система с несколькими типами областей для управления контекстом генерации:
public CGClassScope enterClass(VarType type, String name, Listimpl, boolean isRoot) { scope = new CGClassScope(this, scope, genId(), type, name, impl, null != scope && isRoot); return (CGClassScope)scope; }
public CGMethodScope enterConstructor(VarType[] types) {
CGMethodScope mScope = new CGMethodScope(this, (CGClassScope)scope, genId(),
null, 0, types, ((CGClassScope)scope).getName(), buildRegsPool());
((CGClassScope)scope).addMethod(mScope);
scope = mScope;
return mScope;
}
public CGBlockScope enterBlock() {
scope = new CGBlockScope(this, scope, genId());
return (CGBlockScope)scope;
}
public DataSymbol defineData(int resId, int size, Object obj) {
DataSymbol ds = new DataSymbol("j8bD" + resId, size, obj);
flashData.put(resId, ds);
return ds;
}
public abstract void constToAcc(CGScope scope, int size, long value, boolean isFixed); public abstract void cellsToAcc(CGScope scope, CGCellsScope cScope) throws CompileException; public abstract void accToCells(CGScope scope, CGCellsScope cScope) throws CompileException;
public abstract void computeArrCellAddr(CGScope scope, CGCells arrAddrCells, CGArrCells arrCells); public abstract void arrToAcc(CGScope scope, CGArrCells arrCells); public abstract void accToArr(CGScope scope, CGArrCells arrScope);
public abstract void cellsAction(CGScope scope, CGCells cells, Operator op, boolean isFixed);
public abstract void cellsCond(CGScope scope, CGCells cells, Operator op, boolean isNot,
boolean isOr, CGBranchScope branchScope);
// Вызов из build метода
constrInit.getCont().append(eNewInstance(cScope.getHeapOffset(),
cScope.getIIDLabel(), cScope.getType(), false, false));
// Генерация строковых констант
if(ds.getValue() instanceof String) {
append(new CGIText(CGKOI8R.decode(ds.getValue().toString())));
}
// Генерация числовых констант
else if(ds.getValue() instanceof Number) {
StringBuilder sb = new StringBuilder(".db ");
long value = ((Number)ds.getValue()).longValue();
for(int i=0; i>= 0x08;
}
}