コード例 #1
0
ファイル: Parser.cs プロジェクト: TheByte/sones
        private List<Object> FilterTypeFromAction(ActionRecordTable actionRecordTable, Type type, CompilerContext MyCompilerContext)
        {
            List<Object> _currentActionObjects = new List<Object>();

            //Get the right Terminals
            TerminalList _TerminalList = new TerminalList();
            foreach (Terminal _aTerminal in MyCompilerContext.Compiler.Grammar.Terminals)
            {
            if(_aTerminal.GetType().Equals(type))
            {
                _TerminalList.Add(_aTerminal);
            }
            }

            List<string> _currentActionNames = new List<string>();
            foreach (KeyValuePair<string, ActionRecord> _aAction in actionRecordTable)
            {
            if (_aAction.Key.EndsWith("\b") && !_aAction.Key.StartsWith("EOF"))
            {
                _currentActionNames.Add(_aAction.Key);
            }//Nonterminal?
            }

            foreach (Terminal _aTerminal in _TerminalList)
            {
            if (_currentActionNames.Contains(_aTerminal.Key))
            {
                //Todo: override Contains
                Boolean TerminalAlreadyInList = false;
                foreach (Terminal _aSecondTerminal in _currentActionObjects)
                {
                    if (_aSecondTerminal.Key.Equals(_aTerminal.Key))
                    {
                        TerminalAlreadyInList = true;
                        break;
                    }
                }

                if (!TerminalAlreadyInList)
                {
                    _currentActionObjects.Add(_aTerminal);
                }
            }
            }

            return _currentActionObjects;
        }
コード例 #2
0
ファイル: Parser.cs プロジェクト: TheByte/sones
        private bool ShouldBeReduced(ActionRecordTable actionRecordTable)
        {
            foreach (KeyValuePair<string, ActionRecord> aAction in actionRecordTable)
            {
            if (aAction.Value.ActionType.Equals(ParserActionType.Reduce))
            {
                if (aAction.Value.Key.StartsWith("EOF"))
                {
                    return false;
                }

                return true;
            }
            }

            return false;
        }