#!/usr/local/bin/python # -*- coding: utf-8 -*- import elementtree.ElementTree as ET import os, sys sys.path.append(os.getcwd().split('slps')[0] + 'slps/shared/python') import BGF singles = (BGF.Empty(), BGF.Epsilon(), BGF.Any()) def ntd(x, d): nt = BGF.Nonterminal() nt.setName(x) w = d() w.setExpr(BGF.Expression(nt)) return BGF.Expression(w) if __name__ == "__main__": g = BGF.Grammar() prod = 400 term = 150 for i in range(0, prod): p = BGF.Production() p.setNT('nt' + str(i)) p.setExpr(BGF.Expression(singles[i % 3])) g.addProd(p) p = BGF.Production() p.setNT('nt' + str(i)) a = ntd('nt' + str((i + 1) % prod), BGF.Plus)
if alt[cx][-1] == '+': sym = BGF.Plus() sym.setExpr(BGF.Nonterminal()) sym.data.setName(alt[cx][:-1]) elif alt[cx][-1] == '*': sym = BGF.Star() sym.setExpr(BGF.Nonterminal()) sym.data.setName(alt[cx][:-1]) elif alt[cx][-1] == '?': sym = BGF.Optional() sym.setExpr(BGF.Nonterminal()) sym.data.setName(alt[cx][:-1]) elif alt[cx] in layouts: print 'Occurrence of layout nonterminal', alt[ cx], 'is disregarded.' sym = BGF.Epsilon() else: sym = BGF.Nonterminal() sym.setName(alt[cx]) cx += 1 continue if alt[cx] == 'lex': cx += 1 continue if alt[cx][0].islower(): typ = sym sym = BGF.Selectable() sym.setExpr(typ) sym.setName(alt[cx]) cx += 1 continue