간단한 어휘 분석기를 작성했습니다. 그리고 인식 된 각 토큰에 속성을 제공 할 필요성을 이해합니다. 의 내가 무엇을 가지고 보자 : 렉서에서토큰 속성
public sealed class Token
{
public enum TokenClass
{
Identifier,
StringLiteral,
NumberLiteral,
Operator,
PunctuationSeparator,
Bracket,
Parenthesis
}
public TokenClass Class { get; internal set; }
public String Value { get; internal set; }
}
나는, 자신의 가치 & 클래스를 설정 토큰을 큐에 넣습니다. 그러나 속성은 어떻습니까? 기존 토큰 클래스를 기준으로 기능을 어떻게 디자인해야합니까?
먼저 문질러서 내 마음에 와서이었다 :
- 내부 토큰 클래스 (내가 그 수는 정수 및 실제 등이 될 수 의미) "모호한-기관"의 개인 추상 클래스를 선언;
- 그런 다음 상속 된 클래스를 선언합니다.
public class Comma : PunctuationSeparator {}
; - 재산 추가
Object Attribute {get; private set;}
; - 그런 다음
private void ApplyAttribute()
과 같은 메서드를 만듭니다. - 토큰이 인스턴스화되고 속성이 설정되면
ApplyAttribute()
으로 전화하십시오. ApplyAttribute()
과 같은 것을 사용하십시오. 파서에서switch(this.TokenClass) { case this.TokenClass.Number: { this.Attribute = (Int32.TryParse(this.Value))? new Integer() : new Real(); } }
if(CurToken.Attribute is Integer)
뭔가를 작성하는 쉬운 것입니다. 내가 그렇게해야하는 것을 막을 수있는 한 가지는 내가 만들어야하는 수업의 수입니다. 이 해결책이 수용 가능한가? 대신
public String Value { get; internal set; }
의
도메인의 온톨로지가 있습니까 :
당신은 테 런스 파의 책 (들)을 살펴 할 수 있습니다? 다른 종류의 빈 클래스를 만들어야 만하는 것은 아닙니다. 이미 상속 구조를 만들었습니까? 어쩌면 다른 유형의 'PunctuationSeperator'를 설정하는 것만으로 충분합니다. – Marnix
아니요 여기에 설명 된 내용을 아직 작성하지 않았습니다. 이것들은 단지 나의 계획과 의심입니다. 유용하게 보이지만 수업은 ... 내가 결정할 수는 없어. 도움 : 마지막 문장을 말하는 것이 무슨 뜻이야? – lexeme
'PunctuationSeperator'와 같은 클래스를 생성 할 때. 서로 다른 puctuations [comma, period, semilocon]로 열거 형을 정의하는 것이 편리 할 수 있습니다. 그래서 먼저, 그러한 판단을 내리기 전에 도메인을 정의해야한다고 생각합니다. – Marnix