ln.lexer/SharpLexer/match/CharacterSequence.cs

44 lines
899 B
C#

using System;
using lexer.buffer;
using System.Collections.Generic;
namespace lexer.match
{
public class CharacterSequence : Matchable
{
char[] sequence;
public CharacterSequence(CharacterBuffer chbuffer)
{
List<char> characters = new List<char>();
while (chbuffer.MoveNext() != '"'){
if (chbuffer.Current == '\\'){
chbuffer.MoveNext();
}
characters.Add(chbuffer.Current);
}
sequence = characters.ToArray();
chbuffer.MoveNext();
}
public override MatchedPart[] Match(CharacterBuffer chbuffer)
{
if (chbuffer.Current != '"'){
throw new FormatException("CharacterSequence must start with \"");
}
chbuffer.Push();
foreach (char sch in sequence){
if (sch != chbuffer.MoveNext()){
chbuffer.Pop();
return null;
}
}
chbuffer.Pop();
return new MatchedPart[] { new MatchedPart(this, this.sequence) };
}
}
}