Refactor, add extensive README.md, add future planning
This commit is contained in:
42
src/Program/Builder/ProgramBuilder.php
Normal file
42
src/Program/Builder/ProgramBuilder.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Program\Builder;
|
||||
|
||||
use Program\Block;
|
||||
use Program\Program;
|
||||
use Program\Word;
|
||||
use RuntimeException;
|
||||
|
||||
class ProgramBuilder
|
||||
{
|
||||
/**
|
||||
* @param Word[] $words
|
||||
* @return Program
|
||||
*/
|
||||
public function build(array $words): Program
|
||||
{
|
||||
$firstWord = array_shift($words);
|
||||
if (!preg_match('/^N9\d\d\d$/i', $firstWord)) {
|
||||
throw new RuntimeException('Expected program number (N9xxx), got ' . $firstWord);
|
||||
}
|
||||
|
||||
$program = new Program($firstWord->value);
|
||||
|
||||
$blockBuffer = null;
|
||||
while ($word = array_shift($words)) {
|
||||
if ($word->register === 'N') {
|
||||
if (!is_null($blockBuffer)) {
|
||||
$program->addBlock($blockBuffer);
|
||||
}
|
||||
$blockBuffer = new Block($word->value);
|
||||
continue;
|
||||
}
|
||||
$blockBuffer->addWord($word);
|
||||
}
|
||||
if (!is_null($blockBuffer)) {
|
||||
$program->addBlock($blockBuffer);
|
||||
}
|
||||
|
||||
return $program;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user