parent
fbe0ff722c
commit
b01bea67f4
@ -0,0 +1,99 @@ |
|||||||
|
FabulaDSL { |
||||||
|
CodeSegment = (Block | CompleteOperation | EmptyLines)* |
||||||
|
|
||||||
|
identifier (an identifier) = identifierStart identifierContinue+ |
||||||
|
identifierStart = "_" | "$" | letter |
||||||
|
identifierContinue = identifierStart | digit |
||||||
|
|
||||||
|
newline = "\n" |
||||||
|
EmptyLines = operationTerminator+ |
||||||
|
|
||||||
|
nonNewlineSpace = ~newline space |
||||||
|
spaces := (nonNewlineSpace|blockComment)* |
||||||
|
|
||||||
|
target = "@" |
||||||
|
source = "&" |
||||||
|
null = "-" |
||||||
|
colon = ":" |
||||||
|
|
||||||
|
operand (an operand) = identifier | target | source |
||||||
|
comma = "," |
||||||
|
Operands (operands) = nonemptyListOf<operand, comma> |
||||||
|
|
||||||
|
experienceResource = caseInsensitive<"XP">|caseInsensitive<"EXP"> |
||||||
|
meteredResource (the name of a metered resource) = caseInsensitive<"HP">|caseInsensitive<"MP">|caseInsensitive<"IP">|caseInsensitive<"ZP">|caseInsensitive<"BP">|caseInsensitive<"Turns">|experienceResource |
||||||
|
spResource = caseInsensitive<"FP">|caseInsensitive<"UP">|caseInsensitive<"SP"> |
||||||
|
moneyResource = caseInsensitive<"Zenit">|caseInsensitive<"z"> |
||||||
|
materialsResource = caseInsensitive<"materials">|caseInsensitive<"mats">|caseInsensitive<"m"> |
||||||
|
levelResource = caseInsensitive<"Level">|caseInsensitive<"lv"> |
||||||
|
unmeteredResource (the name of an unmetered resource) = spResource|moneyResource|materialsResource|levelResource|caseInsensitive<"order"> |
||||||
|
resource (the name of a resource) = meteredResource|unmeteredResource |
||||||
|
|
||||||
|
deltaOperator = "+"|"-" |
||||||
|
integer (an integer) = digit+ |
||||||
|
Delta (a delta) = deltaOperator integer |
||||||
|
|
||||||
|
element = caseInsensitive<"fire">|caseInsensitive<"water">|caseInsensitive<"poison">|caseInsensitive<"lightning">|caseInsensitive<"earth">|caseInsensitive<"ice">|caseInsensitive<"wind">|caseInsensitive<"light">|caseInsensitive<"dark">|caseInsensitive<"physical"> |
||||||
|
affinity = "??"|"..."|"."|"!!" |
||||||
|
|
||||||
|
meteredSeparator = ~lineCommentStart ~blockCommentStart "/" |
||||||
|
MeteredValue = integer MaxValue |
||||||
|
MaxValue = meteredSeparator integer |
||||||
|
|
||||||
|
DeltaOperation = Operands space resource colon Delta affinity? element? |
||||||
|
DeltaOperationAlternate = Operands colon Delta affinity? resource? element? |
||||||
|
DeltaOperationAlternate2 = Operands colon resource Delta affinity? element? |
||||||
|
SetMeteredOperation = Operands space meteredResource colon MeteredValue |
||||||
|
SetMeteredOperationAlternate = Operands colon MeteredValue meteredResource |
||||||
|
SetMeteredOperationAlternate2 = Operands colon meteredResource MeteredValue |
||||||
|
SetValueOperation = Operands space resource colon integer |
||||||
|
SetValueOperationAlternate = Operands colon integer resource |
||||||
|
SetValueOperationAlternate2 = Operands colon resource integer |
||||||
|
SetMaxOperation = Operands space meteredResource colon MaxValue |
||||||
|
SetMaxOperationAlternate = Operands colon MaxValue meteredResource |
||||||
|
SetMaxOperationAlternate2 = Operands colon meteredResource MaxValue |
||||||
|
ClearOperation = Operands space resource colon null |
||||||
|
ClearOperationAlternate = Operands colon null resource |
||||||
|
ClearOperationAlternate2 = Operands colon resource null |
||||||
|
|
||||||
|
StatusDeltaOperation = Operands colon deltaOperator identifier |
||||||
|
|
||||||
|
notNewlineOrComment = ~newline ~lineCommentStart ~blockCommentStart any |
||||||
|
textToEndOfLine = notNewlineOrComment+ |
||||||
|
|
||||||
|
SetTargetOperation = target (Operands | null) |
||||||
|
SetSourceOperation = source (Operands | null) |
||||||
|
|
||||||
|
PrintOperation = ">" textToEndOfLine |
||||||
|
|
||||||
|
Operation = DeltaOperation | DeltaOperationAlternate | DeltaOperationAlternate2 |
||||||
|
| SetMeteredOperation | SetMeteredOperationAlternate | SetMeteredOperationAlternate2 |
||||||
|
| SetValueOperation | SetValueOperationAlternate | SetValueOperationAlternate2 |
||||||
|
| SetMaxOperation | SetMaxOperationAlternate | SetMaxOperationAlternate2 |
||||||
|
| ClearOperation | ClearOperationAlternate | ClearOperationAlternate2 |
||||||
|
| StatusDeltaOperation |
||||||
|
| SetTargetOperation | SetSourceOperation | PrintOperation |
||||||
|
|
||||||
|
silentOperator = "~" |
||||||
|
|
||||||
|
lineCommentStart = "//" |
||||||
|
lineComment = lineCommentStart textToEndOfLine (newline | end) |
||||||
|
|
||||||
|
blockCommentStart = "/*" |
||||||
|
blockCommentEnd = "*/" |
||||||
|
|
||||||
|
blockCommentCharacter = ~blockCommentEnd any |
||||||
|
blockCommentText = blockCommentCharacter* |
||||||
|
blockComment = blockCommentStart blockCommentText blockCommentEnd |
||||||
|
|
||||||
|
operationTerminator = newline | lineComment |
||||||
|
operationTerminatorOrEnd = operationTerminator | end |
||||||
|
CompleteOperation = silentOperator? Operation operationTerminatorOrEnd |
||||||
|
|
||||||
|
beginKeyword = caseInsensitive<"begin"> |
||||||
|
endKeyword = caseInsensitive<"end"> |
||||||
|
BlockStart = silentOperator? beginKeyword SetSourceOperation? SetTargetOperation? textToEndOfLine |
||||||
|
BlockEnd = endKeyword textToEndOfLine? |
||||||
|
|
||||||
|
Block = BlockStart operationTerminator CodeSegment BlockEnd operationTerminatorOrEnd |
||||||
|
} |
Loading…
Reference in new issue