summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2018-06-27 14:53:47 +0530
committerSunil Shetye2018-06-27 14:53:47 +0530
commit8dbae18df233192f5036047999aadfab7be72276 (patch)
tree03b510d8eefe7aef4d10a9bca12b772f66e580fd
parenta340efc94b289c1e1956e214baa76aade1de997d (diff)
downloadsci2js-8dbae18df233192f5036047999aadfab7be72276.tar.gz
sci2js-8dbae18df233192f5036047999aadfab7be72276.tar.bz2
sci2js-8dbae18df233192f5036047999aadfab7be72276.zip
add tokens for the job types
-rwxr-xr-xsci2jslex.py42
-rwxr-xr-xsci2jsyacc.py14
2 files changed, 52 insertions, 4 deletions
diff --git a/sci2jslex.py b/sci2jslex.py
index cab8188a..a2c332c3 100755
--- a/sci2jslex.py
+++ b/sci2jslex.py
@@ -234,6 +234,15 @@ OBJECTS = {
# 'scicos_context': 'SCICOS_CONTEXT',
}
+JOBTYPES = {
+ '"define"': 'JOB_DEFINE',
+ '"getinputs"': 'JOB_GETINPUTS',
+ '"getorigin"': 'JOB_GETORIGIN',
+ '"getoutputs"': 'JOB_GETOUTPUTS',
+ '"plot"': 'JOB_PLOT',
+ '"set"': 'JOB_SET',
+}
+
tokens = [
'ADDITION',
'ASSIGNMENT',
@@ -260,7 +269,7 @@ tokens = [
'SPACE',
'TRANSPOSE',
'VAR',
-] + list(SYNTAX_TOKENS.values()) + list(set(PREDEFINED_VARIABLES.values())) + list(OBJECTS.values())
+] + list(SYNTAX_TOKENS.values()) + list(set(PREDEFINED_VARIABLES.values())) + list(OBJECTS.values()) + list(JOBTYPES.values())
states = (
('qstring', 'exclusive'),
@@ -270,6 +279,7 @@ states = (
def t_COMMA(t):
r'[ \t]*,([ \t]*(//.*)?\n?)*'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
if BRACKET_STACK[-1] != ' ':
return t
t.type = 'EOL'
@@ -278,6 +288,7 @@ def t_COMMA(t):
def t_SEMICOLON(t):
r'[ \t]*;([ \t]*(//.*)?\n?)*'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
if BRACKET_STACK[-1] != ' ':
return t
t.type = 'EOL'
@@ -286,6 +297,7 @@ def t_SEMICOLON(t):
def t_CLOSESQBRACKET(t):
r'([ \t]*\.\.+[ \t]*\n)?[ \t]*\]'
t.lexer.afterarray = True
+ t.lexer.aftercase = False
if BRACKET_STACK.pop() != '[':
print("Syntax error: Mismatched ]")
return t
@@ -293,11 +305,13 @@ def t_CLOSESQBRACKET(t):
def t_CLOSEOPENBRACKET(t):
r'[ \t]*\)\(([ \t]*(//.*)?\n?)*'
t.lexer.afterarray = True
+ t.lexer.aftercase = False
return t
def t_CLOSEBRACKET(t):
r'([ \t]*\.\.+[ \t]*\n)?[ \t]*\)'
t.lexer.afterarray = True
+ t.lexer.aftercase = False
if BRACKET_STACK.pop() != '(':
print("Syntax error: Mismatched )")
return t
@@ -309,11 +323,13 @@ def t_COMMENT(t):
def t_NUMBER(t):
r'(\d+(\.\d*)?|\.\d+)([dDeE][+-]?\d+)?'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_PREVAR(t):
r'%[a-zA-Z_][a-zA-Z0-9_]*'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
base = t.value[1:]
t.type = PREDEFINED_VARIABLES.get(base, 'PREVAR')
if t.type == 'PREVAR_SUBSTITUTE':
@@ -323,23 +339,27 @@ def t_PREVAR(t):
def t_VAR(t):
r'[a-zA-Z_][a-zA-Z0-9_]*'
- t.lexer.afterarray = True
+ global CASEEXPRESSION
vartype = SYNTAX_TOKENS.get(t.value)
if vartype is None:
vartype = OBJECTS.get(t.value)
if vartype is None:
vartype = 'FUNCTIONNAME' if t.value in FUNCTION_NAMES else 'VAR'
+ t.lexer.afterarray = vartype != 'FUNCTIONNAME'
+ t.lexer.aftercase = vartype == 'CASE'
t.type = vartype
return t
def t_COMPARISON(t):
r'<>|[<>~=]=|[<>]'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_LASTINDEX(t):
r'\$'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_EOL(t):
@@ -347,6 +367,7 @@ def t_EOL(t):
lastbracket = BRACKET_STACK[-1]
if lastbracket == ' ':
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
if lastbracket == '[':
t.type = 'SPACE'
@@ -355,48 +376,57 @@ def t_EOL(t):
def t_DOT(t):
r'\.'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_MULTIPLICATION(t):
r'\*\*|[*/^\\]'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_ADDITION(t):
r'[+\-]'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_OPENSQBRACKET(t):
r'\[([ \t]*(//.*)?\n?)*'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
BRACKET_STACK.append('[')
return t
def t_OPENBRACKET(t):
r'\(([ \t]*(//.*)?\n?)*'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
BRACKET_STACK.append('(')
return t
def t_NOT(t):
r'~'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_LOGICAL(t):
r'[&|]'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_ASSIGNMENT(t):
r'='
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_COLON(t):
r':'
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
def t_SPACE(t):
@@ -412,6 +442,7 @@ def t_TRANSPOSE(t):
r"'"
if t.lexer.afterarray:
t.lexer.afterarray = False
+ t.lexer.aftercase = False
return t
t.lexer.push_state('qstring')
t.lexer.qstring = t.value
@@ -450,6 +481,7 @@ def t_qstring_end(t):
r"'"
t.lexer.pop_state()
t.lexer.qstring += t.value
+ t.lexer.aftercase = False
t.type = 'QSTRING'
t.value = t.lexer.qstring
return t
@@ -458,7 +490,11 @@ def t_dqstring_end(t):
r'"'
t.lexer.pop_state()
t.lexer.dqstring += t.value
- t.type = 'DQSTRING'
+ if t.lexer.aftercase:
+ t.lexer.aftercase = False
+ t.type = JOBTYPES.get(t.lexer.dqstring, 'DQSTRING')
+ else:
+ t.type = 'DQSTRING'
t.value = t.lexer.dqstring
return t
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index d88f2baf..54eeffc0 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -330,7 +330,19 @@ def p_casestatement_case(p):
def p_casejobstatement_case(p):
'''casejobstatement : CASE expression THEN EOL
- | CASE expression EOL'''
+ | CASE expression EOL
+ | CASE JOB_DEFINE THEN EOL
+ | CASE JOB_DEFINE EOL
+ | CASE JOB_GETINPUTS THEN EOL
+ | CASE JOB_GETINPUTS EOL
+ | CASE JOB_GETORIGIN THEN EOL
+ | CASE JOB_GETORIGIN EOL
+ | CASE JOB_GETOUTPUTS THEN EOL
+ | CASE JOB_GETOUTPUTS EOL
+ | CASE JOB_PLOT THEN EOL
+ | CASE JOB_PLOT EOL
+ | CASE JOB_SET THEN EOL
+ | CASE JOB_SET EOL'''
LOCAL_VARS.clear()
LOCAL_VARS.update(FUNCTION_VARS)
p[0] = '%s' % (p[2])