Exemple #1
0
        public THISListDIEExpression(
            SkipWhitespaceToken a,
            ColourToken target1Colour,
            NameToken target1,
            SkipWhitespaceToken b,
            CommaToken c,
            SkipWhitespaceToken d,
            ColourToken target2Colour,
            NameToken target2,
            SkipWhitespaceToken e,
            SquareCloseToken f,
            SkipWhitespaceToken g,
            DotToken h,
            SkipWhitespaceToken i,
            DIEToken j,
            SkipWhitespaceToken k,
            RoundOpenToken l,
            SkipWhitespaceToken m,
            RoundCloseToken n,
            SkipWhitespaceToken o,
            SemicolonToken p)
        {
            Target1       = target1.Name;
            Target1Colour = target1Colour.Colour;

            Target2       = target2.Name;
            Target2Colour = target2Colour.Colour;
        }
Exemple #2
0
 public DIEExpression(
     MaybeColouredNameToken target,
     SkipWhitespaceToken a,
     DotToken b,
     SkipWhitespaceToken c,
     DIEToken d,
     SkipWhitespaceToken e,
     RoundOpenToken f,
     SkipWhitespaceToken g,
     RoundCloseToken h,
     SkipWhitespaceToken i,
     SemicolonToken j)
 {
     Target       = target.Name;
     TargetColour = target.Colour;
 }
Exemple #3
0
        public IEnumerable <BrainfuckToken> Parse(TextReader streamReader)
        {
            var ret = new List <BrainfuckToken>();
            var leftBracketStack = new Stack <LeftBracketToken>();

            BrainfuckToken prev  = null;
            var            index = -1;

            while (0 <= streamReader.Peek())
            {
                ++index;

                var c = (char)streamReader.Read();

                BrainfuckToken current = null;
                switch (c)
                {
                case '>':
                    current = new RightShiftToken();
                    break;

                case '<':
                    current = new LeftShiftToken();
                    break;

                case '+':
                    current = new PlusToken();
                    break;

                case '-':
                    current = new MinusToken();
                    break;

                case '.':
                    current = new DotToken();
                    break;

                case ',':
                    current = new SemicolonToken();
                    break;

                case '[':
                {
                    var leftBracket = new LeftBracketToken();
                    leftBracketStack.Push(leftBracket);

                    current = leftBracket;
                }
                break;

                case ']':
                {
                    if (leftBracketStack.Count == 0)
                    {
                        throw new InvalidOperationException();
                    }

                    var leftBracket  = leftBracketStack.Pop();
                    var rightBracket = new RightBracketToken();

                    leftBracket.RightBracketToken = rightBracket;
                    rightBracket.LeftBracketToken = leftBracket;

                    current = rightBracket;
                }
                break;
                }

                if (current == null)
                {
                    continue;
                }

                current.Index = index;

                prev?.SetNextIndexToken(current);

                prev = current;

                ret.Add(current);
            }

            if (leftBracketStack.Count != 0)
            {
                throw new InvalidOperationException();
            }

            return(ret);
        }
Exemple #4
0
        public BrainfuckTokenSequence Parse(TextReader streamReader, BrainfuckMemoryTape memoryTape = null)
        {
            memoryTape = memoryTape ?? new BrainfuckMemoryTape();

            var leftBracketStack = new Stack <LeftBracketToken>();

            BrainfuckToken first = null;
            BrainfuckToken prev  = null;
            var            index = -1;

            while (0 <= streamReader.Peek())
            {
                ++index;

                var c = (char)streamReader.Read();

                BrainfuckToken current = null;
                switch (c)
                {
                case '>':
                    current = new RightShiftToken();
                    break;

                case '<':
                    current = new LeftShiftToken();
                    break;

                case '+':
                    current = new PlusToken();
                    break;

                case '-':
                    current = new MinusToken();
                    break;

                case '.':
                    current = new DotToken();
                    break;

                case ',':
                    current = new SemicolonToken();
                    break;

                case '[':
                {
                    var leftBracket = new LeftBracketToken();
                    leftBracketStack.Push(leftBracket);

                    current = leftBracket;
                }
                break;

                case ']':
                {
                    if (leftBracketStack.Count == 0)
                    {
                        throw new InvalidOperationException();
                    }

                    var leftBracket  = leftBracketStack.Pop();
                    var rightBracket = new RightBracketToken();

                    leftBracket.RightBracketToken = rightBracket;
                    rightBracket.LeftBracketToken = leftBracket;

                    current = rightBracket;
                }
                break;

                default:
                    break;
                }

                if (current == null)
                {
                    continue;
                }

                current.MemoryTape = memoryTape;
                current.Index      = index;

                if (prev != null && prev.Next == null)
                {
                    prev.SetNextIndexToken(current);
                }

                prev = current;

                if (first != null)
                {
                    continue;
                }
                first = current;
            }

            if (leftBracketStack.Count != 0)
            {
                throw new InvalidOperationException();
            }

            return(new BrainfuckTokenSequence(first));
        }