public void visit(TerminalD terminalD)
 {
     if (symbolType == SymbolType.Terminal)
     {
         if (terminalD.Name.Equals(name))
             found = true;
     }
 }
        public void visit(TerminalD terminalD)
        {
            // set current, ready for parent
            TerminalV terminalV = new TerminalV(terminalD, level + 1);

            terminalD.References.Add(terminalV);

            current = terminalV;
        }
        public void visit(TerminalD terminalD)
        {
            String value = terminalD.Name;

            Run run = new Run();
            if (terminalD.IsSelected)
                run.FontWeight = FontWeights.Bold;

            run.Text = terminalEncapsulation + value + terminalEncapsulation;

            representation.Inlines.Add(run);
        }
コード例 #4
0
 private static Lexeme Reverse(TerminalD terminal)
 {
     return new Lexeme(LexemeType.Terminal, terminal.Name, -1);
 }
コード例 #5
0
        /// <summary>
        /// Returns the rule structure, without the ChoiceLineD
        /// </summary>
        /// <param name="productionRuleLexemes"></param>
        /// <returns></returns>
        private void CreateRuleDataStructure(List<Lexeme> productionRuleLexemes, ChoiceLineD choiceLineD)
        {
            //GrammarNodeD returnVal;
            OperationD current = choiceLineD; // points to which level we are at
            //returnVal = current;

            // Split by Choice as this has the highest precedence
            List<Lexeme> choiceLexemes = new List<Lexeme>();
            ArrayList choices = new ArrayList();

            foreach (Lexeme lexeme in productionRuleLexemes)
            {
                if (lexeme.Type == LexemeType.Choice)
                {
                    choices.Add(choiceLexemes);
                    choiceLexemes = new List<Lexeme>();
                }
                else
                {
                    choiceLexemes.Add(lexeme);
                }
            }

            // add last choice list
            choices.Add(choiceLexemes);

            // put in a choiceD
            ChoiceD choiceD = new ChoiceD(current);
            current.appendChild(choiceD);
            current = choiceD; // move down a level

            // add the concatenated items for each Choice
            foreach (List<Lexeme> concatLexemes in choices)
            {
                ConcatenationD concatenation = new ConcatenationD(current);

                foreach (Lexeme lexeme in concatLexemes)
                {
                    if (lexeme.Type == LexemeType.Nonterminal)
                    {
                        // create nonterminal tail from the nonterminalhead
                        NonterminalHeadD nontHead = getNonterminalHead(lexeme.Value);
                        if (nontHead == null)
                            throw new Exception("Could not find a defined rule for the Nonterminal: " + lexeme.Value);

                        NonterminalTailD nontTail = new NonterminalTailD(nontHead, concatenation);

                        // add the tail to current children
                        concatenation.appendChild(nontTail);
                    }
                    else if (lexeme.Type == LexemeType.Terminal)
                    {
                        TerminalD terminalD = new TerminalD(lexeme.Value, concatenation);
                        concatenation.appendChild(terminalD);
                    }
                    else if (lexeme.Type == LexemeType.Undefined)
                    {
                        UndefinedD undefinedD = new UndefinedD(concatenation);
                        concatenation.appendChild(undefinedD);
                    }
                    else if (lexeme.Type != LexemeType.Concatenation)
                    {
                        // Lexes should only be of type Nont, T and Concat. Error
                        throw new Exception("Lexeme was not of type Nonterminal, Terminal or Concatenation");
                    }
                }

                current.appendChild(concatenation);
            }
        }
 public void visit(TerminalD terminalD)
 {
 }
コード例 #7
0
        public GrammarNodeD Replace(GrammarNodeD itemToReplace, VADG.Global.SymbolType symbolType, string name)
        {
            OperationD parent = itemToReplace.Parent as OperationD;
            if (parent == null)
                throw new Exception("The item to replace does not have an operation D as a parent, fail.");

            // the rule we are editing
            NonterminalHeadD rule = itemToReplace.getMyRule();
            if (rule == null)
                throw new Exception("The item to replace could not find a nonterminalhead D associated with it.");

            // remove old item
            int index = parent.Children.IndexOf(itemToReplace);
            parent.Children.Remove(itemToReplace);
            itemToReplace.Dispose();

            // create new item to add
            GrammarNodeD newItem;
            if (symbolType == VADG.Global.SymbolType.Terminal)
            {
                // create new Terminal
                newItem = new TerminalD(name, parent);
            }
            else
            {
                // If the nont head doesn't exist, create and add to grammar
                NonterminalHeadD nontHead = model.DefinitiveGrammar.getNonterminal(name);

                if (nontHead == null)
                    nontHead = CreateNewNonterminal(name);

                newItem = nontHead.CreateNonterminalTailD(parent);
            }

            // insert new item into parent
            parent.insertChild(index, newItem);
            return newItem;
        }
コード例 #8
0
 private void Init(TerminalD refIn, int levelIn)
 {
     reference = refIn;
     level = levelIn;
 }
コード例 #9
0
 public TerminalV(TerminalD refIn, int levelIn)
 {
     Init(refIn, levelIn);
 }
        public void visit(TerminalD terminalD)
        {
            String value = terminalD.Name;

            representation += terminalEncapsulation + value + terminalEncapsulation;
        }
 public void visit(TerminalD terminalD)
 {
     terminalD.IsSelected = false;
 }