O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
3-Amaliy ish
Guruh: DIF 311-18
Bajardi: Masharipov Shohruh
TOSHKENT – 2022
3- амалий иш.
Мавзу: Дастурни объект кодини генерациялаш ва оптималлаш.
Ишдан максад: Ушбу амалий ишда синтаксис разбор дарахти асосида дастурнинг объект кодини ташкил этувчи ва сунгра уни оптималлаштирувчи дастурни ёзиш талаб этилади. Кирувчи синтаксис разбор дарахти сифатида аввалги тажриба ишларида ташкил этилган дарахтдан фойдаланиш тавсия этилади.
Амалий ишнинг натижаси объект тилидаги берилган грамматика гаплари асосида курилган дастур булиши керак. Объект тили сифатида аник режимдаги Intel 80x86 туридаги процессорлар учун ассемблер тилидан фойдаланиш максадга мувофикдир.
Берилган дастурда иштирок этувчи барча, турларни узгартиришни талаб этмайдиган, идентификаторларни оддий скаляр узгарувчилар деб хисобланади.
Ушбу амалий ишни икки боскичда ишлаб чикиш мумкин – триадалар руйхатини куриш ва ассемблер кодини генерациялаш.
Назарий кисм :
Триадалар руйхатини куриш.
Триадалар руйхатини куришда, аввалги тажриба ишларида синтаксис тахлилчи томонидан курилган, чикиш дарахтини рекурсив утиши амалга оширилади. Бу холда куйидаги кушимча триадаларнинг турлари киритилади:
– Триада if (a,b), бу ерда a ва b операндлар албатта триадаларга курсаткич хисобланадилар. Ушбу триаданинг мазмуни куйидагичадир: агар a триаданинг мантикий ифода булган хисоблаш натижаси, нолга тенг булса, у холда b курсаткич буйичаутиш амалга оширилади. Акс холда руйхат буйича кейинги триадага кетма-кет утиш амалга оширилади.
– Триада jmp (1, a), бу ерда биринчи операнд маъновий юкламага эга эмас, иккинчи операнд эса триадага, кейинги боскичда шартсиз утишни амалга ошириши керак булган, курсаткични курсатади.
Кирувчи тилнинг семантик юкламага эга булмаган ифодалари янги триадаларни ташкил этмайдилар, лекин чикиш дарахтининг бундай тугунлари учун триадаларни куришни рекурсив чакириш функциялари амалга оширилади.
Колган ифодалар битта ёки бир нечта кетма-кет триадаларга бир кийматли айлантирилади.
Триадалар руйхатини куришни тугаши билан уни оптималлаш, яъни ортикча амалларни олиб ташлаш билан амалга оширилади. Бу холда яна бир кушимча триада туридан фойдаланилади – SAME (a, 0), бу ерда иккинчи операнд маънога эга эмас, биринчи операнд эса берилган ифодага узгартирилган триадага мос триадага курсатади.
class _ParserState {
_ParserState(this._text, {_Rule whitespace}) {
_end = this._text.length;
whitespaceRule = whitespace;
max_rule = [];
}
String _text;
int _end;
//
bool inWhitespaceMode = false;
_Rule whitespaceRule = null;
// Used for constructing an error message.
int inhibitExpectedTrackingDepth = 0;
int max_pos = 0;
var max_rule;
}
/**
* An interface tag for rules. If this tag is on a rule, then the description()
* of the rule is something sensible to put in a message.
*/
abstract class _Expectable {
String description();
}
class _Rule {
const _Rule();
// Returns null for a match failure or [pos, ast] for success.
match(_ParserState state, int pos) {
if (!state.inWhitespaceMode) {
pos = _skip_whitespace(state, pos);
}
return matchAfterWS(state, pos);
}
// Faster entry point for matching a sub-rule that is matched to the start
// position of the super-rule. Whitespace has already been skipped so no need
// to try to skip it again.
matchAfterWS(_ParserState state, int pos) {
Do'stlaringiz bilan baham: |