|
Программирование >> Формирование пользовательского контейнера
fout indent + forvamame < ( (sizeof token )/ (sizeof token [0]));\n ; fout indent + forvamame ++, vamame = arrayname t forvamame ]) ; skipspacesO ; Считывает ) . gettoken(token); if (token [0] != ) ) throw SyntaxExc( ) expected in foreach. ); Транслирует оператор cases, void cases () { string token; int start, end; skipspaces (); Получает начальное значение, gettoken (token); if(isdigit(token[0])) { получена константа int start = atoi(token.c str0); else if(token[0] == \) { II получена константа char gettoken(token); start = (int) token[0]; отбрасывает закрывающий (апостроф) gettoken(token); if (token [0] != -X ) throw SyntaxExc( expected in cases. ); else throw SyntaxExc( Constant eзфected in cases. ); skipspaces(); Читает и отбрасывет to . gettoken(token); if(token != to ) throw SyntaxExc ( to ejqjected in cases. ); skipspaces (); Получает конечное значение. gettoken(token); if(isdigit(token[0])) { Получена константа int end = atoi(token.c str()); else if (token[0] == \ ) { Получена константа char gettoken(token); end =t (int) token[0]; Отбрасывает закрьшающий gettoken(token); if(token[0] != Ч ) throw SyntaxExc( expected in cases . ) ; else throw SyntaxExc( Constant eзфected in cases. ) skipspaces(); Читает и отбрасывает : . gettoken(token); if(token != : ) throw SyntaxExc( : expected in cases. ) ; Генерирует стопочные case-операторы, fout case start :\n ; for(int i = start+1 ; i <= end; i++) ( fout indent case i : ; if(i != end) fout endl; Транслирует repeat, void repeat 0 { fout do ; Транслирует until, void until 0 { string token; int parencount = 1; fout while ; skipspaces (); Читает и запоминает ( , gettoken (token); if(token != ( ) throw SyntaxExc( ( expected in typeof . ); fout ( ; Начинает цикл while, заменяя на противоположное и заключая в скобки условное выражение. fout ! ( ; Теперь читает выражение, do ( if(!gettoken(token)) throw SyntaxExc( Unexpected EOF encountered. ); if(token == ( ) parencount++; if (token == ) ) parencount-; fout token;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |