1
fgwmlhdkkkw 130 天前
|
2
ipwx 130 天前
写 dsl 可以用 pyparsing
|
3
liberize 130 天前 via Android
如果 get 后面的 name 里包含'|',直接用 split 有问题。
|
4
GeekGao 130 天前
```
from pyparsing import Word, alphanums, Suppress, Group, OneOrMore, Optional def parse_pipeline(pipeline_string): # 定义基本元素 command = Word(alphanums + "_") argument = Word(alphanums + "_='") pipe = Suppress("|") # 定义命令结构 command_structure = Group(command + Optional(Group(OneOrMore(argument)))) # 定义整个管道结构 pipeline = OneOrMore(command_structure + Optional(pipe)) # 解析字符串 parsed = pipeline.parseString(pipeline_string) result = [] for item in parsed: if len(item) == 1: result.append({"command": item[0], "args": []}) else: result.append({"command": item[0], "args": item[1].asList()}) return result # 使用 pipeline_str = "parser | get='name' | len==10 | original | parser | get='age'" parsed_pipeline = parse_pipeline(pipeline_str) print(parsed_pipeline) ``` Output: ``` [{'command': 'parser', 'args': []}, {'command': 'get', 'args': ["='name'"]}, {'command': 'len', 'args': ['==10']}, {'command': 'original', 'args': []}, {'command': 'parser', 'args': []}, {'command': 'get', 'args': ["='age'"]}] ``` 抛砖引玉。 |
5
nowheremanx OP |
6
GeekGao 130 天前
@nowheremanx 额 这算哪门子工整。。。
|
7
rming 130 天前
awk 可解,就是学习成本有点高
|
8
rming 130 天前
|
9
june4 130 天前
格式这么简单有序的东西,完全没必要手写分析器从一个个字符处理,split 加正则才是正道,除非你本意是想学点新东西
|