Ejemplo n.º 1
0
        private TreeNode C()
        {
            var now = myLexer.Current;

            switch (now.Type)
            {
            case Type.NOT:
            {
                var list = new List <TreeNode> {
                    new Not()
                };
                myLexer.MoveNext();
                list.Add(C());
                return(new Rule(list, nameof(C)));
            }

            case Type.LPAREN:
            {
                var list = new List <TreeNode> {
                    new Parenthesis(now.Value)
                };
                myLexer.MoveNext();
                list.Add(S());
                list.Add(new Parenthesis(')'));
                myLexer.MoveNext();
                return(new Rule(list, nameof(C)));
            }

            case Type.VAR:
            {
                var list = new List <TreeNode> {
                    new Terminal(now)
                };
                myLexer.MoveNext();
                return(new Rule(list, nameof(C)));
            }

            default:
                throw new ParseException(myLexer.Pos);
            }
        }