我正在尝试使用python将输出列表转换为json。
输入:
[intents:['abc']]
输出:
{"some" : [ {"var":"intents"}, {"==":[{"var":"intent"}, "abc"]}
输入:
[EntityNode:['abc']]
输出:
{"some" : [ {"var":"entities"}, {"==":[{"var":"entity"}, "abc"]}
输入:
[EntityNode:['abc', 'hjk']]
输出:
{"some" : [ {"var":"entities"}, {"==":[{"var":"entity"}, "abc"]}
{"some" : [ {"var":"entities"}, {"==":[{"var":"value"}, "hjk"]}
我应该使用哪种方法?请帮我用python编码。
[一般来说,向Python库提出建议的SO问题通常会被关闭,因为会对此问题或特定模块提供意见。这个问题尤其广泛,因为您针对该请求的尝试解决方案发布了广泛的请求,而不是特定的问题。
不管您最终使用什么模块,都应该从为您的小语言编写BNF开始。它将用作解析器设计的路线图,并在完成其组成部分时为您提供明确的目标和指示。没有它,就很容易在细节上摸索,永远也无法获得可行的项目。
根据您发布的示例,我为您检查了BNF。它不是过于正式或严格,甚至可能无法准确地表示您想要的语法。但是充实并使用它可能会帮助您逐步构建思想和解析器设计:
statement ::= if_statement | say_statement | set_statement
if_statement ::= 'IF' logical_expression ':' (statement | statement_block)
say_statement ::= 'SAY' string_expression
set_statement ::= 'SET' lvalue 'TO' rvalue
lvalue ::= dollar_ident
rvalue ::= string_expression | numeric_expression | logical_expression | at_ident | hash_ident
comparison_op ::= '>' | '<' | '<=' | '>='
equality_op ::= '==' | '!='
comparison_expression ::= infix(rvalue, [equality_op, comparison_op])
logical_expression ::= infix(comparison_expression, ['NOT', 'AND', 'OR'])
numeric_expression ::= infix(numeric_value, [('*', '/'), ('+', '-')])
string_expresion ::= quoted_string ['+' quoted_string]...
dollar_ident ::= '$' identifier
at_ident ::= '@' identifier [':' paren_expression ]
hash_ident ::= '#' identifier
paren_expression ::= '(' word... ')'
word ::= alphanumeric character...