You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#中的Irony解析含null值的键值对字符串?

使用Irony解析包含null值的键值对字符串

Irony完全支持解析包含null值的键值对,你只需要扩展现有的语法规则,让值部分同时接受字符串字面量和null关键字即可。

修改后的完整代码示例

// 定义字符串字面量(保留你原有的定义)
var stringLiteral = new StringLiteral("String", "\"");
// 定义null关键字作为字面量
var nullLiteral = new KeyTerm("null", "Null");

// 定义值的非终结符:允许是字符串或者null
var value = new NonTerminal("Value");
value.Rule = stringLiteral | nullLiteral;

// 定义比较操作符(明确匹配等号,避免歧义)
var comparisonOp = new NonTerminal("ComparisonOp");
comparisonOp.Rule = "=";

// 定义键的规则:如果是固定"Key"就用下面的写法,如果要支持任意标识符,换成IdentifierTerminal
var key = new NonTerminal("Key");
key.Rule = "Key"; // 或者 new IdentifierTerminal("KeyIdentifier") 支持任意合法标识符

// 构建最终的过滤规则
var filterRule = new BnfExpression();
filterRule |= key + comparisonOp + value;

解析后的判断逻辑

解析完成后,你可以通过检查ParseTreeNode的类型来区分值是字符串还是null:

// 假设解析得到根节点root
var valueNode = root.ChildNodes[2];
if (valueNode.Term is StringLiteral)
{
    string strValue = valueNode.Token.ValueString;
    // 处理字符串值逻辑
}
else if (valueNode.Term is KeyTerm && valueNode.Token.Text.Equals("null", StringComparison.OrdinalIgnoreCase))
{
    // 处理null值逻辑
}

这样修改后,你的语法规则就能同时匹配key = "value"和key = null两种格式了。

内容的提问来源于stack exchange,提问作者Deepak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 03:22:43