From 49f510d2d60129526832bfcd9c0f4049962bc80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benedikt=20B=C3=B6hm?= Date: Mon, 18 May 2009 20:53:42 +0200 Subject: move stuff around and create initial source structure --- ebnf.py | 152 ---------------------------------------------------------------- 1 file changed, 152 deletions(-) delete mode 100644 ebnf.py (limited to 'ebnf.py') diff --git a/ebnf.py b/ebnf.py deleted file mode 100644 index 1989118..0000000 --- a/ebnf.py +++ /dev/null @@ -1,152 +0,0 @@ -import string - -class EBNF: - IDENT = 0 - LITERAL = 2 - LPAREN = 3 - LBRAK = 4 - LBRACE = 5 - BAR = 6 - EQL = 7 - RPAREN = 8 - RBRAK = 9 - RBRACE = 10 - PERIOD = 11 - OTHER = 12 - - __input__ = None - __char__ = None - __symbol__ = None - __data__ = None - - def __init__(self, input): - self.__input__ = input - self.__get_char__() - - def __get_char__(self): - self.__char__ = self.__input__.read(1) - if self.__char__ == '': - raise EOFError - return self.__char__ - - def __get_sym__(self): - self.__data__ = None - - while self.__char__ in string.whitespace: - self.__get_char__() - - if self.__char__ in string.letters + "_": - self.__symbol__ = self.IDENT - self.__data__ = self.__char__ - while self.__get_char__() in string.letters + "_": - self.__data__ += self.__char__ - return - - elif self.__char__ == '"': - self.__symbol__ = self.LITERAL - self.__data__ = "" - while self.__get_char__() != '"': - self.__data__ += self.__char__ - - elif self.__char__ == '=': - self.__symbol__ = self.EQL - elif self.__char__ == '(': - self.__symbol__ = self.LPAREN - elif self.__char__ == ')': - self.__symbol__ = self.RPAREN - elif self.__char__ == '[': - self.__symbol__ = self.LBRAK - elif self.__char__ == ']': - self.__symbol__ = self.RBRAK - elif self.__char__ == '{': - self.__symbol__ = self.LBRACE - elif self.__char__ == '}': - self.__symbol__ = self.RBRACE - elif self.__char__ == '|': - self.__symbol__ = self.BAR - elif self.__char__ == '.': - self.__symbol__ = self.PERIOD - else: - self.__symbol__ = self.OTHER - - self.__get_char__() - - def __error__(self, num): - pos = self.__input__.tell() - if pos > self.__lastpos__ + 2: - print "ERROR: pos=%d, err=%d, sym=%d" % (pos, num, self.__symbol__) - self.__lastpos__ = pos - - def __expression__(self): - self.__term__() - while self.__symbol__ == self.BAR: - self.__get_sym__() - self.__term__() - - def __term__(self): - self.__factor__() - while self.__symbol__ < self.BAR: - self.__factor__() - - def __factor__(self): - if self.__symbol__ == self.IDENT: - print "record(TO, '%s', 1)" % (self.__data__,) - self.__get_sym__() - elif self.__symbol__ == self.LITERAL: - print "record(T1, '%s', 0)" % (self.__data__,) - self.__get_sym__() - elif self.__symbol__ == self.LPAREN: - self.__get_sym__() - self.__expression__() - if self.__symbol__ == self.RPAREN: - self.__get_sym__() - else: - self.__error__(2) - elif self.__symbol__ == self.LBRAK: - self.__get_sym__() - self.__expression__() - if self.__symbol__ == self.RBRAK: - self.__get_sym__() - else: - self.__error__(3) - elif self.__symbol__ == self.LBRACE: - self.__get_sym__() - self.__expression__() - if self.__symbol__ == self.RBRACE: - self.__get_sym__() - else: - self.__error__(4) - else: - self.__error__(5) - - def __production__(self): - self.__get_sym__() - - if self.__symbol__ == self.EQL: - self.__get_sym__() - else: - self.__error__(7) - - self.__expression__() - - if self.__symbol__ == self.PERIOD: - self.__get_sym__() - else: - self.__error__(8) - - def __syntax__(self): - while self.__symbol__ == self.IDENT: - self.__production__() - - def compile(self): - try: - self.__lastpos__ = 0 - self.__get_sym__() - self.__syntax__() - except EOFError: - return - -if __name__ == '__main__': - import sys - ebnf = EBNF(sys.stdin) - ebnf.compile() -- cgit v1.2.3