Exemplo n.º 1
0
 private static RuleExpression AddWithAnd(BaseLexerRule lhs, BaseExpression rhs)
 {
     return(AddWithAnd(new SymbolExpression(new LexerRuleModel(lhs)), rhs));
 }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
 private static RuleExpression AddWithOr(BaseExpression lhs, BaseLexerRule rhs)
 {
     return(AddWithOr(lhs, new SymbolExpression(new LexerRuleModel(rhs))));
 }