diff options
author | Sunil Shetye | 2018-06-27 14:53:47 +0530 |
---|---|---|
committer | Sunil Shetye | 2018-06-27 14:53:47 +0530 |
commit | 8dbae18df233192f5036047999aadfab7be72276 (patch) | |
tree | 03b510d8eefe7aef4d10a9bca12b772f66e580fd | |
parent | a340efc94b289c1e1956e214baa76aade1de997d (diff) | |
download | sci2js-8dbae18df233192f5036047999aadfab7be72276.tar.gz sci2js-8dbae18df233192f5036047999aadfab7be72276.tar.bz2 sci2js-8dbae18df233192f5036047999aadfab7be72276.zip |
add tokens for the job types
-rwxr-xr-x | sci2jslex.py | 42 | ||||
-rwxr-xr-x | sci2jsyacc.py | 14 |
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]) |