smm.py
author Eugen Sawin <sawine@me73.com>
Mon, 16 May 2011 17:10:56 +0200
changeset 0 59ddda9665be
child 1 a7ca3e23ff41
permissions -rw-r--r--
Initial parser.
     1 """
     2 Name: 
     3 
     4 Author: Eugen Sawin <sawine@informatik.uni-freiburg.de>
     5 """
     6 from os import path
     7 import os
     8 import re
     9 import token
    10 
    11 NOT = "~"
    12 AND = "&"
    13 OR = "|"
    14 IMP = "->"
    15 EQ = "<->"
    16 BOX = "[]"
    17 DIAMOND = "<>"
    18 P = "p"
    19 
    20 TOKENS = {re.compile("~"): NOT,
    21           re.compile("&"): AND,
    22           re.compile("\|"): OR,
    23           re.compile("->"): IMP,
    24           re.compile("<->"): EQ,
    25           re.compile("\[\]"): BOX,
    26           re.compile("<>"): DIAMOND,
    27           re.compile("[a-z]+"): P}
    28          
    29 class Scanner(object):
    30     def __init__(self, tokens, source=None):
    31         self.tokens = tokens
    32         self.reset(source)
    33     def next(self):         
    34         while self.i < len(self.source):           
    35             for p, token in self.tokens.iteritems():
    36                 m = p.match(self.source[self.i:])               
    37                 if m:                  
    38                     self.i += m.end(0)
    39                     value = m.group(0)
    40                     return (token, value)
    41             self.i += 1
    42     def reset(self, source):
    43         self.i = 0
    44         self.source = source
    45 
    46 class Parser(object):
    47     def __init__(self, scanner):
    48         self.scanner = scanner
    49     def parse(self, source):
    50         self.scanner.reset(source)
    51         token = self.scanner.next()
    52         while token:
    53             print token
    54             token = self.scanner.next()
    55         
    56 
    57 def main():
    58     args = parse_arguments()
    59     scanner = Scanner(TOKENS)
    60     parser = Parser(scanner)
    61     parser.parse(args.formula)
    62 
    63 from argparse import ArgumentParser
    64 
    65 def parse_arguments():
    66     parser = ArgumentParser(description="Parses Simple Modal Logic syntax.")
    67     parser.add_argument("formula", help="your formula") 
    68     return parser.parse_args()
    69 
    70 if __name__ == "__main__":
    71     main()