summaryrefslogtreecommitdiff
path: root/prolog/lexer.py
diff options
context:
space:
mode:
authorTimotej Lazar <timotej.lazar@araneo.org>2015-01-15 12:10:22 +0100
committerAleš Smodiš <aless@guru.si>2015-08-11 14:26:01 +0200
commit819ab10281c9bd6c000364c3a243959edd18abf7 (patch)
tree5ca3452418b49781563221bb56cf70e1d0fb1bb8 /prolog/lexer.py
parentd86793039957aa408a98806aecfb5964bda5fb87 (diff)
Move pymonkey stuff to monkey/
Importing pymonkey into webmonkey, let's see how this works.
Diffstat (limited to 'prolog/lexer.py')
-rw-r--r--prolog/lexer.py90
1 files changed, 0 insertions, 90 deletions
diff --git a/prolog/lexer.py b/prolog/lexer.py
deleted file mode 100644
index 971e8a6..0000000
--- a/prolog/lexer.py
+++ /dev/null
@@ -1,90 +0,0 @@
-#!/usr/bin/python3
-
-import ply.lex as lex
-
-# LEXER
-
-#states = (
-# ('comment', 'exclusive'),
-#)
-
-# tokens; treat operators as names if followed by (
-operators = {
- r':-': 'FROM',
- r'->': 'IMPLIES',
- r'\+': 'NOT',
- r'not': 'NOT',
- r'=': 'EQU',
- r'\=': 'NEQU',
- r'==': 'EQ',
- r'\==': 'NEQ',
- r'=..': 'UNIV',
- r'is': 'IS',
- r'=:=': 'EQA',
- r'=\=': 'NEQA',
- r'<': 'LT',
- r'=<': 'LE',
- r'>': 'GT',
- r'>=': 'GE',
- r'@<': 'LTL',
- r'@=<': 'LEL',
- r'@>': 'GTL',
- r'@>=': 'GEL',
- r'+': 'PLUS',
- r'-': 'MINUS',
- r'*': 'STAR',
- r'/': 'DIV',
- r'//': 'IDIV',
- r'mod': 'MOD',
- r'**': 'POW',
- r'.': 'PERIOD',
- r',': 'COMMA',
- r';': 'SEMI'
-}
-tokens = list(operators.values()) + [
- 'UINTEGER', 'UREAL',
- 'NAME', 'VARIABLE', 'STRING',
- 'LBRACKET', 'RBRACKET', 'LPAREN', 'RPAREN', 'PIPE', 'LBRACE', 'RBRACE',
- 'INVALID'
-]
-
-# punctuation
-t_LBRACKET = r'\['
-t_RBRACKET = r'\]'
-t_LPAREN = r'\('
-t_RPAREN = r'\)'
-t_PIPE = r'\|'
-t_LBRACE = r'{'
-t_RBRACE = r'}'
-
-t_UINTEGER = r'[0-9]+'
-t_UREAL = r'[0-9]+\.[0-9]+([eE][-+]?[0-9]+)?|inf|nan'
-t_VARIABLE = r'(_|[A-Z])[a-zA-Z0-9_]*'
-t_STRING = r'"(""|\\.|[^\"])*"'
-
-# no support for nested comments yet
-def t_comment(t):
- r'(/\*(.|\n)*?\*/)|(%.*)'
- pass
-
-def t_NAME(t):
- r"'(''|\\.|[^\\'])*'|[a-z][a-zA-Z0-9_]*|[-+*/\\^<>=~:.?@#$&]+|!|;|,"
- if t.lexer.lexpos >= len(t.lexer.lexdata) or t.lexer.lexdata[t.lexer.lexpos] != '(':
- t.type = operators.get(t.value, 'NAME')
- return t
-
-t_ignore = ' \t'
-
-def t_newline(t):
- r'\n+'
- t.lexer.lineno += len(t.value)
-
-def t_error(t):
- # TODO send this to stderr
- #print("Illegal character '" + t.value[0] + "'")
- t.type = 'INVALID'
- t.value = t.value[0]
- t.lexer.skip(1)
- return t
-
-lexer = lex.lex()