summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsci2jslex.py52
-rwxr-xr-xsci2jsyacc.py40
2 files changed, 43 insertions, 49 deletions
diff --git a/sci2jslex.py b/sci2jslex.py
index 249775bd..84619f90 100755
--- a/sci2jslex.py
+++ b/sci2jslex.py
@@ -59,7 +59,12 @@ PREDEFINED_VARIABLES = {
't': 'PREVAR_BOOLEAN',
}
-FUNCTION_NAMES = {
+BOOLEAN_TYPE = 'boolean'
+BOOLEAN_FUNCTION_NAMES = {
+}
+
+DOUBLE_TYPE = 'double'
+DOUBLE_FUNCTION_NAMES = {
'_',
'ANDLOG_f',
'AutoScale',
@@ -227,27 +232,35 @@ FUNCTION_NAMES = {
'zeros',
}
-BOOLEAN_FUNCTION_NAMES = {
-}
-
-DOUBLE_FUNCTION_NAMES = {
-}
-
+MATRIX_TYPE = 'matrix'
MATRIX_FUNCTION_NAMES = {
}
+NULL_TYPE = 'null'
NULL_FUNCTION_NAMES = {
}
+OBJECT_TYPE = 'object'
OBJECT_FUNCTION_NAMES = {
}
+STRING_TYPE = 'string'
STRING_FUNCTION_NAMES = {
}
+VECTOR_TYPE = 'vector'
VECTOR_FUNCTION_NAMES = {
}
+FUNCTION_NAMES = { }
+FUNCTION_NAMES.update(dict.fromkeys(BOOLEAN_FUNCTION_NAMES, BOOLEAN_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(DOUBLE_FUNCTION_NAMES, DOUBLE_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(MATRIX_FUNCTION_NAMES, MATRIX_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(NULL_FUNCTION_NAMES, NULL_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(OBJECT_FUNCTION_NAMES, OBJECT_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(STRING_FUNCTION_NAMES, STRING_TYPE))
+FUNCTION_NAMES.update(dict.fromkeys(VECTOR_FUNCTION_NAMES, VECTOR_TYPE))
+
OBJECTS = {
# 'PREVAR_scicos_context': 'PREVAR_SCICOS_CONTEXT',
# 'arg1': 'ARG1',
@@ -267,7 +280,6 @@ JOBTYPES = {
tokens = [
'ADDITION',
'ASSIGNMENT',
- 'BOOLEAN_FUNCTIONNAME',
'CLOSEBRACKET',
'CLOSEOPENBRACKET',
'CLOSESQBRACKET',
@@ -275,28 +287,22 @@ tokens = [
'COMMA',
'COMPARISON',
'DOT',
- 'DOUBLE_FUNCTIONNAME',
'DQSTRING',
'EOL',
'FUNCTIONNAME',
'LASTINDEX',
'LOGICAL',
- 'MATRIX_FUNCTIONNAME',
'MULTIPLICATION',
'NOT',
- 'NULL_FUNCTIONNAME',
'NUMBER',
- 'OBJECT_FUNCTIONNAME',
'OPENBRACKET',
'OPENSQBRACKET',
'PREVAR',
'QSTRING',
'SEMICOLON',
'SPACE',
- 'STRING_FUNCTIONNAME',
'TRANSPOSE',
'VAR',
- 'VECTOR_FUNCTIONNAME',
] + list(SYNTAX_TOKENS.values()) + list(set(PREDEFINED_VARIABLES.values())) + list(OBJECTS.values()) + list(JOBTYPES.values())
states = (
@@ -372,22 +378,10 @@ def t_VAR(t):
if vartype is None:
vartype = OBJECTS.get(t.value)
if vartype is None:
- if t.value in BOOLEAN_FUNCTION_NAMES:
- vartype = 'BOOLEAN_FUNCTIONNAME'
- elif t.value in DOUBLE_FUNCTION_NAMES:
- vartype = 'DOUBLE_FUNCTIONNAME'
- elif t.value in MATRIX_FUNCTION_NAMES:
- vartype = 'MATRIX_FUNCTIONNAME'
- elif t.value in NULL_FUNCTION_NAMES:
- vartype = 'NULL_FUNCTIONNAME'
- elif t.value in OBJECT_FUNCTION_NAMES:
- vartype = 'OBJECT_FUNCTIONNAME'
- elif t.value in STRING_FUNCTION_NAMES:
- vartype = 'STRING_FUNCTIONNAME'
- elif t.value in VECTOR_FUNCTION_NAMES:
- vartype = 'VECTOR_FUNCTIONNAME'
- elif t.value in FUNCTION_NAMES:
+ if t.value in FUNCTION_NAMES:
vartype = 'FUNCTIONNAME'
+ functiontype = FUNCTION_NAMES[t.value]
+ t.value = (t.value, functiontype)
else:
vartype = 'VAR'
t.lexer.afterarray = vartype == 'VAR'
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
index ce76535f..3606b784 100755
--- a/sci2jsyacc.py
+++ b/sci2jsyacc.py
@@ -15,7 +15,7 @@ import sys
import pickle
import ply.yacc as yacc
-from sci2jslex import tokens, JOBTYPES
+from sci2jslex import tokens, JOBTYPES, BOOLEAN_TYPE, DOUBLE_TYPE, MATRIX_TYPE, NULL_TYPE, OBJECT_TYPE, STRING_TYPE, VECTOR_TYPE
precedence = (
('left', 'COLON'),
@@ -29,14 +29,6 @@ precedence = (
('left', 'DOT'),
)
-BOOLEAN_TYPE = 'boolean'
-DOUBLE_TYPE = 'double'
-MATRIX_TYPE = 'matrix'
-NULL_TYPE = 'null'
-OBJECT_TYPE = 'object'
-STRING_TYPE = 'string'
-VECTOR_TYPE = 'vector'
-
PARSE_MAP = {
BOOLEAN_TYPE: 'parseBoolean',
DOUBLE_TYPE: 'parseFloat',
@@ -114,16 +106,24 @@ def p_functionblock_functionstatement_statementblock_endfunction(p):
'functionblock : functionstatement statementblock ENDFUNCTION EOL'
p[0] = ''
-def p_jobfunctionstatement_function(p):
- '''jobfunctionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL
- | FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'''
+def p_jobfunctionstatement_function_var(p):
+ 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'
for var in (p[6], p[8], p[10]):
FUNCTION_VARS.add(var)
p[0] = '%s' % (p[4])
-def p_functionstatement_function(p):
- '''functionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET list CLOSEBRACKET EOL
- | FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET list CLOSEBRACKET EOL'''
+def p_jobfunctionstatement_function_functionname(p):
+ 'jobfunctionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET JOB COMMA VAR COMMA VAR CLOSEBRACKET EOL'
+ for var in (p[6], p[8], p[10]):
+ FUNCTION_VARS.add(var)
+ p[0] = '%s' % (p[4][0])
+
+def p_functionstatement_function_var(p):
+ 'functionstatement : FUNCTION lterm ASSIGNMENT VAR OPENBRACKET list CLOSEBRACKET EOL'
+ p[0] = ''
+
+def p_functionstatement_function_functionname(p):
+ 'functionstatement : FUNCTION lterm ASSIGNMENT FUNCTIONNAME OPENBRACKET list CLOSEBRACKET EOL'
p[0] = ''
# end define functionblock
@@ -559,7 +559,7 @@ def p_getvaluearg2arraylistitem_string_string(p):
def p_getvaluearg2arraylistitem_functionname_parameters(p):
'getvaluearg2arraylistitem : FUNCTIONNAME OPENBRACKET list CLOSEBRACKET'
- p[0] = '%s(%s)' % (p[1], p[3][0])
+ p[0] = '%s(%s)' % (p[1][0], p[3][0])
LABELS.append(p[0])
def p_getvaluearg3_list(p):
@@ -745,12 +745,12 @@ def p_expression_term(p):
# A(2,3)
def p_function_function_parameters(p):
'function : FUNCTIONNAME OPENBRACKET list CLOSEBRACKET'
- p[0] = '%*s%s(%s)' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[1], p[3][0])
+ p[0] = '%*s%s(%s)' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[1][0], p[3][0])
# A()
def p_function_function(p):
'function : FUNCTIONNAME OPENBRACKET CLOSEBRACKET'
- p[0] = '%*s%s()' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[1])
+ p[0] = '%*s%s()' % (INDENT_LEVEL * INDENT_SIZE, ' ', p[1][0])
def p_resumestatementblocks_resume(p):
'resumestatementblocks : lterm ASSIGNMENT RESUME OPENBRACKET expression CLOSEBRACKET EOL'
@@ -937,7 +937,7 @@ def p_term_string_parameter(p):
# A(2,3)
def p_term_function_parameters(p):
'term : FUNCTIONNAME OPENBRACKET list CLOSEBRACKET'
- p[0] = ('%s(%s)' % (p[1], p[3][0]), DOUBLE_TYPE)
+ p[0] = ('%s(%s)' % (p[1][0], p[3][0]), p[1][1])
# list(2,3)
def p_term_list_parameters(p):
@@ -952,7 +952,7 @@ def p_term_gettext_parameter(p):
# A()
def p_term_function(p):
'term : FUNCTIONNAME OPENBRACKET CLOSEBRACKET'
- p[0] = ('%s()' % (p[1]), DOUBLE_TYPE)
+ p[0] = ('%s()' % (p[1][0]), p[1][1])
# list()
def p_term_list(p):