我正在嘗試爲lisp風格的plist創建一個抽象語法。例如:面向對象的嵌套字典數據結構
(:A 1 :B (:X 3 :Y 2) :C 4)
這裏的語法到目前爲止(在EBNF):
Plist -> { Key Value }*
Key -> string
Value -> string | Plist
我要代表在C#中這個數據結構。不幸的是,我正在努力爲非終端創建類。在python這樣的動態類型語言中,這似乎很微不足道(字典值爲字符串或字典的字典)。但是在C#中,數據結構的用戶如何以多態的方式知道值是一個plist還是一個字符串?
這裏的C#代碼,我到目前爲止有:
interface Value { }
class PList : Value
{
private Dictionary<string, Value> Dict;
public Value this[string key]
{
get
{
return Dict[key];
}
}
}
class String : Value
{
public string Datum { get; set; }
}
如果您使用對象代替值,您可以添加一個新的對象[] {#}或新的Dictionary作爲對象,那麼您可以使用遞歸方法來訪問和處理。 – Bit