summaryrefslogtreecommitdiff
path: root/sci2jslex.py
diff options
context:
space:
mode:
Diffstat (limited to 'sci2jslex.py')
-rwxr-xr-xsci2jslex.py89
1 files changed, 31 insertions, 58 deletions
diff --git a/sci2jslex.py b/sci2jslex.py
index eca88059..c4a3c562 100755
--- a/sci2jslex.py
+++ b/sci2jslex.py
@@ -7,6 +7,7 @@ import sys
''' keep track of how many open brackets have been encountered so far '''
brackets = 0
+sqbrackets = 0
''' keep current string in memory '''
qstring = ''
@@ -63,6 +64,7 @@ tokens = [
'COMPARISON',
'DOT',
'DQSTRING',
+ 'SPACE',
'EOL',
'LASTINDEX',
'LOGICAL',
@@ -84,28 +86,26 @@ states = (
('dqstring', 'exclusive'),
)
-t_ignore = ' \t'
-t_qstring_ignore = ''
-t_dqstring_ignore = ''
-
-def t_COMMA_COMMENT(t):
- r',[ \t]*//.*'
+def t_COMMA(t):
+ r'[ \t]*,([ \t]*(//.*)?\n?)*'
global afterarray, brackets
+ afterarray = False
if brackets != 0:
- afterarray = False
- t.type = 'COMMA'
return t
+ t.type = 'EOL'
+ return t
-def t_SEMICOLON_COMMENT(t):
- r';[ \t]*//.*'
+def t_SEMICOLON(t):
+ r'[ \t]*;([ \t]*(//.*)?\n?)*'
global afterarray, brackets
+ afterarray = False
if brackets != 0:
- afterarray = False
- t.type = 'SEMICOLON'
return t
+ t.type = 'EOL'
+ return t
def t_COMMENT(t):
- r'\.\.+[ \t]*(//.*)?(\n|$)|//.*'
+ r'\.\.+[ \t]*(//.*)?(\n[ \t]*|$)|//.*'
pass
def t_NUMBER(t):
@@ -141,11 +141,14 @@ def t_LASTINDEX(t):
return t
def t_EOL(t):
- r'\n'
+ r'[ \t]*\n([ \t]*(//.*)?\n?)*'
global afterarray, brackets
if brackets == 0:
afterarray = False
return t
+ if sqbrackets != 0:
+ t.type = 'SPACE'
+ return t
def t_DOT(t):
r'\.'
@@ -165,72 +168,36 @@ def t_ADDITION(t):
afterarray = False
return t
-def t_COMMA_EOL(t):
- r',\n'
- global afterarray, brackets
- if brackets == 0:
- afterarray = False
- t.type = 'EOL'
- t.value = '\n'
- return t
-
- afterarray = False
- t.type = 'COMMA'
- return t
-
-def t_COMMA(t):
- r','
- global afterarray
- afterarray = False
- return t
-
def t_OPENSQBRACKET(t):
- r'\['
- global afterarray, brackets
+ r'\[([ \t]*(//.*)?\n?)*'
+ global afterarray, brackets, sqbrackets
afterarray = False
brackets += 1
+ sqbrackets += 1
return t
def t_CLOSESQBRACKET(t):
- r'\]'
- global afterarray, brackets
+ r'[ \t]*\]'
+ global afterarray, brackets, sqbrackets
afterarray = True
brackets -= 1
+ sqbrackets -= 1
return t
def t_OPENBRACKET(t):
- r'\('
+ r'\(([ \t]*(//.*)?\n?)*'
global afterarray, brackets
afterarray = False
brackets += 1
return t
def t_CLOSEBRACKET(t):
- r'\)'
+ r'[ \t]*\)'
global afterarray, brackets
afterarray = True
brackets -= 1
return t
-def t_SEMICOLON_EOL(t):
- r';\n'
- global afterarray, brackets
- if brackets == 0:
- afterarray = False
- t.type = 'EOL'
- t.value = '\n'
- return t
-
- afterarray = False
- t.type = 'SEMICOLON'
- return t
-
-def t_SEMICOLON(t):
- r';'
- global afterarray
- afterarray = False
- return t
-
def t_NOT(t):
r'~'
global afterarray
@@ -255,6 +222,12 @@ def t_COLON(t):
afterarray = False
return t
+def t_SPACE(t):
+ r'[ \t]+'
+ global sqbrackets
+ if sqbrackets != 0:
+ return t
+
def t_error(t):
print("Illegal character '", t.value[0], "'", sep='')
t.lexer.skip(1)