//========================================================================================= public void AddTokenDeclaration(string name, string declaration) { var oScanner = new SA.CodeView.Parsing.TokenDefParsing.Scanner(declaration, string.Empty); var oParser = new SA.CodeView.Parsing.TokenDefParsing.Parser(oScanner); int iStartStatesCount = this.States.Count; oParser.Spec = this; oParser.Parse(); ///Для всех состояний, у которых не определено ни одного перехода, определяем его на EndState. for (int iState = iStartStatesCount; iState < this.States.Count; iState++) { var oState = this.States[iState]; if (oState.ElseState == null) { if (oState.Entries.Count == 0) { oState.SetDefaultLink(this.EndState); } //else // oState.SetDefaultLink(this.FailState); } oState.ResultTokenName = name; } if (oParser.Errors.Count != 0) { throw new ArgumentException(oParser.Errors[0].Msg); } }
//========================================================================================= public void AddTokenDeclaration(string name, string declaration) { var oScanner = new SA.CodeView.Parsing.TokenDefParsing.Scanner(declaration, string.Empty); var oParser = new SA.CodeView.Parsing.TokenDefParsing.Parser(oScanner); int iStartStatesCount = this.States.Count; oParser.Spec = this; oParser.Parse(); ///Для всех состояний, у которых не определено ни одного перехода, определяем его на EndState. for (int iState = iStartStatesCount; iState < this.States.Count; iState++) { var oState = this.States[iState]; if (oState.ElseState == null) { if (oState.Entries.Count == 0) oState.SetDefaultLink(this.EndState); //else // oState.SetDefaultLink(this.FailState); } oState.ResultTokenName = name; } if (oParser.Errors.Count != 0) throw new ArgumentException(oParser.Errors[0].Msg); }