44 lines
899 B
C#
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) };
|
|
}
|
|
|
|
|
|
}
|
|
}
|