コード例 #1
0
        private bool TryRecognizeSimpleLiteralExpression(
            QualifiedName fullyQualifiedName,
            IEbnfLexerRuleExpression ebnfLexerRule,
            out LexerRule lexerRule)
        {
            lexerRule = null;

            if (ebnfLexerRule is EbnfLexerRuleExpressionSimple)
            {
                var term = ebnfLexerRule.Term;
                if (term is EbnfLexerRuleTermConcatenation)
                {
                    return(false);
                }

                var factor = term.Factor;
                if (factor is EbnfLexerRuleFactorLiteral literal)
                {
                    lexerRule = new StringLiteralLexerRule(literal.Value, new TokenName(fullyQualifiedName.FullName));

                    return(true);
                }
            }

            return(false);
        }
コード例 #2
0
        private void r_skip(ICollection <LexerRule> rules, string name, RExpr ex)
        {
            var rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                     "", true, ex);

            rules.Add(rule);
            TokenVocab [name] = _tokenVocabularyCounter++;
        }
コード例 #3
0
        private void s(ICollection <LexerRule> rules, string name, string lexeme)
        {
            LexerRule rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                           "", false, new Str(lexeme));

            rules.Add(rule);
            TokenVocab [name] = _tokenVocabularyCounter++;
        }
コード例 #4
0
ファイル: EngageMetaLexer.cs プロジェクト: samiz/engage-fork
        private void r_skip(List <LexerRule> rules, string name, RExpr ex)
        {
            LexerRule rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                           "", true, ex);

            rules.Add(rule);
            tokenVocab [name] = tokVocabCount++;
        }
コード例 #5
0
ファイル: EngageMetaLexer.cs プロジェクト: samiz/engage-fork
        private void s(List <LexerRule> rules, string name, String lexeme)
        {
            LexerRule rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                           "", false, new Str(lexeme));

            rules.Add(rule);
            tokenVocab [name] = tokVocabCount++;
        }
コード例 #6
0
        private void kw(ICollection <LexerRule> rules, string lexeme)
        {
            string name = lexeme.Replace("*", "_star_").Replace("#", "_hash_");
            var    rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                        "", false, new Str(lexeme));

            rules.Add(rule);
            TokenVocab [name] = _tokenVocabularyCounter++;
        }
コード例 #7
0
ファイル: EngageMetaLexer.cs プロジェクト: samiz/engage-fork
        private void kw(List <LexerRule> rules, String lexeme)
        {
            string    name = lexeme.Replace("*", "_star_").Replace("#", "_hash_");
            LexerRule rule = new LexerRule(name, new List <string> (), new List <string> (), new List <string> (),
                                           "", false, new Str(lexeme));

            rules.Add(rule);
            tokenVocab [name] = tokVocabCount++;
        }
コード例 #8
0
        static EbnfGrammar()
        {
            LexerRule
                settingIdentifier = CreateSettingIdentifierLexerRule(),
                identifier        = CreateIdentifierLexerRule(),
                whitespace        = CreateWhitespaceLexerRule(),
                multiLineComment  = CreateMultiLineCommentLexerRule();

            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 regexProductionReference = new GrammarReferenceExpression(new 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 SimpleSingleQuoteStringLexerRule()
                           | new SimpleDoubleQuoteStringLexerRule();

            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[] { whitespace, multiLineComment });

            ebnfGrammar = grammarExpression.ToGrammar();
        }
コード例 #9
0
 public LexerRuleModel(LexerRule lexerRule)
     : base(lexerRule)
 {
 }
コード例 #10
0
 int ComputeHashCode()
 {
     return(HashCode.Compute(
                LexerRule.GetHashCode(),
                ((int)NodeType).GetHashCode()));
 }
コード例 #11
0
 static ParseRunnerTests()
 {
     whitespaceRule       = CreateWhitespaceRule();
     wordRule             = CreateWordRule();
     repeatingWordGrammar = CreateRepeatingWordGrammar();
 }
コード例 #12
0
 protected Lexeme(LexerRule lexer, int position)
 {
     TokenName = lexer.TokenName;
     Position  = position;
 }