Simulate a Minsky Register Machine (I)
Perl, 166

@p=&lt;&gt;;/=/,$_{$`}=$' for split$",pop@p;$o='\w+';(map{($r
,$o,$,,$b)=$'=~/".*?"|\S+/g if/^$o :/}@p),$_=$o=($_{$r}
+=','cmp$o)&lt;0?do{$_{$r}=0;$b}:$,until/"/;say for eval,%_


Run with perl -M5.010 file.

It started wildly different, but I'm afraid it converged with the Ruby solution in many areas towards the end.  Seems like Ruby's advantage is "no sigils", and Perl's "better regex integration".

A bit of detail from the innards, if you don't read Perl:


@p=&lt;&gt;: read the whole machine description to @p
/=/,$_{$`}=$' for split$",pop@p: for each (for) assignment (split$") in the last machine description line (@p), locate equal sign (/=/) then assign value $' to hask %_ key $`
$o='\w+': initial state would be first one to match Perl regex "word characters"
until/"/: loop until we reach a termination state:

map{($r,$o,$,,$b)=$'=~/".*?"|\S+/g if/^$o :/}@p: loop on machine description @p: when we're on the line matching current state (if/^$o :/), tokenize (/".*?"|\S+/g) the rest of the line $' to variables ($r,$o,$,,$b).  Trick: the same variable $o if used initially for label name and subsequently for operator.  As soon as the label matches, the operator overrides it, and as a label can't (reasonably) be named + or -, it never matches again.
$_=$o=($_{$r}+=','cmp$o)&lt;0?do{$_{$r}=0;$b}:$,:- adjust target register $_{$r} up or down (ASCII magic: ','cmp'+' is 1 whereas ','cmp'-' is -1);- if the result is negative (&lt;0?, can only happens for -)- then stay at 0 ($_{$r}=0) and return second label $b;- else return first (possibly sole) label $,
BTW, it's $, instead of $a so it can be glued to next token until with no whitespace in between.

say for eval,%_: dump report (eval) and contents of registers in %_