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; }
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; }