fix Parser for GDScript

This commit is contained in:
2025-10-30 19:56:44 -05:00
parent ad2f9553d1
commit 829dd9023d
3 changed files with 72 additions and 46 deletions

View File

@@ -1,30 +1,6 @@
class_name Parser
static var symbols: Array[Variant] = [if true:
haxe_ds_StringMap.new().__set("INCLUDE ", Parser.include)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("<-", Parser.thread)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("->", Parser.divert)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("===", Parser.knot)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("==", Parser.knot)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("=", Parser.stitch)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("~", Parser.haxeLine)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("```", Parser.haxeBlock)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("-", Parser.gather)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("*", Parser.choice)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("+", Parser.choice)
haxe_ds_StringMap.new(), if true:
haxe_ds_StringMap.new().__set("#", Parser.tag)
haxe_ds_StringMap.new()]
static var symbols: Array[Variant] = []
static var choices: int = 0
var buffers: Array[HankBuffer] = []
@@ -32,6 +8,54 @@ var ast: Array[Variant] = []
func _init() -> void:
choices = 0
symbols.push_back({
"key": "INCLUDE ",
"value": Parser.include
})
symbols.push_back({
"key": "<-",
"value": Parser.thread
})
symbols.push_back({
"key": "->",
"value": Parser.divert
})
symbols.push_back({
"key": "===",
"value": Parser.knot
})
symbols.push_back({
"key": "==",
"value": Parser.knot
})
symbols.push_back({
"key": "=",
"value": Parser.stitch
})
symbols.push_back({
"key": "~",
"value": Parser.haxeLine
})
symbols.push_back({
"key": "```",
"value": Parser.haxeBlock
})
symbols.push_back({
"key": "-",
"value": Parser.gather
})
symbols.push_back({
"key": "*",
"value": Parser.choice
})
symbols.push_back({
"key": "+",
"value": Parser.choice
})
symbols.push_back({
"key": "#",
"value": Parser.tag
})
func parseString(h: String) -> Array[Variant]:
var stringBuffer: HankBuffer = HankBuffer.Dummy(h)
@@ -137,8 +161,8 @@ static func parseExpr(buffer: HankBuffer, position: Position) -> Variant:
while (_g2 < _g1.size()):
var rule: Variant = _g1[_g2]
_g2 += 1
var symbol: String = rule.keys().get("next").call()
var rule2 = rule.__get(symbol)
var symbol: String = rule.get("key")
var rule2 = rule.get("value")
if (StringTools.startsWith(StringTools.trim(line2), symbol)):
buffer.skipWhitespace("")
return rule2.call(buffer, position)
@@ -146,6 +170,8 @@ static func parseExpr(buffer: HankBuffer, position: Position) -> Variant:
1:
assert(false, str("Tried to parse expr when no lines were left in file"))
return null
static func lineTokens(buffer: HankBuffer, n: int, position: Position, throwOnMismatch: bool = true, rtrim: bool = true) -> Array[String]:
var line: String = Extensions.unwrap(buffer.takeLine(""))