diff --git a/Scanning.py b/Scanning.py index 86b01415d3524e5f2567b96cb38d886b161f771f..a2b1be6afaa96317a443386fee76833e8e57fc2a 100644 --- a/Scanning.py +++ b/Scanning.py @@ -34,13 +34,13 @@ idToTokenDict = dict({ 'instaceof': 'INSTANCEOF', 'int': 'INT', 'native': 'NATIVE', + 'new': 'NEW', 'package': 'PACKAGE', 'protected': 'PROTECTED', 'public': 'PUBLIC', 'return': 'RETURN', 'short': 'SHORT', 'static': 'STATIC', - 'String': 'STRING', 'this': 'THIS', 'void': 'VOID', 'while': 'WHILE', @@ -57,6 +57,38 @@ def idsToTokens(tokens): if t.lex in idToTokenDict: t.name = idToTokenDict.get(t.lex) + +# a set that contains keywords that are in java but not in joos +wrongKeyWordDict = set( + 'assert', + 'break', + 'case', + 'catch', + 'const', + 'continue', + 'default', + 'do', + 'double', + 'enum', + 'finally', + 'float', + 'goto', + 'interface', + 'long', + 'new', + 'private', + 'strictfp', + 'super', + 'switch', + 'synchronized', + 'throw', + 'throws', + 'transient', + 'try', + 'volatile' + ) + + ######################## DFA Stuff ################################### ################# Joos DFA Tokens ################################### @@ -77,7 +109,6 @@ JoosDFATokens = set([ 'GT', # > 'LT', # < 'NOT', # ! - 'TILDE', # ~ 'QUESTION', # ? 'COLON', # : 'ARROW', # -> @@ -143,8 +174,6 @@ def JoosTransition(input, state): return 'LT' if (input == '!'): return 'NOT' - if (input == '~'): - return 'TILDE' if (input == '?'): return 'QUESTION' if (input == ':'): @@ -250,15 +279,28 @@ def JoosTransition(input, state): if (input == '|'): return 'OR' return None - + + # length 2/3 seperators + elif(state == 'COLON'): + if (input == ':'): + return 'DOUBLECO' + return None + elif(state == 'PERIOD'): + if(input == '.'): + return 'PERIOD2' + return None + elif(state == 'PERIOD2'): + if(input == '.'): + return 'ELLIPSIS' + return None else: return None ##################### Other DFA elements ############################## #TODO: add operand and separator characters to alphabet -specialChars = set(list(".;:,@{}()[]<>!?~+-*/&|^%=''\"\\")) +specialChars = set(list(".;:,@{}()[]<>!?+-*/&|^%=''\"\\")) JoosAccept = JoosDFATokens.union({'WHITESPACE', 'COMMENT'}) -JoosStates = JoosAccept.union({'START'}) #TODO: add intermediate states here +JoosStates = JoosAccept.union({'START', 'PERIOD2'}) #TODO: add intermediate states here JoosAlphabet = set(string.ascii_lowercase).union(set(string.ascii_uppercase)).union(set(string.digits)).union(specialChars) ######################### DFA ####################################### @@ -307,6 +349,7 @@ def scan(input): tokens = SMM(input, JoosDFA) if (tokens): # TODO: handle edge cases (e.g. check int range) + # TODO: handle cases where keywords in Java but not in joos appear (a false program) idsToTokens(tokens)