protected override ConfigCommand Reduce_CommandExpression_2(ConfigToken nullSeg) { return(new ConfigCommandNull() { Value = nullSeg }); }
protected override ConfigEntryPoint Reduce_EntryPoint_1(ConfigToken nonTerminalSeg) { return(new ConfigEntryPoint() { NonTerminal = nonTerminalSeg, }); }
protected override ConfigCommand Reduce_CommandExpression_1(ConfigToken argumentValueSeg) { return(new ConfigCommandArg() { Value = argumentValueSeg }); }
protected override ConfigSegment Reduce_Segment_1(ConfigToken rawSegmentSeg) { return(new ConfigSegment() { Token = rawSegmentSeg, }); }
protected override ConfigSegment Reduce_Segment_2(ConfigToken rawSegmentSeg, ConfigToken segmentModifierSeg) { return(new ConfigSegment() { Token = rawSegmentSeg, Modifier = segmentModifierSeg, }); }
Segment GetSegment(ConfigToken token) { if (token.Type == ConfigTokenType.NonTerminal) { return(GetNonTerminal(token.Text)); } else { return(GetTerminal(token.Text)); } }
void ReportUnexpectedToken(ConfigToken token) { if (token.Type == ConfigTokenType.Error) { ReporterHelper.AddError(_reporter, token, token.Text); } else if (token.Type == ConfigTokenType.EOF) { ReporterHelper.AddError(_reporter, token, "Unexpected end of file."); } else { ReporterHelper.AddError(_reporter, token, "Unexpected Token."); } }
Segment GetSegment(ConfigToken token, ConfigToken modifier) { if (modifier == null) { return(GetSegment(token)); } else { switch (modifier.Type) { case ConfigTokenType.QuestionMark: return(GetOptionalProduction(token)); case ConfigTokenType.Bang: return(GetSegment(token)); default: throw new InvalidOperationException(); } } }
protected override ConfigProduction Reduce_Production_1(ConfigToken nonTerminalSeg, ConfigToken productionTypeDefSeg, ConfigProduction ruleListSeg) { ruleListSeg.Target = nonTerminalSeg; ruleListSeg.TypeRef = productionTypeDefSeg; return(ruleListSeg); }
protected override ConfigProduction Reduce_Production_2(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(null); }
protected override ConfigRule Reduce_SegmentList_2(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(new ConfigRule()); }
protected override ConfigEntryPoint Reduce_EntryPoint_2(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(new ConfigEntryPoint()); }
protected override ConfigUsing Reduce_Using_1(ConfigToken labelSeg, ConfigToken stringSeg) { return(new ConfigUsing(labelSeg, stringSeg)); }
protected override ConfigUsing Reduce_Using_2(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(new ConfigUsing(null, null)); }
protected override Config Reduce_ConfigSettings_5(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(new Config()); }
protected override ConfigSetting Reduce_Setting_1(ConfigToken labelSeg, ConfigToken settingValueSeg) { return(new ConfigSetting(labelSeg, settingValueSeg)); }
protected override ConfigSetting Reduce_Setting_2(ConfigToken labelSeg, ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(null); }
protected override ConfigCommand Reduce_Command_2(ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(null); }
protected override ConfigTokenType GetTokenType(ConfigToken terminal) => terminal.Type;
Segment GetOptionalProduction(ConfigToken token) { var subSegment = GetSegment(token); if (!_optionalProductions.TryGetValue(subSegment, out var masterSegment)) { ConfigUsing cUsing; masterSegment = subSegment.GetOptional(); if (subSegment.IsTerminal) { if ((cUsing = _config.TerminalType) != null) { _ntTypes.Add(masterSegment, cUsing); } } else if (_ntTypes.TryGetValue(subSegment, out cUsing)) { _ntTypes.Add(masterSegment, cUsing); } var rule1 = new ConfigRule() { Segments = { new ConfigSegment() { Segment = subSegment, Token = token, }, }, Production = new Production(masterSegment, ImmutableArray.Create(subSegment)), Command = new ConfigCommandArg() { Value = new ConfigToken(ConfigTokenType.ArgumentValue, token.FromPos, token.ToPos, "0"), Segment = subSegment, Using = cUsing, }, FromPos = token.FromPos, ToPos = token.ToPos, }; var rule2 = new ConfigRule() { Segments = { }, Production = new Production(masterSegment, ImmutableArray <Segment> .Empty), Command = new ConfigCommandNull() { Value = new ConfigToken(ConfigTokenType.Null, token.FromPos, token.ToPos, "null"), Segment = subSegment, Using = cUsing, }, FromPos = token.FromPos, ToPos = token.ToPos, }; var cProduction = new ConfigProduction() { Segment = masterSegment, Target = new ConfigToken(ConfigTokenType.NonTerminal, token.FromPos, token.ToPos, masterSegment.Name), Using = cUsing, Rules = { rule1, rule2, }, }; _config.Productions.Add(cProduction); _config.RuleLookup.Add(rule1.Production, rule1); _config.RuleLookup.Add(rule2.Production, rule2); _optionalProductions.Add(subSegment, masterSegment); } return(masterSegment); }
protected override Config Reduce_ConfigSettings_4(Config configSettingsSeg, ConfigToken errorSeg) { ReportUnexpectedToken(errorSeg); return(configSettingsSeg); }