private static RuleExpression AddWithAnd(BaseLexerRule lhs, BaseExpression rhs) { return(AddWithAnd(new SymbolExpression(new LexerRuleModel(lhs)), rhs)); }
static PdlGrammar() { BaseLexerRule settingIdentifier = SettingIdentifier(), notDoubleQuote = NotDoubleQuote(), notSingleQuote = NotSingleQuote(), identifier = Identifier(), any = new TerminalLexerRule(new AnyTerminal(), "."), notCloseBracket = new TerminalLexerRule( new NegationTerminal(new CharacterTerminal(']')), "[^\\]]"), escapeCharacter = EscapeCharacter(), whitespace = Whitespace(), multiLineComment = MultiLineComment(); ProductionExpression definition = Definition, block = Block, rule = Rule, setting = Setting, lexerRule = LexerRule, qualifiedIdentifier = QualifiedIdentifier, expression = Expression, term = Term, factor = Factor, literal = Literal, grouping = Grouping, repetition = Repetition, optional = Optional, lexerRuleExpression = LexerRuleExpression, lexerRuleTerm = LexerRuleTerm, lexerRuleFactor = LexerRuleFactor; var regexGrammar = new RegexGrammar(); var regexProductionReference = new ProductionReferenceExpression(regexGrammar); definition.Rule = block | block + definition; block.Rule = rule | setting | lexerRule; rule.Rule = qualifiedIdentifier + '=' + expression + ';'; setting.Rule = (Expr) settingIdentifier + '=' + qualifiedIdentifier + ';'; lexerRule.Rule = qualifiedIdentifier + '~' + lexerRuleExpression + ';'; expression.Rule = term | term + '|' + expression; term.Rule = factor | factor + term; factor.Rule = qualifiedIdentifier | literal | '/' + regexProductionReference + '/' | repetition | optional | grouping; literal.Rule = (Expr) new SingleQuoteStringLexerRule() | new DoubleQuoteStringLexerRule(); repetition.Rule = (Expr) '{' + expression + '}'; optional.Rule = (Expr) '[' + expression + ']'; grouping.Rule = (Expr) '(' + expression + ')'; qualifiedIdentifier.Rule = identifier | (Expr)identifier + '.' + qualifiedIdentifier; lexerRuleExpression.Rule = lexerRuleTerm | lexerRuleTerm + '|' + lexerRuleExpression; lexerRuleTerm.Rule = lexerRuleFactor | lexerRuleFactor + lexerRuleTerm; lexerRuleFactor.Rule = literal | '/' + regexProductionReference + '/'; var grammarExpression = new GrammarExpression( definition, new[] { definition, block, rule, setting, lexerRule, expression, term, factor, literal, repetition, optional, grouping, qualifiedIdentifier, lexerRuleExpression, lexerRuleTerm, lexerRuleFactor }, new[] { new LexerRuleModel(whitespace), new LexerRuleModel(multiLineComment) }); _pdlGrammar = grammarExpression.ToGrammar(); }
private static RuleExpression AddWithOr(BaseExpression lhs, BaseLexerRule rhs) { return(AddWithOr(lhs, new SymbolExpression(new LexerRuleModel(rhs)))); }