rCmd); parsedCommand=tmParseCommand (strCmd, idxLine ); (! parsedCommand) tmCompileError ( Непередбачена помилка в + idxLine + -му рядку raquo ;, b, e); ( errorMessage in parsedCommand) tmCompileError (parsedCommand.errorMessage, b, e); prefix = + ParsedCommand.smbFrom + parsedCommand.stFrom; (prefix in arNewProgram) tmCompileError ( Рядок + idxLine + laquo ;: Повторення команди + strCmd + для символу '
+ parsedCommand.smbFrom + ' і стану + ParsedCommand.stFrom, b, e); [prefix]=parsedCommand;
}
}=arNewProgram; true;
} tmParseCommand (str, idxLine) {
//var arMatch=str.match(/(.)([a-zA-Z0-9][a-zA-GI-KM-QS-Z0-9_^*]*)-gt;(.)([a-zA-Z0-9][a-zA-GI-KM-QS-Z0-9_^*]*)([LRH]?)/);arMatch =str.match(/(.)([a-zA-Z0-9](?:[^s-gt;]*[^s-gt;LRH])*)-gt;(.)([a-zA-Z0-9](?:[^s-gt;]*[^s-gt;LRH])*)([LRH]?)/);(!arMatch || ArMatch.length!=6) {: Рядок + IdxLine + laquo ;: Непередбачена помилка в команді + Str
}; smbFrom=arMatch [1]; stFrom=arMatch [2]; smbTo=arMatch [3]; stTo=arMatch [4]; mvTo=arMatch [5]; (! (smbFrom in setTMAlphabet)) {: Рядок + IdxLine + laquo ;: У команді + Str + символ + SmbFrom + не входить в алвфавіт Вашої машини Тьюринга
}; (! (stFrom in setTMStates)) {
errorMessage: Рядок + IdxLine + laquo ;: У команді + Str + стан + StFrom + не входить в безліч станів Вашої машини Тьюринга
}; (! (smbTo in setTMAlphabet)) {
errorMessage: Рядок + IdxLine + laquo ;: У команді + Str + символ + SmbTo + не входить в алвфавіт Вашої машини Тьюринга
}; (! (stTo in setTMStates)) {
errorMessage: Рядок + IdxLine + laquo ;: У команді + Str + стан + StTo + не входить в безліч станів Вашої машини Тьюринга
}; (! mvTo)= H raquo ;; {: smbFrom ,: smbTo ,: stFrom ,: stTo ,: mvTo
};
} tmClearTape () {(var idxCell=-tapeShift; idxCell lt; tapeShift; idxCell ++) {(idxCell, );
}
} tmSetConfig (strConfig) {(); (var idxSymbol=0; idxSymbol lt; strConfig.length; idxSymbol ++) (! (strConfigarAt (idxSymbol) in setTMAlphabet)) tmCompileError ( Символ + strConfigarAt (idxSymbol) + не входить в алфавіт Вашої машини Тьюринга ); (); (var idxSymbol=0; idxSymbol lt; strConfig.length; idxSymbol ++) (idxSymbol, strConfigarAt (idxSymbol)); (strConfig.length + 1); (0);
} tmSetState (strState) {(); (! strState) tmCompileError ( Невизначене стан машини Тьюринга ); (! (strState in setTMStates)) tmCompileError ( Стан + strState + не входить в безліч станів Вашої машини Тьюринга ); (ctlStateildNodes.length) .removeChild (ctlState.lastChild);=document.createTextNode (strState) ;. appendChild (tnState);=strState; true ;
} tmStep () {(); (strTMCurrentState == STOP ) {( Робота машини Тьюринга успішно завершена ); false;
} (! strTMCurrentState) tmCompileError ( Не встановлено стан машини Тьюринга ); (! (strTMCurrentState in setTMStates)) tmCompileError ( Стан + strTMCurrentState + raquo, не входить в безліч станів Вашої машини Тьюринга ); (isNaN (idxTMCurrentCell)) tmCompileError ( Чи не встановлена ??поточна комірка машини Тьюринга ); smbCurrent=tmGetCellValue (idxTMCurrentCell); (! smbCurrent)= B raquo ;; (! (smbCurrent in setTMAlphabet))
return tmCompileError ( Символ + smbCurrent + не входить в алфавіт Вашої машини Тьюринга );
var prefix= + SmbCurrent + strTMCurrentState; (! SetTMProgram)
return tmCompileError ( Немає жодної команди для виконання );
if (! (prefix in setTMProgram)) tmCompileError ( Немає команди для символу + smbCurrent + і стану + strTMCurrentState + raquo ;); cmd=setTMProgram [prefix]; (! (cmd.smbTo in setTMAlphabet))
return tmCompileError ( Символ + cmd.smbTo + не входить в алфавіт Вашої машини Тьюринга n +
При виконанні команди для символу + SmbCurrent + і стану + StrTMCurrentState + );
if (! (cmd.stTo in setTMStates))
return tmCompileError ( Стан + cmd.stTo + не входить в безліч станів Вашої машини Тьюринга n +
При виконанні команди для символу + SmbCurrent + і стану + StrTMCurrentState + ); (! (Cmd.mvTo == L || cmd.mvTo == R || cmd.mvTo == H )) tmCompileError ( laquo ; Непередбачена помилка при виконанні переміщення в команді для символу + smbCurrent + і стану + strTMCurrentState + );
tmSetCellValue (idxTMCurrent...