나는 리스프 스타일 plist에 대한 추상 구문을 만들려고합니다. 예를 들어 :개체 지향 중첩 된 사전 데이터 구조
Plist -> { Key Value }*
Key -> string
Value -> string | Plist
나는 C#에서이 데이터 구조를 표현해야
(:A 1 :B (:X 3 :Y 2) :C 4)
여기에 지금까지 (EBNF에서) 문법이다. 불행히도, 나는 비 터미널 용 클래스를 만들기 위해 고심 중이다. 이것은 파이썬 (문자열이나 dicts 값을 가진 dict)과 같이 동적으로 형식화 된 언어에서는 사소한 것처럼 보입니다. 그러나 C#에서는 값이 plist인지 또는 다형성의 문자열인지 데이터 구조의 사용자가 어떻게 알 수 있습니까?
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; }
}
값 대신 object를 사용하면 새 객체 [] {#} 또는 새 사전을 객체로 추가 할 수 있습니다. 그러면 재귀 적 메소드를 사용하여 액세스하고 처리 할 수 있습니다. – Bit