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.
 
vore-rpg/src/scripting/NomScript.peggy

30 lines
1.2 KiB

{{
// 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 []; })