v3: gstack-code-gen 生成
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import json
|
||||
from data.field_tree import FieldTree, Field
|
||||
from agents.llm import LLMClient
|
||||
|
||||
P1 = "You are a COBOL COPYBOOK parser. Output JSON: {\"fields\":[{\"name\":\"...\",\"level\":N,\"pic\":\"...\",\"usage\":\"DISPLAY|COMP-3|COMP\",\"offset\":N,\"length\":N,\"decimal\":N,\"signed\":bool,\"occurs\":N|null,\"redefines\":\"...\"|null,\"conditions\":[{\"name\":\"...\",\"value\":\"...\"}],\"children\":[...]}]} Return JSON only."
|
||||
|
||||
|
||||
class Agent1Parser:
|
||||
def __init__(self, llm: LLMClient):
|
||||
self.llm = llm
|
||||
|
||||
def parse(self, text: str) -> FieldTree:
|
||||
r = self.llm.call([{"role": "system", "content": P1}, {"role": "user", "content": text}])
|
||||
try:
|
||||
return self._load(json.loads(r))
|
||||
except:
|
||||
return FieldTree(copybook_name="parse_error")
|
||||
|
||||
def _load(self, d):
|
||||
return FieldTree(fields=self._fields(d.get("fields", []), 0))
|
||||
|
||||
def _fields(self, raw, off):
|
||||
result = []
|
||||
cur = off
|
||||
for rf in raw:
|
||||
f = Field(name=rf.get("name", ""), level=rf.get("level", 0), pic=rf.get("pic", ""),
|
||||
usage=rf.get("usage", "DISPLAY"), offset=cur, length=rf.get("length", 0),
|
||||
decimal=rf.get("decimal", 0), signed=rf.get("signed", False),
|
||||
occurs=rf.get("occurs"), redefines=rf.get("redefines"),
|
||||
conditions=rf.get("conditions", []))
|
||||
f.children = self._fields(rf.get("children", []), cur)
|
||||
cur += f.length
|
||||
result.append(f)
|
||||
return result
|
||||
Reference in New Issue
Block a user