You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
1.2 KiB
30 lines
1.2 KiB
3 years ago
|
{{
|
||
|
// global (one-time) initializer
|
||
|
import { scriptFile } from "./ScriptFile";
|
||
|
import { numberValue } from "./ScriptValue";
|
||
|
import { versionStatement } from "./TopLevelStatement";
|
||
|
}}
|
||
|
|
||
|
{
|
||
|
// per-parse initializer
|
||
|
}
|
||
|
|
||
|
// peggy-loader:startRule ScriptFile
|
||
|
ScriptFile = statements:TopLevelStatementList { return scriptFile(statements); }
|
||
|
|
||
|
NewLine "newline" = "\n" { return null; }
|
||
|
WhiteSpace "whitespace" = [ \r\v\t]+ { return null; }
|
||
|
LineComment "line comment" = "//" [^\n]* { return null; }
|
||
|
BlockCommentTail = "*/" / ( "*" !"/" [^*]* BlockCommentTail ) { return null; }
|
||
|
BlockComment "block comment" = "/*" [^*]* BlockCommentTail { return null; }
|
||
|
|
||
|
IntegerLiteral "integer literal" = digits:$[0-9]+ { return numberValue(digits); }
|
||
|
|
||
|
NonToken = (LineComment / BlockComment / WhiteSpace) { return null; }
|
||
|
_ = (NonToken+) { return null; }
|
||
|
StatementEnd = _? NewLine { return null; }
|
||
|
|
||
|
VersionStatement "version statement" = "script" _ "version" _ version:IntegerLiteral { return versionStatement(version.value); }
|
||
|
|
||
|
TopLevelStatement "top-level statement" = VersionStatement
|
||
|
TopLevelStatementList = (StatementEnd* _? head:TopLevelStatement tail:(StatementEnd+ _? @TopLevelStatement)* StatementEnd* _? { return [head, ...tail]; }) / (StatementEnd* _? { return []; })
|