Exemple #1
0
def grammar_grammar():
    """Builds the grammar for the grammar file
    """
    # star: '*' | '+'
    star          = Alternative( "star", Token('*'), Token('+') )
    star_opt      = KleeneStar  ( "star_opt", 0, 1, rule=star )

    # rule: SYMBOL ':' alternative
    symbol        = Sequence(    "symbol", Token('SYMBOL'), star_opt )
    symboldef     = Token(       "SYMDEF" )
    alternative   = Sequence(    "alternative" )
    rule          = Sequence(    "rule", symboldef, alternative )

    # grammar: rule+
    grammar       = KleeneStar(   "grammar", _min=1, rule=rule )

    # alternative: sequence ( '|' sequence )*
    sequence      = KleeneStar(   "sequence", 1 )
    seq_cont_list = Sequence(    "seq_cont_list", Token('|'), sequence )
    sequence_cont = KleeneStar(   "sequence_cont",0, rule=seq_cont_list )
    
    alternative.args = [ sequence, sequence_cont ]

    # option: '[' alternative ']'
    option        = Sequence(    "option", Token('['), alternative, Token(']') )

    # group: '(' alternative ')'
    group         = Sequence(    "group",  Token('('), alternative, Token(')'), star_opt )

    # sequence: (SYMBOL | STRING | option | group )+
    string = Token('STRING')
    alt           = Alternative( "sequence_alt", symbol, string, option, group ) 
    sequence.args = [ alt ]
    
    return grammar
Exemple #2
0
 def repeat(self, star_opt, myrule):
     if star_opt.nodes:
         rule_name = self.new_name()
         tok = star_opt.nodes[0].nodes[0]
         if tok.value == '+':
             return self.new_item(KleeneStar(rule_name, _min=1,
                                             rule=myrule))
         elif tok.value == '*':
             return self.new_item(KleeneStar(rule_name, _min=0,
                                             rule=myrule))
         else:
             raise SyntaxError("Got symbol star_opt with value='%s'" %
                               tok.value)
     return myrule
Exemple #3
0
 def build_symbol(self, values):
     """symbol: SYMBOL star?"""
     sym = values[0]
     star = values[1]
     if star is True:
         return sym
     _min = 0
     _max = -1
     if star == '*':
         _min = 0
     elif star == '+':
         _min = 1
     sym = KleeneStar(self.get_name(), _min, _max, rule=sym)
     sym.star = star
     debug_rule(sym)
     self.items.append(sym)
     return sym
 def build_symbol( self, values ):
     """symbol: SYMBOL star?"""
     sym = values[0]
     star = values[1]
     if star is True:
         return sym
     _min = 0
     _max = -1
     if star=='*':
         _min = 0
     elif star=='+':
         _min = 1
     sym = KleeneStar( self.get_name(), _min, _max, rule=sym )
     sym.star = star
     debug_rule( sym )
     self.items.append(sym)
     return sym
Exemple #5
0
def grammar_grammar():
    """Builds the grammar for the grammar file
    """
    # star: '*' | '+'
    star = Alternative("star", Token('*'), Token('+'))
    star_opt = KleeneStar("star_opt", 0, 1, rule=star)

    # rule: SYMBOL ':' alternative
    symbol = Sequence("symbol", Token('SYMBOL'), star_opt)
    symboldef = Token("SYMDEF")
    alternative = Sequence("alternative")
    rule = Sequence("rule", symboldef, alternative)

    # grammar: rule+
    grammar = KleeneStar("grammar", _min=1, rule=rule)

    # alternative: sequence ( '|' sequence )*
    sequence = KleeneStar("sequence", 1)
    seq_cont_list = Sequence("seq_cont_list", Token('|'), sequence)
    sequence_cont = KleeneStar("sequence_cont", 0, rule=seq_cont_list)

    alternative.args = [sequence, sequence_cont]

    # option: '[' alternative ']'
    option = Sequence("option", Token('['), alternative, Token(']'))

    # group: '(' alternative ')'
    group = Sequence("group", Token('('), alternative, Token(')'), star_opt)

    # sequence: (SYMBOL | STRING | option | group )+
    string = Token('STRING')
    alt = Alternative("sequence_alt", symbol, string, option, group)
    sequence.args = [alt]

    return grammar
Exemple #6
0
 def visit_option(self, node):
     rule = node.nodes[1].visit(self)
     return self.new_item(KleeneStar(self.new_name(), 0, 1, rule))
Exemple #7
0
 def build_option(self, values):
     """option: '[' alternative ']'"""
     sym = KleeneStar(self.get_name(), 0, 1, rule=values[1])
     debug_rule(sym)
     self.items.append(sym)
     return sym