Бесплатная библиотека, читать онлайн, скачать книги txt

БОЛЬШАЯ БЕСПЛАТНАЯ БИБЛИОТЕКА

МЕЧТА ЛЮБОГО КНИГОЛЮБА

Вторник, 11 июня, 16:37

Авторизация    Регистрация
Дамы и господа! Электронные книги в библиотеке бесплатны. Вы можете их читать онлайн или же бесплатно скачать в любом из выбранных форматов: txt, jar и zip. Обратите внимание, что качественные электронные и бумажные книги можно приобрести в специализированных электронных библиотеках и книжных магазинах (Litres, Read.ru и т.д.).

ПОСЛЕДНИЕ ОТЗЫВЫ О КНИГАХ

Михаил (19.04.2017 - 06:11:11)
книге:  Петля и камень на зелёной траве

Потрясающая книга. Не понравится только нацистам.

Антихрист666 (18.04.2017 - 21:05:58)
книге:  Дом чудовищ (Подвал)

Классное чтиво!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ладно, теперь поспешили вы... (18.04.2017 - 20:50:34)
книге:  Физики шутят

"Не для сайта!" – это не имя. Я пытался завершить нашу затянувшуюся неудачную переписку, оставшуюся за окном сайта, а вы вын... >>

Роман (18.04.2017 - 18:12:26)
книге:  Если хочешь быть богатым и счастливым не ходи в школу?

Прочитал все его книги! Великий человек, кардинально изменил мою жизнь.

АНДРЕЙ (18.04.2017 - 16:42:55)
книге:  Технология власти

ПОЛЕЗНАЯ КНИГА. Жаль, что мало в России тех, кто прочитал...

Читать все отзывы о книгах

Обои для рабочего стола

СЛУЧАЙНОЕ ПРОИЗВЕДЕНИЕ

Очень жаль в жизни встречи напрасные,
Очень жаль море пролитых слёз.
Очень жаль, что встречаются люди опасные...
...Ну конечно, это я не всерьёз.
Ах, как жаль, что жила я бесцельно -
И мечтала на перекос...
Ах, как жаль, что горизонт запредельный...
..Ну конечно, это я не всерьёз.... >>

23.08.10 - 19:32
Юлия.

Читать онлайн произведения


Хотите чтобы ваше произведение или ваш любимый стишок появились здесь? добавьте его!

Поделись ссылкой

Давайте создадим компилятор!   ::   Креншоу Джек

Страница: 138 из 139
 
Зачем добавлять дополнительные ограничители в процессор, чтобы осуществить чужие представления о хорошей практике программирования? Оставьте эти инструкции и позвольте программистам поспорить что такое хорошая практика программирования. Точно так же, почему мы должны добавлять дополнительный код в наш синтаксический анализатор для проверки и предупреждения условий, которые пользователь мог бы предпочесть использовать? Я предпочел бы оставить компилятор простым и позволить программным экспертам спорить, должна ли такая практика использоваться или нет.

Все это служит как объяснение моего решения как избежать смешанной арифметики: я не буду ее избегать. Для языка, предназначенного для системного программирования, чем меньше правил, тем лучше. Если вы не согласны, и хотите выполнять проверку на такие условия, мы сможем сделать это, когда у нас будет таблица идентификаторов.

БУЛЕВО «AND»



С это небольшой философией, мы можем приступить к оператору «and», который пойдет в процедуру Term. К настоящему времени вы возможно сможете сделать это без меня, но в любом случае вот код:

В Scanner:

{–}

function IsMulop(c: char): boolean;

begin

IsMulop := c in ['*','/', '&'];

end;

{–}

в Parser:

{–}

procedure Term;

begin

Factor;

while IsMulop(Look) do

case Look of

'*': Multiply;

'/': Divide;

'&': _And;

end;

end;

{–}

{ Parse and Translate a Boolean And Operation }

procedure _And;

begin

Match('&');

Push;

Factor;

PopAnd;

end;

{–}

и в CodeGen:

{–}

{ And Primary with TOS }

procedure PopAnd;

begin

EmitLn('AND (SP)+,D0');

end;

{–}

Ваш синтаксический анализатор теперь должен быть способен обрабатывать почти любые виды логических выражений а также (если вы хотите) и смешанные выражения.

Почему не «все виды логических выражений»? Потому что пока мы не имели дела с логическим оператором «not» и с ним все становится сложнее. Логический оператор «not» кажется на первый взгляд идентичным в своем поведении унарному минусу, поэтому моей первой мыслью было позволить оператору исключающего или, '~', дублировать унарный «not». Это не работало. При моей первой попытке процедура SignedTerm просто съедала мой '~' потому что символ проходил проверку на addop но SignedTerm игнорировал все addop за исключением "-". Было бы достаточно просто добавить другую строку в SignedTerm, но это все равно не решит проблему, потому что, заметьте, Expression принимает терм со знаком только для первого аргумента.

Математически, выражение типа:

–a * -b

имеет небольшой или совсем никакого смысла и синтаксический анализатор должен отметить его как ошибку. Но то же самое выражение, использующее логическое «not», имеет точный смысл:

not a and not b

В случае с этими унарными операторами выбор заставить их работать таким же самым способом кажется исскуственным принуждением, жертвованием примлемым поведением на алтаре простоты реализуемости. Хотя я полностью за сохранение реализации настолько простой, насколько возможно, я не думаю, что мы должны делать это за счет приемлемости. Исправления подобные этому, приведут к потере основной детали, которая заключается в том, чтобы логическое «not» просто не является тем же самым что унарный минус. Рассмотрим исключающее «or», которое обычно записывается так:

a~b ::= (a and not b) or (not a and b)

Если мы разрешим «not» изменять весь терм, последний терм в круглых скобках интерпретировался бы как:

not(a and b)

что совсем не то же самое. Так что ясно, что о логическом «not» нужно думать как о связанном с показателем а не термом.

Идея перегрузки оператор '~' не имеет смысла и с математической точки зрения. Применение унарного минуса эквивалентно вычитанию из нуля:

–x <=> 0-x

Фактически, в одной из моих более простых версий Expression я реагировал на ведущий addop просто предзагружая нуль, затем обрабатывая оператор как если бы это был двоичный оператор. Но «not» это не эквивалент исключающему или с нулем... которое просто возвратит исходное число. Вместо этого, это исключающее или с FFFFh или -1.

1<<137138139


В тексте попалась красивая цитата? Добавьте её в коллекцию цитат!
Дневник свекровиМария Метлицкая79,99 руб.
ИнферноДэн Браун199 руб.
Французские дети не капризничают. Уни...Кэтрин Кроуфорд99 руб.
На пятьдесят оттенков темнееЭ. Л. Джеймс149,90 руб.


copyright © Бесплатная библиотека,    контакты: [email protected]