parseProgram method
Implementation
Program parseProgram() {
final starts = <Statement>[];
Statement? start;
final stmts = <Statement>[];
final env = Env();
final errors = <ErrorNode>[];
Node parent = Root();
while (true) {
final node = _nextStmt(parent, env);
if (node == null) {
if (start == null) {
if (starts.isNotEmpty) {
start = starts.first;
} else if (stmts.isNotEmpty) {
start = stmts.first;
}
}
return Program(
stmts,
env: env,
errors: errors,
start: start,
);
}
if (node is ErrorNode) {
errors.add(node);
continue;
}
final stmt = node as Statement;
if (stmt.label.isNotEmpty) {
env.labels[stmt.label] = stmt;
}
if (stmt.opecode == 'START') {
starts.add(stmt);
if (stmt.label == env.entryLabel) {
start = stmt;
}
}
stmts.add(stmt);
parent = stmt;
}
}