Ещё есть классическая книга экс-чемпиона М. Ботвинника «О кибернетической цели игры» — о том, каким он видел алгоритм игры в шахматы. Очень познавательно сравнить то, что он описывал и то, каким образом на самом деле стали эту проблему решать.
В интернете можно найти электронную версию.
Ещё есть забавный сервис Tatoeba, который содержит переводы небольших предложений.
Когда мне становится скучно, я там перевожу несколько предложений на русский
Встроенных бизоньих средств нет, так как это не его область ответственности.
Обычно это делают в лексере: т.е. на паттерн "\n" делают счётчик строк и сброс положения столбца. А в остальные правила добавляют счётчик количества прочитанного символа (что-то вроде CurColumn+=strlen(yytext); )
У бизона, кстати, есть директива %glr-parser, которая в некоторых случаях позволяет избежать конфликтов из-за необходимости просмотра более чем на один символ.
С помощью VIM'а, а точнее gVIM:
Просто открываю файл с кодом, выполняю команду :TOHtml
Потом просто выбираю код, который расположен в теге <BODY> (встаю на тег <BODY> и копирую командой "*yit)
gVIM нужен для того, чтобы раскраска в полученном html совпала с тем, что видно на экране
StringBuilder решает этот вопрос немного по другому — он внутри использует unsafe код, а преимущество этого алгоритма в том, что его можно использовать там, где это недопустимо.
У меня в конечном итоге получился следующий вариант: if(enNone!=Enum)
{ switch(Enum)
{ case enOne:
Value=f1(Value); break;/*enOne*/ case enTwo:
Value=f2(Value); break;/*enTwo*/ case enThree:
Value=f3(Value); break;/*enThree*/ default:assert( 0 ); break;
}/*SWITCH*/
Value=A*Value+B;
}/*THEN*/
default конечно, никогда не выполнится, вплоть до последующего изменения типа, но тогда assert отловит эту ситуацию при тестах.
Именно поэтому он там необходим.
В интернете можно найти электронную версию.
FQA — это не FAQ, это одна из самых подробных критик Си++, где берётся вопрос, ответ из FAQ, и обсуждается
Когда мне становится скучно, я там перевожу несколько предложений на русский
Обычно это делают в лексере: т.е. на паттерн "\n" делают счётчик строк и сброс положения столбца. А в остальные правила добавляют счётчик количества прочитанного символа (что-то вроде CurColumn+=strlen(yytext); )
Просто открываю файл с кодом, выполняю команду :TOHtml
Потом просто выбираю код, который расположен в теге <BODY> (встаю на тег <BODY> и копирую командой "*yit)
gVIM нужен для того, чтобы раскраска в полученном html совпала с тем, что видно на экране
local t = {}
for l in ... do
table.insert(t, l)
end
s = table.concat(t)
Этот текст достаточно древен (2002 год), я его перевёл, потому что алгоритм интересен.
if(enNone!=Enum)
{
switch(Enum)
{
case enOne:
Value=f1(Value);
break;/*enOne*/
case enTwo:
Value=f2(Value);
break;/*enTwo*/
case enThree:
Value=f3(Value);
break;/*enThree*/
default:assert( 0 );
break;
}/*SWITCH*/
Value=A*Value+B;
}/*THEN*/
default конечно, никогда не выполнится, вплоть до последующего изменения типа, но тогда assert отловит эту ситуацию при тестах.
Именно поэтому он там необходим.
так и было сделано, но было интересно попробовать по другому.