Skip to content

vrthra/cfgenc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 

Repository files navigation

cfgenc

An encoding that translates context free grammars

Essentially, copy over the cfg.py to your lib/python_xx/encodings/ directory. If you want to know where that is, use

>>> import encodings, os
>>> print(os.path.dirname(encodings.__file__))

Once you do that, you will be able to use the encoder to translate files.

E.g.

# coding: cfg

grammar expression_grammar:
    start   = expr
    expr    = (term + '+' + expr
            |  term + '-' + expr)
    term    = (factor + '*' + term
            |  factor + '/' + term
            |  factor)
    factor  = ('+' + factor
            |  '-' + factor
            |  '(' + expr + ')'
            |  integer + '.' + integer
            |  integer)
    integer = (digit + integer
            |  digit)
    digit   = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

Usage:

import g
print(g.expression_grammar)
$ python3 g1.py            
{'start': [('expr',)], 
 'expr': [('term', '+', 'expr'), ('term', '-', 'expr')],
 'term': [('factor', '*', 'term'), ('factor', '/', 'term'), ('factor',)],
 'factor': [('+', 'factor'), ('-', 'factor'), ('(', 'expr', ')'), 
    ('integer', '.', 'integer'), ('integer',)], 
 'integer': [('digit', 'integer'), ('digit',)], 
 'digit': [('0',), ('1',), ('2',), ('3',), ('4',), ('5',), ('6',), ('7',), ('8',), ('9',)]}

Or directly: put it in g.py

# coding: cfg

grammar expression_grammar:
    start   = expr
    expr    = (term + '+' + expr
            |  term + '-' + expr)
    term    = (factor + '*' + term
            |  factor + '/' + term
            |  factor)
    factor  = ('+' + factor
            |  '-' + factor
            |  '(' + expr + ')'
            |  integer + '.' + integer
            |  integer)
    integer = (digit + integer
            |  digit)
    digit   = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    
print(expression_grammar)

Usage:

$ python3 g.py
{'start': [('expr',)], 'expr': [('term', '+', 'expr'), ('term', '-', 'expr')], 'term': [('factor', '*', 'term'), ('factor', '/', 'term'), ('factor',)], 'factor': [('+', 'factor'), ('-', 'factor'), ('(', 'expr', ')'), ('integer', '.', 'integer'), ('integer',)], 'integer': [('digit', 'integer'), ('digit',)], 'digit': [('0',), ('1',), ('2',), ('3',), ('4',), ('5',), ('6',), ('7',), ('8',), ('9',)]}

About

An encoding that translates context free grammars

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages