Непейвода Н.Н. Программирование. Раздел 4

Непейвода Н.Н. Программирование. Страница 457

Программа 10.2.8Длины слов: интерпретатор конечного автомата. #include<stdio.h>

charsymbol; // переменная для чтения потока символов

int с0(), с1(), с2();

int cnt; // переменная для счета длин слов

// функцииусловия

intc2(){return symbol != '\n';} void a0(){}

void a1(){printf ("%c"f symbol);cnt = 1;} void a2(){printf ("%c", symbol);cnt++;} void a3(){printf (" %i\n", cnt);}

10.2.6. Обсуждение решения

Как уже говорилось, функция подразумевает выделение памяти (в стеке), следовательно, вызовы Table[i].condition() и Table[i].action() нарушают теоре­тический постулат о том, что конечному автомату не требуется динамическая память. Но фактически здесь нет никакого противоречия:

Вопервых, теоретическое "не требуется" совсем не обязательно долж­но буквально реализовываться. Напротив, на каждом уровне требуются свои средства.

Вовторых, не исключается, что транслятор, проанализировав трансли­руемый текст, сможет построить код, который учитывает фактические режимы работы функций, и, как следствие, будут заменены вызовы функций на прямые переходы к нужным фрагментам.

Втретьих, при желании можно было отказаться от задания условий и действий функциями, а вместо этого составить специальные "неиспол няемые" фрагменты и задать переходы к ним взамен вызовов. Послед­ний путь — ручное кодирование предыдущей возможности и, в то же время, реализация ранее указанного подхода (см. пункт е) на стр. 549).

На первый взгляд может показаться, что задача оптимизации вызовов в си­стемах программирования С/С++/С# решается с помощью прагматической директивыiniine.В самом деле, использование встраиваемых (iniine)функ­ций имеет целью подмену вызова размещением кода тела функции в точке вызова. Однако в данном случае это не приведет к желаемому: компилято­ру просто некуда вставлять код функции, а потому директиваinlineбудет проигнорирована.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета &quot;Ангара-А5В&quot; в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие &quot;Крокодилы&quot;

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама