summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-xsci2jslex.py23
-rwxr-xr-xsci2jsyacc.py66
3 files changed, 81 insertions, 11 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..3a08e100
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+parsetab.py
+parser.out
diff --git a/sci2jslex.py b/sci2jslex.py
index 7150037e..5b0fe4af 100755
--- a/sci2jslex.py
+++ b/sci2jslex.py
@@ -293,17 +293,18 @@ def t_dqstring_error(t):
lexer = lex.lex()
-if len(sys.argv) <= 1:
- print("Usage: %s filename" % sys.argv[0])
- sys.exit(1)
+if __name__ == '__main__':
+ if len(sys.argv) <= 1:
+ print("Usage: %s filename" % sys.argv[0])
+ sys.exit(1)
-filename = sys.argv[1]
-data = ''
-with open(filename, 'r') as infile:
- for line in infile:
- data += line
+ filename = sys.argv[1]
+ data = ''
+ with open(filename, 'r') as infile:
+ for line in infile:
+ data += line
- lexer.input(data)
+ lexer.input(data)
- for tok in lexer:
- print(tok)
+ for tok in lexer:
+ print(tok)
diff --git a/sci2jsyacc.py b/sci2jsyacc.py
new file mode 100755
index 00000000..f6ca26d5
--- /dev/null
+++ b/sci2jsyacc.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python3
+
+import sys
+import ply.yacc as yacc
+
+from sci2jslex import tokens
+
+def p_expression_operator(p):
+ 'expression : expression OPERATOR term'
+ p[0] = str(p[1]) + str(p[2]) + str(p[3])
+
+def p_expression_term(p):
+ 'expression : term'
+ p[0] = str(p[1])
+
+def p_term_number(p):
+ 'term : NUMBER'
+ p[0] = str(p[1])
+
+def p_term_var(p):
+ 'term : VAR'
+ p[0] = str(p[1])
+
+def p_term_prevar(p):
+ 'term : PREVAR'
+ p[0] = str(p[1])
+
+def p_term_expression(p):
+ 'term : OPENBRACKET expression CLOSEBRACKET'
+ p[0] = str(p[1])
+
+def p_term_function(p):
+ 'term : VAR OPENBRACKET list CLOSEBRACKET'
+ p[0] = str(p[1])
+
+def p_list_list_expression(p):
+ 'list : list COMMA expression'
+ p[0] = str(p[1]) + str(p[2]) + str(p[3])
+
+def p_list_expression(p):
+ 'list : expression'
+ p[0] = str(p[1])
+
+def p_list_empty(p):
+ 'list : '
+ p[0] = ''
+
+def p_error(p):
+ print("Syntax error in input")
+
+if __name__ == '__main__':
+ parser = yacc.yacc()
+
+ if len(sys.argv) <= 1:
+ print("Usage: %s filename" % sys.argv[0])
+ sys.exit(1)
+
+ filename = sys.argv[1]
+ data = ''
+ with open(filename, 'r') as infile:
+ for line in infile:
+ data += line
+
+ result = parser.parse(data)
+
+ print(result)