Я соглашаюсь с Книжной ссылкой Дракона; IMO, это - полное руководство к конструкции компилятора. Подготовьтесь к некоторой жесткой теории, все же.
, Если Вы хотите книгу, которая легче на теории, , Игровое Мастерство Сценариев могло бы быть лучшей книгой для Вас. Если Вы - общий новичок в теории компилятора, она обеспечивает более нежное введение. Это не покрывает более практические методы парсинга (выбирающий непрогнозирующий рекурсивный спуск, не обсуждая LL или LR-анализ), и как я вспоминаю, это даже не обсуждает вида теории оптимизации. Плюс, вместо того, чтобы компилировать в машинный код, это компилирует в байт-код, который, как предполагается, работает на VM, который Вы также пишете.
Это - все еще достойное чтение, особенно если можно взять его для дешевого на Amazon. Если Вы только хотите легкое введение в компиляторы, Игровое Мастерство Сценариев не является плохим способом пойти. Если Вы хотите пойти хардкор впереди, то необходимо согласиться на не что иное как Книгу Дракона.
Вы запустили if
оператор. Следующая команда выполняется, и только если она возвращается, нулевой статус выхода (успех) следующие выполняемые команды, от then
ключевое слово вплоть до fi
ключевое слово ("если" назад). Как:
if true
then
echo yes
fi
Обычно каждый использует test
программа (иначе [
) для тестирования различных вещей, таких как:
if [ $somevariable = someword ]
или
if [ -f /some/file/exists ]
Ctrl-C А прерывает его прекрасный для меня.
Используйте Управление - D в случаях как это.
Вы застряли в оболочке удара if
условная управляющая структура.
Это - вывод, который я вижу:
$ if
>
> '
> "
> sdf
> )
> []
Управление - удар D
: синтаксическая ошибка: неожиданный конец файла
Используйте stty -a
, чтобы быть уверенными, что предают земле = ^C. Если это не, ^C является просто другим символом. stty sane
помогает мне из терминального беспорядка. См. man stty
. Вот первые несколько моих строк (где ^C действительно прерывает если....):
walt@spong:~(0)$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
...
if
оператор, который вышел или проигнорировал ^C. Последующие пробные версии с if
операторы в терминале все успешно прервались с ^C.
– Alex Gian
16.05.2020, 05:01
echo foo
), то ввод ctrl+C.
– keparo
16.05.2020, 05:02
fi
в другом месте и попробовал это также, но ничего подобного не возвратил меня командной строке. Я wouldn' t быть удивленным, получило ли мое последующее приготовление пюре кнопки меня в немного более сложный набор вложенных скобок и кавычек, чем, я думал... Теперь я знаю, что попробовать в следующий раз, хотя;-) Спасибо! – tutysara 16.05.2020, 05:01