Insidion Engine
Share
Explore

Scanning

The Scanner has two jobs:
remove comments
produce character stream

Removing Comments

The scanner has to iterate over each line, and implement a simple algorithm to ignore the current line if it is a comment or part of a multiline comment.
This is what Scanner.stripComments does:
String stripComments(String source) {
List<String> lines = [];
bool inMultilineComment = false;
source.split("\n").forEach((String line) {
String cleanLine = line.trim();
if (cleanLine.length > 1) {
if (cleanLine[0] == '/') {
if (cleanLine[1] == '/' || cleanLine[1] == '|') {
} else if (cleanLine[1] == '*') {
inMultilineComment = true;
}
} else if (cleanLine[0] == '*' && cleanLine[1] == '/') {
inMultilineComment = false;
} else {
!inMultilineComment ? lines.add(line) : null;
}
} else {
!inMultilineComment ? lines.add(line) : null;
}
});
return lines.join('\n');
}
It adds each line to the cleaned source only if it is not a comment or part of one.

Character Stream

This step is basically taking this:
var myVar = 10;
And turning it into this:
[v, a, r, , m, y, V, a, r, , =, , 1, 0, ;]
The list of characters above is known as a character stream. I don’t suppose we need to see how Insidion implements this because it’s as simple as source.split(’’) .
Share
 
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.