From 2e4319d2ac35ede7ba012bb576c73e4fc371d54a Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Tue, 20 May 2025 18:07:31 +0200
Subject: [PATCH 01/17] panels: Added file, VC and plugin panels
---
.../java/org/editor/panels/FileTreePanel.java | 100 ++++++++++++++++++
.../java/org/editor/panels/PluginsPanel.java | 17 +++
src/main/java/org/editor/panels/VCPanel.java | 17 +++
3 files changed, 134 insertions(+)
create mode 100644 src/main/java/org/editor/panels/FileTreePanel.java
create mode 100644 src/main/java/org/editor/panels/PluginsPanel.java
create mode 100644 src/main/java/org/editor/panels/VCPanel.java
diff --git a/src/main/java/org/editor/panels/FileTreePanel.java b/src/main/java/org/editor/panels/FileTreePanel.java
new file mode 100644
index 0000000..3aae322
--- /dev/null
+++ b/src/main/java/org/editor/panels/FileTreePanel.java
@@ -0,0 +1,100 @@
+package org.editor.panels;
+
+import java.awt.BorderLayout;
+import java.awt.Component;
+import java.io.File;
+import javax.swing.Icon;
+import javax.swing.JTree;
+import javax.swing.tree.DefaultMutableTreeNode;
+import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.DefaultTreeModel;
+import org.editor.icons.Icons;
+
+/**
+ *
+ * @author hexaredecimal
+ */
+public class FileTreePanel extends DockablePanel {
+
+ public JTree file_tree;
+
+ public FileTreePanel() {
+ super(new BorderLayout(), "files", "files", "File listing (cwd)", "folder-tree");
+
+ file_tree = new JTree();
+ file_tree.setCellRenderer(new FileTreeCellRenderer());
+ file_tree.putClientProperty("JTree.showLines", Boolean.TRUE);
+ file_tree.putClientProperty("JTree.lineStyle", "Angled");
+ //file_tree.setRowHeight(24); // or a reasonable number depending on your font size
+
+ loadDirectory(System.getProperty("user.dir"));
+
+ this.add(file_tree, BorderLayout.CENTER);
+ }
+
+ private void loadDirectory(String file) {
+ File fp = new File(file);
+ if (!fp.exists()) {
+ System.err.println("error: " + file + " does not extit");
+ return;
+ }
+
+ if (fp.isFile()) {
+ return;
+ }
+
+ if (fp.isDirectory()) {
+ DefaultTreeModel model = (DefaultTreeModel) file_tree.getModel();
+ DefaultMutableTreeNode top = new DefaultMutableTreeNode(fp);
+ model.setRoot(top);
+ file_tree.setModel(model);
+ createNodes(top, fp);
+ }
+ }
+
+ private void createNodes(DefaultMutableTreeNode top, File fp) {
+ File[] files = fp.listFiles();
+
+ for (File file : files) {
+ if (file.isFile()) {
+ DefaultMutableTreeNode f = new DefaultMutableTreeNode(file);
+ top.add(f);
+ } else {
+ DefaultMutableTreeNode dir = new DefaultMutableTreeNode(file);
+ createNodes(dir, file);
+ top.add(dir);
+ }
+ }
+ }
+
+ class FileTreeCellRenderer extends DefaultTreeCellRenderer {
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree, Object value,
+ boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
+
+ super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
+
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
+ Object userObject = node.getUserObject();
+
+ if (userObject instanceof File file) {
+ if (file.isDirectory() && file.getName().equals("src")) {
+ setIcon(Icons.getIcon("code-folder"));
+ } else if (file.isDirectory()) {
+ setIcon(Icons.getIcon("folder"));
+ } else if (file.getName().endsWith(".pics")) {
+ setIcon(Icons.getIcon("code-file"));
+ } else if (file.getName().endsWith(".md")) {
+ setIcon(Icons.getIcon("markdown"));
+ } else {
+ setIcon(Icons.getIcon("file"));
+ }
+ setText(file.getName());
+ }
+
+ return this;
+ }
+ }
+
+}
diff --git a/src/main/java/org/editor/panels/PluginsPanel.java b/src/main/java/org/editor/panels/PluginsPanel.java
new file mode 100644
index 0000000..0013be2
--- /dev/null
+++ b/src/main/java/org/editor/panels/PluginsPanel.java
@@ -0,0 +1,17 @@
+package org.editor.panels;
+
+import java.awt.BorderLayout;
+
+/**
+ *
+ * @author hexaredecimal
+ */
+public class PluginsPanel extends DockablePanel {
+
+
+ public PluginsPanel() {
+ super(new BorderLayout(), "Plugins", "Plugins", "Browse community plugins", "plugin");
+ // TODO: Implement the code
+ }
+
+}
diff --git a/src/main/java/org/editor/panels/VCPanel.java b/src/main/java/org/editor/panels/VCPanel.java
new file mode 100644
index 0000000..5353c1b
--- /dev/null
+++ b/src/main/java/org/editor/panels/VCPanel.java
@@ -0,0 +1,17 @@
+package org.editor.panels;
+
+import java.awt.BorderLayout;
+
+/**
+ *
+ * @author hexaredecimal
+ */
+public class VCPanel extends DockablePanel {
+
+
+ public VCPanel() {
+ super(new BorderLayout(), "Git", "Git", "Use version control", "compare-git");
+ // TODO: Implement the code
+ }
+
+}
From db3cf1b3ec4583ea949ae23dd01fe478c262725e Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Tue, 20 May 2025 18:08:08 +0200
Subject: [PATCH 02/17] icons: Adds a new icon for markdown
---
src/main/java/org/editor/icons/Icons.java | 1 +
src/main/resources/icons/markdown.png | Bin 0 -> 274 bytes
2 files changed, 1 insertion(+)
create mode 100644 src/main/resources/icons/markdown.png
diff --git a/src/main/java/org/editor/icons/Icons.java b/src/main/java/org/editor/icons/Icons.java
index a97f1ee..2d0e3a4 100644
--- a/src/main/java/org/editor/icons/Icons.java
+++ b/src/main/java/org/editor/icons/Icons.java
@@ -54,6 +54,7 @@ public class Icons {
"license",
"line",
"logout",
+ "markdown",
"navigation-toolbar-bottom",
"navigation-toolbar-left",
"navigation-toolbar-top",
diff --git a/src/main/resources/icons/markdown.png b/src/main/resources/icons/markdown.png
new file mode 100644
index 0000000000000000000000000000000000000000..b0bd3f5ded88f3f409711eae1811bb15a2d34d1c
GIT binary patch
literal 274
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkQ1FPS
zi(^Q|oVyony_y|GS|7UKarSc54rWhESH5V+?IBpLD7a^xli{>%q`lOwrjrPvbwv_E~kVaj1XzV5@hG7AI0+`6G#
zq{Ya*=dsE2*K>9sJ-`zFnn8cYV;*Cj)lBm)9M|sKc%q@=n1=q0M{Lon85W*fUeD}g
zyXT=~_0H-0bn@#y1ovBLescZiv7hmkM(f?j3~ReYjmsG`9?47>)lU1CeYbk?FNSGn
WtiC#_E3X6khr!d;&t;ucLK6Vi_-|JL
literal 0
HcmV?d00001
From 72efd7e9b8a282c297d20e6a4fad57dcb242b3af Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Tue, 20 May 2025 18:08:43 +0200
Subject: [PATCH 03/17] editor: Add the missing components as dockables
---
src/main/java/org/editor/EditorWindow.java | 38 +++++++++++++++-------
1 file changed, 27 insertions(+), 11 deletions(-)
diff --git a/src/main/java/org/editor/EditorWindow.java b/src/main/java/org/editor/EditorWindow.java
index 13d5d76..f5e5fd8 100644
--- a/src/main/java/org/editor/EditorWindow.java
+++ b/src/main/java/org/editor/EditorWindow.java
@@ -36,9 +36,13 @@
import javax.swing.JToolBar;
import javax.swing.SwingConstants;
import javax.swing.UIManager;
+import javax.swing.plaf.metal.MetalIconFactory;
import org.editor.events.Actions;
import org.editor.icons.Icons;
import org.editor.menu.Menus;
+import org.editor.panels.FileTreePanel;
+import org.editor.panels.PluginsPanel;
+import org.editor.panels.VCPanel;
import org.fife.rsta.ui.CollapsibleSectionPanel;
//import org.fife.rsta.ui.DocumentMap;
@@ -83,22 +87,26 @@ public static EditorWindow the() {
public EditorWindow() {
super("Piccode - DashBoard");
- new CodeEditor();
- root = getRootPane();
- Icons.loadIcons();
- tabEditors = new HashMap<>();
- CodeEditor.createTemplateManager();
- initSearchDialogs();
DockingUISettings.getInstance().installUI();
customizeDock();
+ UIManager.put("Tree.collapsedIcon", UIManager.getIcon("Tree.collapsedIcon"));
+ UIManager.put("Tree.expandedIcon", UIManager.getIcon("Tree.expandedIcon"));
+
try {
UIManager.setLookAndFeel(new FlatLightLaf());
} catch (Exception ex) {
System.err.println("Failed to initialize LaF");
}
+ new CodeEditor();
+ root = getRootPane();
+ Icons.loadIcons();
+ tabEditors = new HashMap<>();
+ CodeEditor.createTemplateManager();
+ initSearchDialogs();
+
int width = 900;
int height = 600;
@@ -190,14 +198,17 @@ public EditorWindow() {
render_panel.add(short_cuts, BorderLayout.EAST);
render_panel.add(new JScrollPane(canvas_panel), BorderLayout.CENTER);
- var cool_bar = new DockablePanel(new BorderLayout(), "Quick Access");
- cool_bar.add(bar, BorderLayout.CENTER);
+ var file_tree = new FileTreePanel();
+ var vc_panel = new VCPanel();
+ var plugins = new PluginsPanel();
DockingPreferences.setDottedDesktopStyle();
getContentPane().add(desk, BorderLayout.CENTER);
getContentPane().add(render_panel, BorderLayout.WEST);
getContentPane().add(access_panel, BorderLayout.SOUTH);
- getContentPane().add(cool_bar, BorderLayout.EAST);
+ getContentPane().add(file_tree, BorderLayout.EAST);
+ getContentPane().add(vc_panel, BorderLayout.EAST);
+ getContentPane().add(plugins, BorderLayout.EAST);
getContentPane().add(tool_bar, BorderLayout.PAGE_START);
getContentPane().add(bottom_bar, BorderLayout.PAGE_END);
@@ -206,8 +217,13 @@ public EditorWindow() {
getContentPane().add(access_panel, BorderLayout.EAST);
desk.addDockable(dashboard);
- desk.addDockable(cool_bar);
- desk.setAutoHide(cool_bar, true);
+ desk.addDockable(file_tree);
+ desk.addDockable(vc_panel);
+ desk.addDockable(plugins);
+
+ desk.setAutoHide(file_tree, true);
+ desk.setAutoHide(vc_panel, true);
+ desk.setAutoHide(plugins, true);
desk.split(dashboard, render_panel, DockingConstants.SPLIT_RIGHT, 0.7);
desk.split(render_panel, access_panel, DockingConstants.SPLIT_BOTTOM);
From 7111959da5070dc15e3eee865b7299646bb04afc Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Wed, 21 May 2025 21:00:42 +0200
Subject: [PATCH 04/17] examples: Initial commit
---
examples/arrays.pics | 17 ++++++++++++++++
examples/factorial.pics | 13 +++++++++++++
examples/hello.pics | 5 +++++
examples/showcase.pics | 43 +++++++++++++++++++++++++++++++++++++++++
4 files changed, 78 insertions(+)
create mode 100644 examples/arrays.pics
create mode 100644 examples/factorial.pics
create mode 100644 examples/hello.pics
create mode 100644 examples/showcase.pics
diff --git a/examples/arrays.pics b/examples/arrays.pics
new file mode 100644
index 0000000..59eab0e
--- /dev/null
+++ b/examples/arrays.pics
@@ -0,0 +1,17 @@
+
+import pkg:array
+
+let numbers = [1,2,3]
+let strings = ["A", "B", "C"]
+
+let concat = Array.concat(numbers, strings)
+
+IO.println(concat)
+IO.println(concat.len)
+
+let collon_sep = Array.join(strings, ":")
+
+IO.println(collon_sep)
+
+let new = collon_sep:concat
+IO.println(new)
diff --git a/examples/factorial.pics b/examples/factorial.pics
new file mode 100644
index 0000000..b82e222
--- /dev/null
+++ b/examples/factorial.pics
@@ -0,0 +1,13 @@
+
+import pkg:io
+
+function factorial(x=1) =
+ if x <= 1 { 1 }
+ else { x * factorial(x - 1) }
+
+let result = factorial(5)
+IO.println(result)
+
+let result = factorial(100)
+IO.println(result)
+
diff --git a/examples/hello.pics b/examples/hello.pics
new file mode 100644
index 0000000..fec801c
--- /dev/null
+++ b/examples/hello.pics
@@ -0,0 +1,5 @@
+
+import pkg:io
+
+IO.println("Hello, world")
+
diff --git a/examples/showcase.pics b/examples/showcase.pics
new file mode 100644
index 0000000..51ce3f0
--- /dev/null
+++ b/examples/showcase.pics
@@ -0,0 +1,43 @@
+
+// Syntax showcase
+
+import pkg:io
+
+// TODO: import pkg:io { println }
+
+// Variable declaration
+let n = 5 * 2
+let song = "Feel good Inc"
+
+// The language supports the normal set of operators as in c.
+
+// Arrays
+let numbers = [1,2,3]
+let first = numbers.0
+let joined = first:numbers
+
+// Tuples
+let numbers = (1,2,3)
+let first = numbers.0
+
+
+// If-Else
+if 1 > 1 { numbers } else { joined }
+
+// When
+when numbers {
+ is (a, b, c) -> a + " " + b + " " + c
+ else -> "Not a match""
+}
+
+// Functions
+function add(x=1, y=1) = x + y
+
+let result = add(y=2)
+IO.println(result)
+
+let answer = 10 |> add(10) |> add(10)
+
+IO.println(answer)
+
+
From 6a8da8e9012889536666e8ce3799d8cc21fdcd83 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Fri, 23 May 2025 10:26:47 +0200
Subject: [PATCH 05/17] antlr4: Updatess the parser
---
.../org/piccode/antlr4/PiccodeScript.interp | 5 +-
.../org/piccode/antlr4/PiccodeScript.tokens | 158 +--
.../antlr4/PiccodeScriptBaseListener.java | 12 +
.../antlr4/PiccodeScriptBaseVisitor.java | 7 +
.../piccode/antlr4/PiccodeScriptLexer.interp | 5 +-
.../piccode/antlr4/PiccodeScriptLexer.java | 210 ++--
.../piccode/antlr4/PiccodeScriptLexer.tokens | 158 +--
.../piccode/antlr4/PiccodeScriptListener.java | 10 +
.../piccode/antlr4/PiccodeScriptParser.java | 953 ++++++++++--------
.../piccode/antlr4/PiccodeScriptVisitor.java | 6 +
10 files changed, 836 insertions(+), 688 deletions(-)
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScript.interp b/src/main/java/org/piccode/antlr4/PiccodeScript.interp
index 6b0ec03..3da7fb7 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScript.interp
+++ b/src/main/java/org/piccode/antlr4/PiccodeScript.interp
@@ -4,6 +4,7 @@ null
'-'
'*'
'/'
+'%'
'>'
'>='
'<'
@@ -53,6 +54,7 @@ ADD
SUB
MUL
DIV
+MOD
GT
GE
LT
@@ -110,6 +112,7 @@ arg
literal_expr
expr_stmt
expr
+closure_decl
unary
if_expr
when_expr
@@ -129,4 +132,4 @@ do_expr
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 48, 331, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 3, 2, 7, 2, 62, 10, 2, 12, 2, 14, 2, 65, 11, 2, 3, 2, 5, 2, 68, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 74, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 7, 6, 88, 10, 6, 12, 6, 14, 6, 91, 11, 6, 3, 7, 3, 7, 3, 7, 5, 7, 96, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 5, 9, 106, 10, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 113, 10, 10, 12, 10, 14, 10, 116, 11, 10, 3, 11, 3, 11, 3, 11, 5, 11, 121, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 128, 10, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 136, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 149, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 214, 10, 14, 3, 14, 7, 14, 217, 10, 14, 12, 14, 14, 14, 220, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 230, 10, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 247, 10, 17, 3, 17, 3, 17, 3, 18, 7, 18, 252, 10, 18, 12, 18, 14, 18, 255, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 5, 23, 277, 10, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 7, 25, 288, 10, 25, 12, 25, 14, 25, 291, 11, 25, 3, 26, 3, 26, 3, 26, 7, 26, 296, 10, 26, 12, 26, 14, 26, 299, 11, 26, 3, 27, 3, 27, 3, 27, 5, 27, 304, 10, 27, 3, 27, 5, 27, 307, 10, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 7, 29, 316, 10, 29, 12, 29, 14, 29, 319, 11, 29, 3, 30, 3, 30, 3, 30, 7, 30, 324, 10, 30, 12, 30, 14, 30, 327, 11, 30, 3, 30, 3, 30, 3, 30, 2, 3, 26, 31, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 2, 2, 2, 362, 2, 67, 3, 2, 2, 2, 4, 73, 3, 2, 2, 2, 6, 75, 3, 2, 2, 2, 8, 80, 3, 2, 2, 2, 10, 89, 3, 2, 2, 2, 12, 95, 3, 2, 2, 2, 14, 97, 3, 2, 2, 2, 16, 103, 3, 2, 2, 2, 18, 109, 3, 2, 2, 2, 20, 117, 3, 2, 2, 2, 22, 127, 3, 2, 2, 2, 24, 129, 3, 2, 2, 2, 26, 148, 3, 2, 2, 2, 28, 229, 3, 2, 2, 2, 30, 231, 3, 2, 2, 2, 32, 241, 3, 2, 2, 2, 34, 253, 3, 2, 2, 2, 36, 256, 3, 2, 2, 2, 38, 261, 3, 2, 2, 2, 40, 265, 3, 2, 2, 2, 42, 270, 3, 2, 2, 2, 44, 274, 3, 2, 2, 2, 46, 280, 3, 2, 2, 2, 48, 284, 3, 2, 2, 2, 50, 292, 3, 2, 2, 2, 52, 306, 3, 2, 2, 2, 54, 308, 3, 2, 2, 2, 56, 312, 3, 2, 2, 2, 58, 320, 3, 2, 2, 2, 60, 62, 5, 4, 3, 2, 61, 60, 3, 2, 2, 2, 62, 65, 3, 2, 2, 2, 63, 61, 3, 2, 2, 2, 63, 64, 3, 2, 2, 2, 64, 68, 3, 2, 2, 2, 65, 63, 3, 2, 2, 2, 66, 68, 7, 2, 2, 3, 67, 63, 3, 2, 2, 2, 67, 66, 3, 2, 2, 2, 68, 3, 3, 2, 2, 2, 69, 74, 5, 6, 4, 2, 70, 74, 5, 14, 8, 2, 71, 74, 5, 8, 5, 2, 72, 74, 5, 24, 13, 2, 73, 69, 3, 2, 2, 2, 73, 70, 3, 2, 2, 2, 73, 71, 3, 2, 2, 2, 73, 72, 3, 2, 2, 2, 74, 5, 3, 2, 2, 2, 75, 76, 7, 36, 2, 2, 76, 77, 7, 47, 2, 2, 77, 78, 7, 27, 2, 2, 78, 79, 7, 47, 2, 2, 79, 7, 3, 2, 2, 2, 80, 81, 7, 40, 2, 2, 81, 82, 7, 47, 2, 2, 82, 83, 7, 21, 2, 2, 83, 84, 5, 10, 6, 2, 84, 85, 7, 22, 2, 2, 85, 9, 3, 2, 2, 2, 86, 88, 5, 12, 7, 2, 87, 86, 3, 2, 2, 2, 88, 91, 3, 2, 2, 2, 89, 87, 3, 2, 2, 2, 89, 90, 3, 2, 2, 2, 90, 11, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 92, 96, 5, 14, 8, 2, 93, 96, 5, 40, 21, 2, 94, 96, 5, 8, 5, 2, 95, 92, 3, 2, 2, 2, 95, 93, 3, 2, 2, 2, 95, 94, 3, 2, 2, 2, 96, 13, 3, 2, 2, 2, 97, 98, 7, 34, 2, 2, 98, 99, 7, 47, 2, 2, 99, 100, 5, 16, 9, 2, 100, 101, 7, 32, 2, 2, 101, 102, 5, 26, 14, 2, 102, 15, 3, 2, 2, 2, 103, 105, 7, 23, 2, 2, 104, 106, 5, 18, 10, 2, 105, 104, 3, 2, 2, 2, 105, 106, 3, 2, 2, 2, 106, 107, 3, 2, 2, 2, 107, 108, 7, 24, 2, 2, 108, 17, 3, 2, 2, 2, 109, 114, 5, 20, 11, 2, 110, 111, 7, 28, 2, 2, 111, 113, 5, 20, 11, 2, 112, 110, 3, 2, 2, 2, 113, 116, 3, 2, 2, 2, 114, 112, 3, 2, 2, 2, 114, 115, 3, 2, 2, 2, 115, 19, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 117, 120, 7, 47, 2, 2, 118, 119, 7, 32, 2, 2, 119, 121, 5, 22, 12, 2, 120, 118, 3, 2, 2, 2, 120, 121, 3, 2, 2, 2, 121, 21, 3, 2, 2, 2, 122, 128, 7, 42, 2, 2, 123, 128, 7, 43, 2, 2, 124, 128, 5, 44, 23, 2, 125, 128, 5, 42, 22, 2, 126, 128, 5, 46, 24, 2, 127, 122, 3, 2, 2, 2, 127, 123, 3, 2, 2, 2, 127, 124, 3, 2, 2, 2, 127, 125, 3, 2, 2, 2, 127, 126, 3, 2, 2, 2, 128, 23, 3, 2, 2, 2, 129, 130, 5, 26, 14, 2, 130, 25, 3, 2, 2, 2, 131, 132, 8, 14, 1, 2, 132, 149, 5, 40, 21, 2, 133, 135, 7, 23, 2, 2, 134, 136, 5, 26, 14, 2, 135, 134, 3, 2, 2, 2, 135, 136, 3, 2, 2, 2, 136, 137, 3, 2, 2, 2, 137, 149, 7, 24, 2, 2, 138, 149, 5, 28, 15, 2, 139, 149, 5, 30, 16, 2, 140, 149, 5, 32, 17, 2, 141, 149, 5, 58, 30, 2, 142, 149, 5, 44, 23, 2, 143, 149, 5, 42, 22, 2, 144, 149, 5, 46, 24, 2, 145, 149, 7, 47, 2, 2, 146, 149, 7, 42, 2, 2, 147, 149, 7, 43, 2, 2, 148, 131, 3, 2, 2, 2, 148, 133, 3, 2, 2, 2, 148, 138, 3, 2, 2, 2, 148, 139, 3, 2, 2, 2, 148, 140, 3, 2, 2, 2, 148, 141, 3, 2, 2, 2, 148, 142, 3, 2, 2, 2, 148, 143, 3, 2, 2, 2, 148, 144, 3, 2, 2, 2, 148, 145, 3, 2, 2, 2, 148, 146, 3, 2, 2, 2, 148, 147, 3, 2, 2, 2, 149, 218, 3, 2, 2, 2, 150, 151, 12, 33, 2, 2, 151, 152, 7, 44, 2, 2, 152, 217, 5, 26, 14, 34, 153, 154, 12, 32, 2, 2, 154, 155, 7, 20, 2, 2, 155, 217, 5, 26, 14, 33, 156, 157, 12, 31, 2, 2, 157, 158, 7, 14, 2, 2, 158, 217, 5, 26, 14, 32, 159, 160, 12, 30, 2, 2, 160, 161, 7, 13, 2, 2, 161, 217, 5, 26, 14, 31, 162, 163, 12, 29, 2, 2, 163, 164, 7, 11, 2, 2, 164, 217, 5, 26, 14, 30, 165, 166, 12, 28, 2, 2, 166, 167, 7, 12, 2, 2, 167, 217, 5, 26, 14, 29, 168, 169, 12, 27, 2, 2, 169, 170, 7, 9, 2, 2, 170, 217, 5, 26, 14, 28, 171, 172, 12, 26, 2, 2, 172, 173, 7, 10, 2, 2, 173, 217, 5, 26, 14, 27, 174, 175, 12, 25, 2, 2, 175, 176, 7, 7, 2, 2, 176, 217, 5, 26, 14, 26, 177, 178, 12, 24, 2, 2, 178, 179, 7, 8, 2, 2, 179, 217, 5, 26, 14, 25, 180, 181, 12, 23, 2, 2, 181, 182, 7, 15, 2, 2, 182, 217, 5, 26, 14, 24, 183, 184, 12, 22, 2, 2, 184, 185, 7, 16, 2, 2, 185, 217, 5, 26, 14, 23, 186, 187, 12, 21, 2, 2, 187, 188, 7, 18, 2, 2, 188, 217, 5, 26, 14, 22, 189, 190, 12, 20, 2, 2, 190, 191, 7, 17, 2, 2, 191, 217, 5, 26, 14, 21, 192, 193, 12, 19, 2, 2, 193, 194, 7, 5, 2, 2, 194, 217, 5, 26, 14, 20, 195, 196, 12, 18, 2, 2, 196, 197, 7, 6, 2, 2, 197, 217, 5, 26, 14, 19, 198, 199, 12, 17, 2, 2, 199, 200, 7, 3, 2, 2, 200, 217, 5, 26, 14, 18, 201, 202, 12, 16, 2, 2, 202, 203, 7, 4, 2, 2, 203, 217, 5, 26, 14, 17, 204, 205, 12, 15, 2, 2, 205, 206, 7, 44, 2, 2, 206, 217, 5, 26, 14, 16, 207, 208, 12, 14, 2, 2, 208, 209, 7, 27, 2, 2, 209, 217, 5, 26, 14, 15, 210, 211, 12, 35, 2, 2, 211, 213, 7, 23, 2, 2, 212, 214, 5, 50, 26, 2, 213, 212, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 217, 7, 24, 2, 2, 216, 150, 3, 2, 2, 2, 216, 153, 3, 2, 2, 2, 216, 156, 3, 2, 2, 2, 216, 159, 3, 2, 2, 2, 216, 162, 3, 2, 2, 2, 216, 165, 3, 2, 2, 2, 216, 168, 3, 2, 2, 2, 216, 171, 3, 2, 2, 2, 216, 174, 3, 2, 2, 2, 216, 177, 3, 2, 2, 2, 216, 180, 3, 2, 2, 2, 216, 183, 3, 2, 2, 2, 216, 186, 3, 2, 2, 2, 216, 189, 3, 2, 2, 2, 216, 192, 3, 2, 2, 2, 216, 195, 3, 2, 2, 2, 216, 198, 3, 2, 2, 2, 216, 201, 3, 2, 2, 2, 216, 204, 3, 2, 2, 2, 216, 207, 3, 2, 2, 2, 216, 210, 3, 2, 2, 2, 217, 220, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 27, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 221, 222, 7, 19, 2, 2, 222, 230, 5, 26, 14, 2, 223, 224, 7, 4, 2, 2, 224, 230, 5, 26, 14, 2, 225, 226, 7, 31, 2, 2, 226, 230, 5, 26, 14, 2, 227, 228, 7, 17, 2, 2, 228, 230, 5, 26, 14, 2, 229, 221, 3, 2, 2, 2, 229, 223, 3, 2, 2, 2, 229, 225, 3, 2, 2, 2, 229, 227, 3, 2, 2, 2, 230, 29, 3, 2, 2, 2, 231, 232, 7, 38, 2, 2, 232, 233, 5, 26, 14, 2, 233, 234, 7, 21, 2, 2, 234, 235, 5, 26, 14, 2, 235, 236, 7, 22, 2, 2, 236, 237, 7, 39, 2, 2, 237, 238, 7, 21, 2, 2, 238, 239, 5, 26, 14, 2, 239, 240, 7, 22, 2, 2, 240, 31, 3, 2, 2, 2, 241, 242, 7, 35, 2, 2, 242, 243, 5, 26, 14, 2, 243, 244, 7, 21, 2, 2, 244, 246, 5, 34, 18, 2, 245, 247, 5, 38, 20, 2, 246, 245, 3, 2, 2, 2, 246, 247, 3, 2, 2, 2, 247, 248, 3, 2, 2, 2, 248, 249, 7, 22, 2, 2, 249, 33, 3, 2, 2, 2, 250, 252, 5, 36, 19, 2, 251, 250, 3, 2, 2, 2, 252, 255, 3, 2, 2, 2, 253, 251, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 35, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 256, 257, 7, 37, 2, 2, 257, 258, 5, 48, 25, 2, 258, 259, 7, 30, 2, 2, 259, 260, 5, 26, 14, 2, 260, 37, 3, 2, 2, 2, 261, 262, 7, 39, 2, 2, 262, 263, 7, 30, 2, 2, 263, 264, 5, 26, 14, 2, 264, 39, 3, 2, 2, 2, 265, 266, 7, 33, 2, 2, 266, 267, 7, 47, 2, 2, 267, 268, 7, 32, 2, 2, 268, 269, 5, 26, 14, 2, 269, 41, 3, 2, 2, 2, 270, 271, 7, 23, 2, 2, 271, 272, 5, 48, 25, 2, 272, 273, 7, 24, 2, 2, 273, 43, 3, 2, 2, 2, 274, 276, 7, 25, 2, 2, 275, 277, 5, 48, 25, 2, 276, 275, 3, 2, 2, 2, 276, 277, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 279, 7, 26, 2, 2, 279, 45, 3, 2, 2, 2, 280, 281, 7, 21, 2, 2, 281, 282, 5, 56, 29, 2, 282, 283, 7, 22, 2, 2, 283, 47, 3, 2, 2, 2, 284, 289, 5, 26, 14, 2, 285, 286, 7, 28, 2, 2, 286, 288, 5, 26, 14, 2, 287, 285, 3, 2, 2, 2, 288, 291, 3, 2, 2, 2, 289, 287, 3, 2, 2, 2, 289, 290, 3, 2, 2, 2, 290, 49, 3, 2, 2, 2, 291, 289, 3, 2, 2, 2, 292, 297, 5, 52, 27, 2, 293, 294, 7, 28, 2, 2, 294, 296, 5, 52, 27, 2, 295, 293, 3, 2, 2, 2, 296, 299, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 297, 298, 3, 2, 2, 2, 298, 51, 3, 2, 2, 2, 299, 297, 3, 2, 2, 2, 300, 303, 7, 47, 2, 2, 301, 302, 7, 32, 2, 2, 302, 304, 5, 26, 14, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 307, 3, 2, 2, 2, 305, 307, 5, 26, 14, 2, 306, 300, 3, 2, 2, 2, 306, 305, 3, 2, 2, 2, 307, 53, 3, 2, 2, 2, 308, 309, 7, 47, 2, 2, 309, 310, 7, 27, 2, 2, 310, 311, 5, 26, 14, 2, 311, 55, 3, 2, 2, 2, 312, 317, 5, 54, 28, 2, 313, 314, 7, 28, 2, 2, 314, 316, 5, 54, 28, 2, 315, 313, 3, 2, 2, 2, 316, 319, 3, 2, 2, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 57, 3, 2, 2, 2, 319, 317, 3, 2, 2, 2, 320, 321, 7, 41, 2, 2, 321, 325, 7, 21, 2, 2, 322, 324, 5, 26, 14, 2, 323, 322, 3, 2, 2, 2, 324, 327, 3, 2, 2, 2, 325, 323, 3, 2, 2, 2, 325, 326, 3, 2, 2, 2, 326, 328, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 328, 329, 7, 22, 2, 2, 329, 59, 3, 2, 2, 2, 26, 63, 67, 73, 89, 95, 105, 114, 120, 127, 135, 148, 213, 216, 218, 229, 246, 253, 276, 289, 297, 303, 306, 317, 325]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 49, 345, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 3, 2, 7, 2, 64, 10, 2, 12, 2, 14, 2, 67, 11, 2, 3, 2, 5, 2, 70, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 76, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 7, 3, 7, 3, 7, 5, 7, 98, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 5, 9, 108, 10, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 115, 10, 10, 12, 10, 14, 10, 118, 11, 10, 3, 11, 3, 11, 3, 11, 5, 11, 123, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 130, 10, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 139, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 152, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 220, 10, 14, 3, 14, 7, 14, 223, 10, 14, 12, 14, 14, 14, 226, 11, 14, 3, 15, 3, 15, 5, 15, 230, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 244, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 261, 10, 18, 3, 18, 3, 18, 3, 19, 7, 19, 266, 10, 19, 12, 19, 14, 19, 269, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 291, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 7, 26, 302, 10, 26, 12, 26, 14, 26, 305, 11, 26, 3, 27, 3, 27, 3, 27, 7, 27, 310, 10, 27, 12, 27, 14, 27, 313, 11, 27, 3, 28, 3, 28, 3, 28, 5, 28, 318, 10, 28, 3, 28, 5, 28, 321, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 7, 30, 330, 10, 30, 12, 30, 14, 30, 333, 11, 30, 3, 31, 3, 31, 3, 31, 7, 31, 338, 10, 31, 12, 31, 14, 31, 341, 11, 31, 3, 31, 3, 31, 3, 31, 2, 3, 26, 32, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 2, 2, 2, 378, 2, 69, 3, 2, 2, 2, 4, 75, 3, 2, 2, 2, 6, 77, 3, 2, 2, 2, 8, 82, 3, 2, 2, 2, 10, 91, 3, 2, 2, 2, 12, 97, 3, 2, 2, 2, 14, 99, 3, 2, 2, 2, 16, 105, 3, 2, 2, 2, 18, 111, 3, 2, 2, 2, 20, 119, 3, 2, 2, 2, 22, 129, 3, 2, 2, 2, 24, 131, 3, 2, 2, 2, 26, 151, 3, 2, 2, 2, 28, 227, 3, 2, 2, 2, 30, 243, 3, 2, 2, 2, 32, 245, 3, 2, 2, 2, 34, 255, 3, 2, 2, 2, 36, 267, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 275, 3, 2, 2, 2, 42, 279, 3, 2, 2, 2, 44, 284, 3, 2, 2, 2, 46, 288, 3, 2, 2, 2, 48, 294, 3, 2, 2, 2, 50, 298, 3, 2, 2, 2, 52, 306, 3, 2, 2, 2, 54, 320, 3, 2, 2, 2, 56, 322, 3, 2, 2, 2, 58, 326, 3, 2, 2, 2, 60, 334, 3, 2, 2, 2, 62, 64, 5, 4, 3, 2, 63, 62, 3, 2, 2, 2, 64, 67, 3, 2, 2, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 70, 3, 2, 2, 2, 67, 65, 3, 2, 2, 2, 68, 70, 7, 2, 2, 3, 69, 65, 3, 2, 2, 2, 69, 68, 3, 2, 2, 2, 70, 3, 3, 2, 2, 2, 71, 76, 5, 6, 4, 2, 72, 76, 5, 14, 8, 2, 73, 76, 5, 8, 5, 2, 74, 76, 5, 24, 13, 2, 75, 71, 3, 2, 2, 2, 75, 72, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 75, 74, 3, 2, 2, 2, 76, 5, 3, 2, 2, 2, 77, 78, 7, 37, 2, 2, 78, 79, 7, 48, 2, 2, 79, 80, 7, 28, 2, 2, 80, 81, 7, 48, 2, 2, 81, 7, 3, 2, 2, 2, 82, 83, 7, 41, 2, 2, 83, 84, 7, 48, 2, 2, 84, 85, 7, 22, 2, 2, 85, 86, 5, 10, 6, 2, 86, 87, 7, 23, 2, 2, 87, 9, 3, 2, 2, 2, 88, 90, 5, 12, 7, 2, 89, 88, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 11, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 98, 5, 14, 8, 2, 95, 98, 5, 42, 22, 2, 96, 98, 5, 8, 5, 2, 97, 94, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 96, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 100, 7, 35, 2, 2, 100, 101, 7, 48, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 33, 2, 2, 103, 104, 5, 26, 14, 2, 104, 15, 3, 2, 2, 2, 105, 107, 7, 24, 2, 2, 106, 108, 5, 18, 10, 2, 107, 106, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 7, 25, 2, 2, 110, 17, 3, 2, 2, 2, 111, 116, 5, 20, 11, 2, 112, 113, 7, 29, 2, 2, 113, 115, 5, 20, 11, 2, 114, 112, 3, 2, 2, 2, 115, 118, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 19, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 119, 122, 7, 48, 2, 2, 120, 121, 7, 33, 2, 2, 121, 123, 5, 22, 12, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 21, 3, 2, 2, 2, 124, 130, 7, 43, 2, 2, 125, 130, 7, 44, 2, 2, 126, 130, 5, 46, 24, 2, 127, 130, 5, 44, 23, 2, 128, 130, 5, 48, 25, 2, 129, 124, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 126, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 129, 128, 3, 2, 2, 2, 130, 23, 3, 2, 2, 2, 131, 132, 5, 26, 14, 2, 132, 25, 3, 2, 2, 2, 133, 134, 8, 14, 1, 2, 134, 152, 5, 42, 22, 2, 135, 152, 5, 28, 15, 2, 136, 138, 7, 24, 2, 2, 137, 139, 5, 26, 14, 2, 138, 137, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 152, 7, 25, 2, 2, 141, 152, 5, 30, 16, 2, 142, 152, 5, 32, 17, 2, 143, 152, 5, 34, 18, 2, 144, 152, 5, 60, 31, 2, 145, 152, 5, 46, 24, 2, 146, 152, 5, 44, 23, 2, 147, 152, 5, 48, 25, 2, 148, 152, 7, 48, 2, 2, 149, 152, 7, 43, 2, 2, 150, 152, 7, 44, 2, 2, 151, 133, 3, 2, 2, 2, 151, 135, 3, 2, 2, 2, 151, 136, 3, 2, 2, 2, 151, 141, 3, 2, 2, 2, 151, 142, 3, 2, 2, 2, 151, 143, 3, 2, 2, 2, 151, 144, 3, 2, 2, 2, 151, 145, 3, 2, 2, 2, 151, 146, 3, 2, 2, 2, 151, 147, 3, 2, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 151, 150, 3, 2, 2, 2, 152, 224, 3, 2, 2, 2, 153, 154, 12, 34, 2, 2, 154, 155, 7, 45, 2, 2, 155, 223, 5, 26, 14, 35, 156, 157, 12, 33, 2, 2, 157, 158, 7, 21, 2, 2, 158, 223, 5, 26, 14, 34, 159, 160, 12, 32, 2, 2, 160, 161, 7, 15, 2, 2, 161, 223, 5, 26, 14, 33, 162, 163, 12, 31, 2, 2, 163, 164, 7, 14, 2, 2, 164, 223, 5, 26, 14, 32, 165, 166, 12, 30, 2, 2, 166, 167, 7, 12, 2, 2, 167, 223, 5, 26, 14, 31, 168, 169, 12, 29, 2, 2, 169, 170, 7, 13, 2, 2, 170, 223, 5, 26, 14, 30, 171, 172, 12, 28, 2, 2, 172, 173, 7, 10, 2, 2, 173, 223, 5, 26, 14, 29, 174, 175, 12, 27, 2, 2, 175, 176, 7, 11, 2, 2, 176, 223, 5, 26, 14, 28, 177, 178, 12, 26, 2, 2, 178, 179, 7, 8, 2, 2, 179, 223, 5, 26, 14, 27, 180, 181, 12, 25, 2, 2, 181, 182, 7, 9, 2, 2, 182, 223, 5, 26, 14, 26, 183, 184, 12, 24, 2, 2, 184, 185, 7, 16, 2, 2, 185, 223, 5, 26, 14, 25, 186, 187, 12, 23, 2, 2, 187, 188, 7, 17, 2, 2, 188, 223, 5, 26, 14, 24, 189, 190, 12, 22, 2, 2, 190, 191, 7, 19, 2, 2, 191, 223, 5, 26, 14, 23, 192, 193, 12, 21, 2, 2, 193, 194, 7, 18, 2, 2, 194, 223, 5, 26, 14, 22, 195, 196, 12, 20, 2, 2, 196, 197, 7, 5, 2, 2, 197, 223, 5, 26, 14, 21, 198, 199, 12, 19, 2, 2, 199, 200, 7, 6, 2, 2, 200, 223, 5, 26, 14, 20, 201, 202, 12, 18, 2, 2, 202, 203, 7, 7, 2, 2, 203, 223, 5, 26, 14, 19, 204, 205, 12, 17, 2, 2, 205, 206, 7, 3, 2, 2, 206, 223, 5, 26, 14, 18, 207, 208, 12, 16, 2, 2, 208, 209, 7, 4, 2, 2, 209, 223, 5, 26, 14, 17, 210, 211, 12, 15, 2, 2, 211, 212, 7, 45, 2, 2, 212, 223, 5, 26, 14, 16, 213, 214, 12, 14, 2, 2, 214, 215, 7, 28, 2, 2, 215, 223, 5, 26, 14, 15, 216, 217, 12, 37, 2, 2, 217, 219, 7, 24, 2, 2, 218, 220, 5, 52, 27, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 223, 7, 25, 2, 2, 222, 153, 3, 2, 2, 2, 222, 156, 3, 2, 2, 2, 222, 159, 3, 2, 2, 2, 222, 162, 3, 2, 2, 2, 222, 165, 3, 2, 2, 2, 222, 168, 3, 2, 2, 2, 222, 171, 3, 2, 2, 2, 222, 174, 3, 2, 2, 2, 222, 177, 3, 2, 2, 2, 222, 180, 3, 2, 2, 2, 222, 183, 3, 2, 2, 2, 222, 186, 3, 2, 2, 2, 222, 189, 3, 2, 2, 2, 222, 192, 3, 2, 2, 2, 222, 195, 3, 2, 2, 2, 222, 198, 3, 2, 2, 2, 222, 201, 3, 2, 2, 2, 222, 204, 3, 2, 2, 2, 222, 207, 3, 2, 2, 2, 222, 210, 3, 2, 2, 2, 222, 213, 3, 2, 2, 2, 222, 216, 3, 2, 2, 2, 223, 226, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 27, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 227, 229, 7, 19, 2, 2, 228, 230, 5, 18, 10, 2, 229, 228, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 7, 19, 2, 2, 232, 233, 7, 31, 2, 2, 233, 234, 5, 26, 14, 2, 234, 29, 3, 2, 2, 2, 235, 236, 7, 20, 2, 2, 236, 244, 5, 26, 14, 2, 237, 238, 7, 4, 2, 2, 238, 244, 5, 26, 14, 2, 239, 240, 7, 32, 2, 2, 240, 244, 5, 26, 14, 2, 241, 242, 7, 18, 2, 2, 242, 244, 5, 26, 14, 2, 243, 235, 3, 2, 2, 2, 243, 237, 3, 2, 2, 2, 243, 239, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 31, 3, 2, 2, 2, 245, 246, 7, 39, 2, 2, 246, 247, 5, 26, 14, 2, 247, 248, 7, 22, 2, 2, 248, 249, 5, 26, 14, 2, 249, 250, 7, 23, 2, 2, 250, 251, 7, 40, 2, 2, 251, 252, 7, 22, 2, 2, 252, 253, 5, 26, 14, 2, 253, 254, 7, 23, 2, 2, 254, 33, 3, 2, 2, 2, 255, 256, 7, 36, 2, 2, 256, 257, 5, 26, 14, 2, 257, 258, 7, 22, 2, 2, 258, 260, 5, 36, 19, 2, 259, 261, 5, 40, 21, 2, 260, 259, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 7, 23, 2, 2, 263, 35, 3, 2, 2, 2, 264, 266, 5, 38, 20, 2, 265, 264, 3, 2, 2, 2, 266, 269, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 37, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 271, 7, 38, 2, 2, 271, 272, 5, 50, 26, 2, 272, 273, 7, 31, 2, 2, 273, 274, 5, 26, 14, 2, 274, 39, 3, 2, 2, 2, 275, 276, 7, 40, 2, 2, 276, 277, 7, 31, 2, 2, 277, 278, 5, 26, 14, 2, 278, 41, 3, 2, 2, 2, 279, 280, 7, 34, 2, 2, 280, 281, 7, 48, 2, 2, 281, 282, 7, 33, 2, 2, 282, 283, 5, 26, 14, 2, 283, 43, 3, 2, 2, 2, 284, 285, 7, 24, 2, 2, 285, 286, 5, 50, 26, 2, 286, 287, 7, 25, 2, 2, 287, 45, 3, 2, 2, 2, 288, 290, 7, 26, 2, 2, 289, 291, 5, 50, 26, 2, 290, 289, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 7, 27, 2, 2, 293, 47, 3, 2, 2, 2, 294, 295, 7, 22, 2, 2, 295, 296, 5, 58, 30, 2, 296, 297, 7, 23, 2, 2, 297, 49, 3, 2, 2, 2, 298, 303, 5, 26, 14, 2, 299, 300, 7, 29, 2, 2, 300, 302, 5, 26, 14, 2, 301, 299, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 51, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 306, 311, 5, 54, 28, 2, 307, 308, 7, 29, 2, 2, 308, 310, 5, 54, 28, 2, 309, 307, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 53, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 317, 7, 48, 2, 2, 315, 316, 7, 33, 2, 2, 316, 318, 5, 26, 14, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 321, 3, 2, 2, 2, 319, 321, 5, 26, 14, 2, 320, 314, 3, 2, 2, 2, 320, 319, 3, 2, 2, 2, 321, 55, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 28, 2, 2, 324, 325, 5, 26, 14, 2, 325, 57, 3, 2, 2, 2, 326, 331, 5, 56, 29, 2, 327, 328, 7, 29, 2, 2, 328, 330, 5, 56, 29, 2, 329, 327, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 59, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 335, 7, 42, 2, 2, 335, 339, 7, 22, 2, 2, 336, 338, 5, 26, 14, 2, 337, 336, 3, 2, 2, 2, 338, 341, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 342, 343, 7, 23, 2, 2, 343, 61, 3, 2, 2, 2, 27, 65, 69, 75, 91, 97, 107, 116, 122, 129, 138, 151, 219, 222, 224, 229, 243, 260, 267, 290, 303, 311, 317, 320, 331, 339]
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScript.tokens b/src/main/java/org/piccode/antlr4/PiccodeScript.tokens
index ba250bc..ff4e9fd 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScript.tokens
+++ b/src/main/java/org/piccode/antlr4/PiccodeScript.tokens
@@ -2,85 +2,87 @@ ADD=1
SUB=2
MUL=3
DIV=4
-GT=5
-GE=6
-LT=7
-LE=8
-EQ=9
-NE=10
-AND=11
-OR=12
-SHL=13
-SHR=14
-BAND=15
-BOR=16
-EXCLAIM=17
-PIPE=18
-LBRACE=19
-RBRACE=20
-LPAREN=21
-RPAREN=22
-LBRACKET=23
-RBRACKET=24
-COLON=25
-COMMA=26
-SEMI=27
-ARROW=28
-TILDE=29
-ASSIGN=30
-LET=31
-FUNCTION=32
-WHEN=33
-IMPORT=34
-IS=35
-IF=36
-ELSE=37
-MODULE=38
-DO=39
-NUMBER=40
-STRING=41
-DOT=42
-LINE_COMMENT=43
-BLOCK_COMMENT=44
-ID=45
-WS=46
+MOD=5
+GT=6
+GE=7
+LT=8
+LE=9
+EQ=10
+NE=11
+AND=12
+OR=13
+SHL=14
+SHR=15
+BAND=16
+BOR=17
+EXCLAIM=18
+PIPE=19
+LBRACE=20
+RBRACE=21
+LPAREN=22
+RPAREN=23
+LBRACKET=24
+RBRACKET=25
+COLON=26
+COMMA=27
+SEMI=28
+ARROW=29
+TILDE=30
+ASSIGN=31
+LET=32
+FUNCTION=33
+WHEN=34
+IMPORT=35
+IS=36
+IF=37
+ELSE=38
+MODULE=39
+DO=40
+NUMBER=41
+STRING=42
+DOT=43
+LINE_COMMENT=44
+BLOCK_COMMENT=45
+ID=46
+WS=47
'+'=1
'-'=2
'*'=3
'/'=4
-'>'=5
-'>='=6
-'<'=7
-'<='=8
-'=='=9
-'!='=10
-'&&'=11
-'||'=12
-'>>'=13
-'<<'=14
-'&'=15
-'|'=16
-'!'=17
-'|>'=18
-'{'=19
-'}'=20
-'('=21
-')'=22
-'['=23
-']'=24
-':'=25
-','=26
-';'=27
-'->'=28
-'~'=29
-'='=30
-'let'=31
-'function'=32
-'when'=33
-'import'=34
-'is'=35
-'if'=36
-'else'=37
-'module'=38
-'do'=39
-'.'=42
+'%'=5
+'>'=6
+'>='=7
+'<'=8
+'<='=9
+'=='=10
+'!='=11
+'&&'=12
+'||'=13
+'>>'=14
+'<<'=15
+'&'=16
+'|'=17
+'!'=18
+'|>'=19
+'{'=20
+'}'=21
+'('=22
+')'=23
+'['=24
+']'=25
+':'=26
+','=27
+';'=28
+'->'=29
+'~'=30
+'='=31
+'let'=32
+'function'=33
+'when'=34
+'import'=35
+'is'=36
+'if'=37
+'else'=38
+'module'=39
+'do'=40
+'.'=43
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
index f8f986b..2fa9681 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
@@ -169,6 +169,18 @@ public class PiccodeScriptBaseListener implements PiccodeScriptListener {
* The default implementation does nothing.
*/
@Override public void exitExpr(PiccodeScriptParser.ExprContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
index 8cccc64..363046b 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
@@ -104,6 +104,13 @@ public class PiccodeScriptBaseVisitor extends AbstractParseTreeVisitor imp
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitExpr(PiccodeScriptParser.ExprContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
index 4575c74..2bd5ed4 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
@@ -4,6 +4,7 @@ null
'-'
'*'
'/'
+'%'
'>'
'>='
'<'
@@ -53,6 +54,7 @@ ADD
SUB
MUL
DIV
+MOD
GT
GE
LT
@@ -101,6 +103,7 @@ ADD
SUB
MUL
DIV
+MOD
GT
GE
LT
@@ -152,4 +155,4 @@ mode names:
DEFAULT_MODE
atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 48, 287, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 8, 3, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 6, 41, 213, 10, 41, 13, 41, 14, 41, 214, 3, 41, 3, 41, 6, 41, 219, 10, 41, 13, 41, 14, 41, 220, 5, 41, 223, 10, 41, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 229, 10, 42, 12, 42, 14, 42, 232, 11, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 7, 42, 239, 10, 42, 12, 42, 14, 42, 242, 11, 42, 3, 42, 5, 42, 245, 10, 42, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 44, 7, 44, 253, 10, 44, 12, 44, 14, 44, 256, 11, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 264, 10, 45, 12, 45, 14, 45, 267, 11, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 7, 46, 276, 10, 46, 12, 46, 14, 46, 279, 11, 46, 3, 47, 6, 47, 282, 10, 47, 13, 47, 14, 47, 283, 3, 47, 3, 47, 3, 265, 2, 48, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 3, 2, 9, 3, 2, 50, 59, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 12, 12, 15, 15, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 298, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 3, 95, 3, 2, 2, 2, 5, 97, 3, 2, 2, 2, 7, 99, 3, 2, 2, 2, 9, 101, 3, 2, 2, 2, 11, 103, 3, 2, 2, 2, 13, 105, 3, 2, 2, 2, 15, 108, 3, 2, 2, 2, 17, 110, 3, 2, 2, 2, 19, 113, 3, 2, 2, 2, 21, 116, 3, 2, 2, 2, 23, 119, 3, 2, 2, 2, 25, 122, 3, 2, 2, 2, 27, 125, 3, 2, 2, 2, 29, 128, 3, 2, 2, 2, 31, 131, 3, 2, 2, 2, 33, 133, 3, 2, 2, 2, 35, 135, 3, 2, 2, 2, 37, 137, 3, 2, 2, 2, 39, 140, 3, 2, 2, 2, 41, 142, 3, 2, 2, 2, 43, 144, 3, 2, 2, 2, 45, 146, 3, 2, 2, 2, 47, 148, 3, 2, 2, 2, 49, 150, 3, 2, 2, 2, 51, 152, 3, 2, 2, 2, 53, 154, 3, 2, 2, 2, 55, 156, 3, 2, 2, 2, 57, 158, 3, 2, 2, 2, 59, 161, 3, 2, 2, 2, 61, 163, 3, 2, 2, 2, 63, 165, 3, 2, 2, 2, 65, 169, 3, 2, 2, 2, 67, 178, 3, 2, 2, 2, 69, 183, 3, 2, 2, 2, 71, 190, 3, 2, 2, 2, 73, 193, 3, 2, 2, 2, 75, 196, 3, 2, 2, 2, 77, 201, 3, 2, 2, 2, 79, 208, 3, 2, 2, 2, 81, 212, 3, 2, 2, 2, 83, 244, 3, 2, 2, 2, 85, 246, 3, 2, 2, 2, 87, 248, 3, 2, 2, 2, 89, 259, 3, 2, 2, 2, 91, 273, 3, 2, 2, 2, 93, 281, 3, 2, 2, 2, 95, 96, 7, 45, 2, 2, 96, 4, 3, 2, 2, 2, 97, 98, 7, 47, 2, 2, 98, 6, 3, 2, 2, 2, 99, 100, 7, 44, 2, 2, 100, 8, 3, 2, 2, 2, 101, 102, 7, 49, 2, 2, 102, 10, 3, 2, 2, 2, 103, 104, 7, 64, 2, 2, 104, 12, 3, 2, 2, 2, 105, 106, 7, 64, 2, 2, 106, 107, 7, 63, 2, 2, 107, 14, 3, 2, 2, 2, 108, 109, 7, 62, 2, 2, 109, 16, 3, 2, 2, 2, 110, 111, 7, 62, 2, 2, 111, 112, 7, 63, 2, 2, 112, 18, 3, 2, 2, 2, 113, 114, 7, 63, 2, 2, 114, 115, 7, 63, 2, 2, 115, 20, 3, 2, 2, 2, 116, 117, 7, 35, 2, 2, 117, 118, 7, 63, 2, 2, 118, 22, 3, 2, 2, 2, 119, 120, 7, 40, 2, 2, 120, 121, 7, 40, 2, 2, 121, 24, 3, 2, 2, 2, 122, 123, 7, 126, 2, 2, 123, 124, 7, 126, 2, 2, 124, 26, 3, 2, 2, 2, 125, 126, 7, 64, 2, 2, 126, 127, 7, 64, 2, 2, 127, 28, 3, 2, 2, 2, 128, 129, 7, 62, 2, 2, 129, 130, 7, 62, 2, 2, 130, 30, 3, 2, 2, 2, 131, 132, 7, 40, 2, 2, 132, 32, 3, 2, 2, 2, 133, 134, 7, 126, 2, 2, 134, 34, 3, 2, 2, 2, 135, 136, 7, 35, 2, 2, 136, 36, 3, 2, 2, 2, 137, 138, 7, 126, 2, 2, 138, 139, 7, 64, 2, 2, 139, 38, 3, 2, 2, 2, 140, 141, 7, 125, 2, 2, 141, 40, 3, 2, 2, 2, 142, 143, 7, 127, 2, 2, 143, 42, 3, 2, 2, 2, 144, 145, 7, 42, 2, 2, 145, 44, 3, 2, 2, 2, 146, 147, 7, 43, 2, 2, 147, 46, 3, 2, 2, 2, 148, 149, 7, 93, 2, 2, 149, 48, 3, 2, 2, 2, 150, 151, 7, 95, 2, 2, 151, 50, 3, 2, 2, 2, 152, 153, 7, 60, 2, 2, 153, 52, 3, 2, 2, 2, 154, 155, 7, 46, 2, 2, 155, 54, 3, 2, 2, 2, 156, 157, 7, 61, 2, 2, 157, 56, 3, 2, 2, 2, 158, 159, 7, 47, 2, 2, 159, 160, 7, 64, 2, 2, 160, 58, 3, 2, 2, 2, 161, 162, 7, 128, 2, 2, 162, 60, 3, 2, 2, 2, 163, 164, 7, 63, 2, 2, 164, 62, 3, 2, 2, 2, 165, 166, 7, 110, 2, 2, 166, 167, 7, 103, 2, 2, 167, 168, 7, 118, 2, 2, 168, 64, 3, 2, 2, 2, 169, 170, 7, 104, 2, 2, 170, 171, 7, 119, 2, 2, 171, 172, 7, 112, 2, 2, 172, 173, 7, 101, 2, 2, 173, 174, 7, 118, 2, 2, 174, 175, 7, 107, 2, 2, 175, 176, 7, 113, 2, 2, 176, 177, 7, 112, 2, 2, 177, 66, 3, 2, 2, 2, 178, 179, 7, 121, 2, 2, 179, 180, 7, 106, 2, 2, 180, 181, 7, 103, 2, 2, 181, 182, 7, 112, 2, 2, 182, 68, 3, 2, 2, 2, 183, 184, 7, 107, 2, 2, 184, 185, 7, 111, 2, 2, 185, 186, 7, 114, 2, 2, 186, 187, 7, 113, 2, 2, 187, 188, 7, 116, 2, 2, 188, 189, 7, 118, 2, 2, 189, 70, 3, 2, 2, 2, 190, 191, 7, 107, 2, 2, 191, 192, 7, 117, 2, 2, 192, 72, 3, 2, 2, 2, 193, 194, 7, 107, 2, 2, 194, 195, 7, 104, 2, 2, 195, 74, 3, 2, 2, 2, 196, 197, 7, 103, 2, 2, 197, 198, 7, 110, 2, 2, 198, 199, 7, 117, 2, 2, 199, 200, 7, 103, 2, 2, 200, 76, 3, 2, 2, 2, 201, 202, 7, 111, 2, 2, 202, 203, 7, 113, 2, 2, 203, 204, 7, 102, 2, 2, 204, 205, 7, 119, 2, 2, 205, 206, 7, 110, 2, 2, 206, 207, 7, 103, 2, 2, 207, 78, 3, 2, 2, 2, 208, 209, 7, 102, 2, 2, 209, 210, 7, 113, 2, 2, 210, 80, 3, 2, 2, 2, 211, 213, 9, 2, 2, 2, 212, 211, 3, 2, 2, 2, 213, 214, 3, 2, 2, 2, 214, 212, 3, 2, 2, 2, 214, 215, 3, 2, 2, 2, 215, 222, 3, 2, 2, 2, 216, 218, 7, 48, 2, 2, 217, 219, 9, 2, 2, 2, 218, 217, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 218, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 223, 3, 2, 2, 2, 222, 216, 3, 2, 2, 2, 222, 223, 3, 2, 2, 2, 223, 82, 3, 2, 2, 2, 224, 230, 7, 36, 2, 2, 225, 229, 10, 3, 2, 2, 226, 227, 7, 94, 2, 2, 227, 229, 11, 2, 2, 2, 228, 225, 3, 2, 2, 2, 228, 226, 3, 2, 2, 2, 229, 232, 3, 2, 2, 2, 230, 228, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 233, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 245, 7, 36, 2, 2, 234, 240, 7, 41, 2, 2, 235, 239, 10, 4, 2, 2, 236, 237, 7, 94, 2, 2, 237, 239, 11, 2, 2, 2, 238, 235, 3, 2, 2, 2, 238, 236, 3, 2, 2, 2, 239, 242, 3, 2, 2, 2, 240, 238, 3, 2, 2, 2, 240, 241, 3, 2, 2, 2, 241, 243, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 245, 7, 41, 2, 2, 244, 224, 3, 2, 2, 2, 244, 234, 3, 2, 2, 2, 245, 84, 3, 2, 2, 2, 246, 247, 7, 48, 2, 2, 247, 86, 3, 2, 2, 2, 248, 249, 7, 49, 2, 2, 249, 250, 7, 49, 2, 2, 250, 254, 3, 2, 2, 2, 251, 253, 10, 5, 2, 2, 252, 251, 3, 2, 2, 2, 253, 256, 3, 2, 2, 2, 254, 252, 3, 2, 2, 2, 254, 255, 3, 2, 2, 2, 255, 257, 3, 2, 2, 2, 256, 254, 3, 2, 2, 2, 257, 258, 8, 44, 2, 2, 258, 88, 3, 2, 2, 2, 259, 260, 7, 49, 2, 2, 260, 261, 7, 44, 2, 2, 261, 265, 3, 2, 2, 2, 262, 264, 11, 2, 2, 2, 263, 262, 3, 2, 2, 2, 264, 267, 3, 2, 2, 2, 265, 266, 3, 2, 2, 2, 265, 263, 3, 2, 2, 2, 266, 268, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 268, 269, 7, 44, 2, 2, 269, 270, 7, 49, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 8, 45, 2, 2, 272, 90, 3, 2, 2, 2, 273, 277, 9, 6, 2, 2, 274, 276, 9, 7, 2, 2, 275, 274, 3, 2, 2, 2, 276, 279, 3, 2, 2, 2, 277, 275, 3, 2, 2, 2, 277, 278, 3, 2, 2, 2, 278, 92, 3, 2, 2, 2, 279, 277, 3, 2, 2, 2, 280, 282, 9, 8, 2, 2, 281, 280, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 283, 284, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 286, 8, 47, 2, 2, 286, 94, 3, 2, 2, 2, 15, 2, 214, 220, 222, 228, 230, 238, 240, 244, 254, 265, 277, 283, 3, 2, 3, 2]
\ No newline at end of file
+[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 49, 291, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 6, 42, 217, 10, 42, 13, 42, 14, 42, 218, 3, 42, 3, 42, 6, 42, 223, 10, 42, 13, 42, 14, 42, 224, 5, 42, 227, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 233, 10, 43, 12, 43, 14, 43, 236, 11, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 243, 10, 43, 12, 43, 14, 43, 246, 11, 43, 3, 43, 5, 43, 249, 10, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 257, 10, 45, 12, 45, 14, 45, 260, 11, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 268, 10, 46, 12, 46, 14, 46, 271, 11, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 280, 10, 47, 12, 47, 14, 47, 283, 11, 47, 3, 48, 6, 48, 286, 10, 48, 13, 48, 14, 48, 287, 3, 48, 3, 48, 3, 269, 2, 49, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 3, 2, 9, 3, 2, 50, 59, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 12, 12, 15, 15, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 302, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 3, 97, 3, 2, 2, 2, 5, 99, 3, 2, 2, 2, 7, 101, 3, 2, 2, 2, 9, 103, 3, 2, 2, 2, 11, 105, 3, 2, 2, 2, 13, 107, 3, 2, 2, 2, 15, 109, 3, 2, 2, 2, 17, 112, 3, 2, 2, 2, 19, 114, 3, 2, 2, 2, 21, 117, 3, 2, 2, 2, 23, 120, 3, 2, 2, 2, 25, 123, 3, 2, 2, 2, 27, 126, 3, 2, 2, 2, 29, 129, 3, 2, 2, 2, 31, 132, 3, 2, 2, 2, 33, 135, 3, 2, 2, 2, 35, 137, 3, 2, 2, 2, 37, 139, 3, 2, 2, 2, 39, 141, 3, 2, 2, 2, 41, 144, 3, 2, 2, 2, 43, 146, 3, 2, 2, 2, 45, 148, 3, 2, 2, 2, 47, 150, 3, 2, 2, 2, 49, 152, 3, 2, 2, 2, 51, 154, 3, 2, 2, 2, 53, 156, 3, 2, 2, 2, 55, 158, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 162, 3, 2, 2, 2, 61, 165, 3, 2, 2, 2, 63, 167, 3, 2, 2, 2, 65, 169, 3, 2, 2, 2, 67, 173, 3, 2, 2, 2, 69, 182, 3, 2, 2, 2, 71, 187, 3, 2, 2, 2, 73, 194, 3, 2, 2, 2, 75, 197, 3, 2, 2, 2, 77, 200, 3, 2, 2, 2, 79, 205, 3, 2, 2, 2, 81, 212, 3, 2, 2, 2, 83, 216, 3, 2, 2, 2, 85, 248, 3, 2, 2, 2, 87, 250, 3, 2, 2, 2, 89, 252, 3, 2, 2, 2, 91, 263, 3, 2, 2, 2, 93, 277, 3, 2, 2, 2, 95, 285, 3, 2, 2, 2, 97, 98, 7, 45, 2, 2, 98, 4, 3, 2, 2, 2, 99, 100, 7, 47, 2, 2, 100, 6, 3, 2, 2, 2, 101, 102, 7, 44, 2, 2, 102, 8, 3, 2, 2, 2, 103, 104, 7, 49, 2, 2, 104, 10, 3, 2, 2, 2, 105, 106, 7, 39, 2, 2, 106, 12, 3, 2, 2, 2, 107, 108, 7, 64, 2, 2, 108, 14, 3, 2, 2, 2, 109, 110, 7, 64, 2, 2, 110, 111, 7, 63, 2, 2, 111, 16, 3, 2, 2, 2, 112, 113, 7, 62, 2, 2, 113, 18, 3, 2, 2, 2, 114, 115, 7, 62, 2, 2, 115, 116, 7, 63, 2, 2, 116, 20, 3, 2, 2, 2, 117, 118, 7, 63, 2, 2, 118, 119, 7, 63, 2, 2, 119, 22, 3, 2, 2, 2, 120, 121, 7, 35, 2, 2, 121, 122, 7, 63, 2, 2, 122, 24, 3, 2, 2, 2, 123, 124, 7, 40, 2, 2, 124, 125, 7, 40, 2, 2, 125, 26, 3, 2, 2, 2, 126, 127, 7, 126, 2, 2, 127, 128, 7, 126, 2, 2, 128, 28, 3, 2, 2, 2, 129, 130, 7, 64, 2, 2, 130, 131, 7, 64, 2, 2, 131, 30, 3, 2, 2, 2, 132, 133, 7, 62, 2, 2, 133, 134, 7, 62, 2, 2, 134, 32, 3, 2, 2, 2, 135, 136, 7, 40, 2, 2, 136, 34, 3, 2, 2, 2, 137, 138, 7, 126, 2, 2, 138, 36, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 38, 3, 2, 2, 2, 141, 142, 7, 126, 2, 2, 142, 143, 7, 64, 2, 2, 143, 40, 3, 2, 2, 2, 144, 145, 7, 125, 2, 2, 145, 42, 3, 2, 2, 2, 146, 147, 7, 127, 2, 2, 147, 44, 3, 2, 2, 2, 148, 149, 7, 42, 2, 2, 149, 46, 3, 2, 2, 2, 150, 151, 7, 43, 2, 2, 151, 48, 3, 2, 2, 2, 152, 153, 7, 93, 2, 2, 153, 50, 3, 2, 2, 2, 154, 155, 7, 95, 2, 2, 155, 52, 3, 2, 2, 2, 156, 157, 7, 60, 2, 2, 157, 54, 3, 2, 2, 2, 158, 159, 7, 46, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 61, 2, 2, 161, 58, 3, 2, 2, 2, 162, 163, 7, 47, 2, 2, 163, 164, 7, 64, 2, 2, 164, 60, 3, 2, 2, 2, 165, 166, 7, 128, 2, 2, 166, 62, 3, 2, 2, 2, 167, 168, 7, 63, 2, 2, 168, 64, 3, 2, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 103, 2, 2, 171, 172, 7, 118, 2, 2, 172, 66, 3, 2, 2, 2, 173, 174, 7, 104, 2, 2, 174, 175, 7, 119, 2, 2, 175, 176, 7, 112, 2, 2, 176, 177, 7, 101, 2, 2, 177, 178, 7, 118, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 113, 2, 2, 180, 181, 7, 112, 2, 2, 181, 68, 3, 2, 2, 2, 182, 183, 7, 121, 2, 2, 183, 184, 7, 106, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 112, 2, 2, 186, 70, 3, 2, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 111, 2, 2, 189, 190, 7, 114, 2, 2, 190, 191, 7, 113, 2, 2, 191, 192, 7, 116, 2, 2, 192, 193, 7, 118, 2, 2, 193, 72, 3, 2, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 117, 2, 2, 196, 74, 3, 2, 2, 2, 197, 198, 7, 107, 2, 2, 198, 199, 7, 104, 2, 2, 199, 76, 3, 2, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 110, 2, 2, 202, 203, 7, 117, 2, 2, 203, 204, 7, 103, 2, 2, 204, 78, 3, 2, 2, 2, 205, 206, 7, 111, 2, 2, 206, 207, 7, 113, 2, 2, 207, 208, 7, 102, 2, 2, 208, 209, 7, 119, 2, 2, 209, 210, 7, 110, 2, 2, 210, 211, 7, 103, 2, 2, 211, 80, 3, 2, 2, 2, 212, 213, 7, 102, 2, 2, 213, 214, 7, 113, 2, 2, 214, 82, 3, 2, 2, 2, 215, 217, 9, 2, 2, 2, 216, 215, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 226, 3, 2, 2, 2, 220, 222, 7, 48, 2, 2, 221, 223, 9, 2, 2, 2, 222, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 227, 3, 2, 2, 2, 226, 220, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 84, 3, 2, 2, 2, 228, 234, 7, 36, 2, 2, 229, 233, 10, 3, 2, 2, 230, 231, 7, 94, 2, 2, 231, 233, 11, 2, 2, 2, 232, 229, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 237, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 237, 249, 7, 36, 2, 2, 238, 244, 7, 41, 2, 2, 239, 243, 10, 4, 2, 2, 240, 241, 7, 94, 2, 2, 241, 243, 11, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 247, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 249, 7, 41, 2, 2, 248, 228, 3, 2, 2, 2, 248, 238, 3, 2, 2, 2, 249, 86, 3, 2, 2, 2, 250, 251, 7, 48, 2, 2, 251, 88, 3, 2, 2, 2, 252, 253, 7, 49, 2, 2, 253, 254, 7, 49, 2, 2, 254, 258, 3, 2, 2, 2, 255, 257, 10, 5, 2, 2, 256, 255, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 261, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 8, 45, 2, 2, 262, 90, 3, 2, 2, 2, 263, 264, 7, 49, 2, 2, 264, 265, 7, 44, 2, 2, 265, 269, 3, 2, 2, 2, 266, 268, 11, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 272, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 7, 49, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 8, 46, 2, 2, 276, 92, 3, 2, 2, 2, 277, 281, 9, 6, 2, 2, 278, 280, 9, 7, 2, 2, 279, 278, 3, 2, 2, 2, 280, 283, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 94, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 9, 8, 2, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 290, 8, 48, 2, 2, 290, 96, 3, 2, 2, 2, 15, 2, 218, 224, 226, 232, 234, 242, 244, 248, 258, 269, 281, 287, 3, 2, 3, 2]
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
index 48375d4..dbd824d 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
@@ -19,12 +19,12 @@ public class PiccodeScriptLexer extends Lexer {
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
- ADD=1, SUB=2, MUL=3, DIV=4, GT=5, GE=6, LT=7, LE=8, EQ=9, NE=10, AND=11,
- OR=12, SHL=13, SHR=14, BAND=15, BOR=16, EXCLAIM=17, PIPE=18, LBRACE=19,
- RBRACE=20, LPAREN=21, RPAREN=22, LBRACKET=23, RBRACKET=24, COLON=25, COMMA=26,
- SEMI=27, ARROW=28, TILDE=29, ASSIGN=30, LET=31, FUNCTION=32, WHEN=33,
- IMPORT=34, IS=35, IF=36, ELSE=37, MODULE=38, DO=39, NUMBER=40, STRING=41,
- DOT=42, LINE_COMMENT=43, BLOCK_COMMENT=44, ID=45, WS=46;
+ ADD=1, SUB=2, MUL=3, DIV=4, MOD=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
+ AND=12, OR=13, SHL=14, SHR=15, BAND=16, BOR=17, EXCLAIM=18, PIPE=19, LBRACE=20,
+ RBRACE=21, LPAREN=22, RPAREN=23, LBRACKET=24, RBRACKET=25, COLON=26, COMMA=27,
+ SEMI=28, ARROW=29, TILDE=30, ASSIGN=31, LET=32, FUNCTION=33, WHEN=34,
+ IMPORT=35, IS=36, IF=37, ELSE=38, MODULE=39, DO=40, NUMBER=41, STRING=42,
+ DOT=43, LINE_COMMENT=44, BLOCK_COMMENT=45, ID=46, WS=47;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -35,11 +35,11 @@ public class PiccodeScriptLexer extends Lexer {
private static String[] makeRuleNames() {
return new String[] {
- "ADD", "SUB", "MUL", "DIV", "GT", "GE", "LT", "LE", "EQ", "NE", "AND",
- "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE", "RBRACE",
- "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA", "SEMI",
- "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT", "IS",
- "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
+ "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ", "NE",
+ "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
+ "RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
+ "SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
+ "IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
"BLOCK_COMMENT", "ID", "WS"
};
}
@@ -47,18 +47,18 @@ private static String[] makeRuleNames() {
private static String[] makeLiteralNames() {
return new String[] {
- null, "'+'", "'-'", "'*'", "'/'", "'>'", "'>='", "'<'", "'<='", "'=='",
- "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'", "'|>'",
- "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'", "'->'",
- "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'", "'if'",
- "'else'", "'module'", "'do'", null, null, "'.'"
+ null, "'+'", "'-'", "'*'", "'/'", "'%'", "'>'", "'>='", "'<'", "'<='",
+ "'=='", "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'",
+ "'|>'", "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'",
+ "'->'", "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'",
+ "'if'", "'else'", "'module'", "'do'", null, null, "'.'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
- null, "ADD", "SUB", "MUL", "DIV", "GT", "GE", "LT", "LE", "EQ", "NE",
- "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
+ null, "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ",
+ "NE", "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
"RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
"SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
"IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
@@ -124,97 +124,99 @@ public PiccodeScriptLexer(CharStream input) {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\60\u011f\b\1\4\2"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\61\u0123\b\1\4\2"+
"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
"\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+
" \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+
- "+\4,\t,\4-\t-\4.\t.\4/\t/\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\6\3\6\3\7"+
- "\3\7\3\7\3\b\3\b\3\t\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\3\f\3"+
- "\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\21\3\21\3\22\3\22"+
- "\3\23\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30\3\30\3\31"+
- "\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\35\3\36\3\36\3\37\3\37"+
- "\3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3"+
- "#\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3"+
- "\'\3(\3(\3(\3)\6)\u00d5\n)\r)\16)\u00d6\3)\3)\6)\u00db\n)\r)\16)\u00dc"+
- "\5)\u00df\n)\3*\3*\3*\3*\7*\u00e5\n*\f*\16*\u00e8\13*\3*\3*\3*\3*\3*\7"+
- "*\u00ef\n*\f*\16*\u00f2\13*\3*\5*\u00f5\n*\3+\3+\3,\3,\3,\3,\7,\u00fd"+
- "\n,\f,\16,\u0100\13,\3,\3,\3-\3-\3-\3-\7-\u0108\n-\f-\16-\u010b\13-\3"+
- "-\3-\3-\3-\3-\3.\3.\7.\u0114\n.\f.\16.\u0117\13.\3/\6/\u011a\n/\r/\16"+
- "/\u011b\3/\3/\3\u0109\2\60\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25"+
- "\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32"+
- "\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60\3\2\t"+
- "\3\2\62;\4\2$$^^\4\2))^^\4\2\f\f\17\17\5\2C\\aac|\6\2\62;C\\aac|\5\2\13"+
- "\f\17\17\"\"\2\u012a\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2"+
- "\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3"+
- "\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2"+
- "\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2"+
- "\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2"+
- "\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2"+
- "\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q"+
- "\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2"+
- "\2\2\3_\3\2\2\2\5a\3\2\2\2\7c\3\2\2\2\te\3\2\2\2\13g\3\2\2\2\ri\3\2\2"+
- "\2\17l\3\2\2\2\21n\3\2\2\2\23q\3\2\2\2\25t\3\2\2\2\27w\3\2\2\2\31z\3\2"+
- "\2\2\33}\3\2\2\2\35\u0080\3\2\2\2\37\u0083\3\2\2\2!\u0085\3\2\2\2#\u0087"+
- "\3\2\2\2%\u0089\3\2\2\2\'\u008c\3\2\2\2)\u008e\3\2\2\2+\u0090\3\2\2\2"+
- "-\u0092\3\2\2\2/\u0094\3\2\2\2\61\u0096\3\2\2\2\63\u0098\3\2\2\2\65\u009a"+
- "\3\2\2\2\67\u009c\3\2\2\29\u009e\3\2\2\2;\u00a1\3\2\2\2=\u00a3\3\2\2\2"+
- "?\u00a5\3\2\2\2A\u00a9\3\2\2\2C\u00b2\3\2\2\2E\u00b7\3\2\2\2G\u00be\3"+
- "\2\2\2I\u00c1\3\2\2\2K\u00c4\3\2\2\2M\u00c9\3\2\2\2O\u00d0\3\2\2\2Q\u00d4"+
- "\3\2\2\2S\u00f4\3\2\2\2U\u00f6\3\2\2\2W\u00f8\3\2\2\2Y\u0103\3\2\2\2["+
- "\u0111\3\2\2\2]\u0119\3\2\2\2_`\7-\2\2`\4\3\2\2\2ab\7/\2\2b\6\3\2\2\2"+
- "cd\7,\2\2d\b\3\2\2\2ef\7\61\2\2f\n\3\2\2\2gh\7@\2\2h\f\3\2\2\2ij\7@\2"+
- "\2jk\7?\2\2k\16\3\2\2\2lm\7>\2\2m\20\3\2\2\2no\7>\2\2op\7?\2\2p\22\3\2"+
- "\2\2qr\7?\2\2rs\7?\2\2s\24\3\2\2\2tu\7#\2\2uv\7?\2\2v\26\3\2\2\2wx\7("+
- "\2\2xy\7(\2\2y\30\3\2\2\2z{\7~\2\2{|\7~\2\2|\32\3\2\2\2}~\7@\2\2~\177"+
- "\7@\2\2\177\34\3\2\2\2\u0080\u0081\7>\2\2\u0081\u0082\7>\2\2\u0082\36"+
- "\3\2\2\2\u0083\u0084\7(\2\2\u0084 \3\2\2\2\u0085\u0086\7~\2\2\u0086\""+
- "\3\2\2\2\u0087\u0088\7#\2\2\u0088$\3\2\2\2\u0089\u008a\7~\2\2\u008a\u008b"+
- "\7@\2\2\u008b&\3\2\2\2\u008c\u008d\7}\2\2\u008d(\3\2\2\2\u008e\u008f\7"+
- "\177\2\2\u008f*\3\2\2\2\u0090\u0091\7*\2\2\u0091,\3\2\2\2\u0092\u0093"+
- "\7+\2\2\u0093.\3\2\2\2\u0094\u0095\7]\2\2\u0095\60\3\2\2\2\u0096\u0097"+
- "\7_\2\2\u0097\62\3\2\2\2\u0098\u0099\7<\2\2\u0099\64\3\2\2\2\u009a\u009b"+
- "\7.\2\2\u009b\66\3\2\2\2\u009c\u009d\7=\2\2\u009d8\3\2\2\2\u009e\u009f"+
- "\7/\2\2\u009f\u00a0\7@\2\2\u00a0:\3\2\2\2\u00a1\u00a2\7\u0080\2\2\u00a2"+
- "<\3\2\2\2\u00a3\u00a4\7?\2\2\u00a4>\3\2\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7"+
- "\7g\2\2\u00a7\u00a8\7v\2\2\u00a8@\3\2\2\2\u00a9\u00aa\7h\2\2\u00aa\u00ab"+
- "\7w\2\2\u00ab\u00ac\7p\2\2\u00ac\u00ad\7e\2\2\u00ad\u00ae\7v\2\2\u00ae"+
- "\u00af\7k\2\2\u00af\u00b0\7q\2\2\u00b0\u00b1\7p\2\2\u00b1B\3\2\2\2\u00b2"+
- "\u00b3\7y\2\2\u00b3\u00b4\7j\2\2\u00b4\u00b5\7g\2\2\u00b5\u00b6\7p\2\2"+
- "\u00b6D\3\2\2\2\u00b7\u00b8\7k\2\2\u00b8\u00b9\7o\2\2\u00b9\u00ba\7r\2"+
- "\2\u00ba\u00bb\7q\2\2\u00bb\u00bc\7t\2\2\u00bc\u00bd\7v\2\2\u00bdF\3\2"+
- "\2\2\u00be\u00bf\7k\2\2\u00bf\u00c0\7u\2\2\u00c0H\3\2\2\2\u00c1\u00c2"+
- "\7k\2\2\u00c2\u00c3\7h\2\2\u00c3J\3\2\2\2\u00c4\u00c5\7g\2\2\u00c5\u00c6"+
- "\7n\2\2\u00c6\u00c7\7u\2\2\u00c7\u00c8\7g\2\2\u00c8L\3\2\2\2\u00c9\u00ca"+
- "\7o\2\2\u00ca\u00cb\7q\2\2\u00cb\u00cc\7f\2\2\u00cc\u00cd\7w\2\2\u00cd"+
- "\u00ce\7n\2\2\u00ce\u00cf\7g\2\2\u00cfN\3\2\2\2\u00d0\u00d1\7f\2\2\u00d1"+
- "\u00d2\7q\2\2\u00d2P\3\2\2\2\u00d3\u00d5\t\2\2\2\u00d4\u00d3\3\2\2\2\u00d5"+
- "\u00d6\3\2\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00de\3\2"+
- "\2\2\u00d8\u00da\7\60\2\2\u00d9\u00db\t\2\2\2\u00da\u00d9\3\2\2\2\u00db"+
- "\u00dc\3\2\2\2\u00dc\u00da\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00df\3\2"+
- "\2\2\u00de\u00d8\3\2\2\2\u00de\u00df\3\2\2\2\u00dfR\3\2\2\2\u00e0\u00e6"+
- "\7$\2\2\u00e1\u00e5\n\3\2\2\u00e2\u00e3\7^\2\2\u00e3\u00e5\13\2\2\2\u00e4"+
- "\u00e1\3\2\2\2\u00e4\u00e2\3\2\2\2\u00e5\u00e8\3\2\2\2\u00e6\u00e4\3\2"+
- "\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e9\3\2\2\2\u00e8\u00e6\3\2\2\2\u00e9"+
- "\u00f5\7$\2\2\u00ea\u00f0\7)\2\2\u00eb\u00ef\n\4\2\2\u00ec\u00ed\7^\2"+
- "\2\u00ed\u00ef\13\2\2\2\u00ee\u00eb\3\2\2\2\u00ee\u00ec\3\2\2\2\u00ef"+
- "\u00f2\3\2\2\2\u00f0\u00ee\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1\u00f3\3\2"+
- "\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f5\7)\2\2\u00f4\u00e0\3\2\2\2\u00f4"+
- "\u00ea\3\2\2\2\u00f5T\3\2\2\2\u00f6\u00f7\7\60\2\2\u00f7V\3\2\2\2\u00f8"+
- "\u00f9\7\61\2\2\u00f9\u00fa\7\61\2\2\u00fa\u00fe\3\2\2\2\u00fb\u00fd\n"+
- "\5\2\2\u00fc\u00fb\3\2\2\2\u00fd\u0100\3\2\2\2\u00fe\u00fc\3\2\2\2\u00fe"+
- "\u00ff\3\2\2\2\u00ff\u0101\3\2\2\2\u0100\u00fe\3\2\2\2\u0101\u0102\b,"+
- "\2\2\u0102X\3\2\2\2\u0103\u0104\7\61\2\2\u0104\u0105\7,\2\2\u0105\u0109"+
- "\3\2\2\2\u0106\u0108\13\2\2\2\u0107\u0106\3\2\2\2\u0108\u010b\3\2\2\2"+
- "\u0109\u010a\3\2\2\2\u0109\u0107\3\2\2\2\u010a\u010c\3\2\2\2\u010b\u0109"+
- "\3\2\2\2\u010c\u010d\7,\2\2\u010d\u010e\7\61\2\2\u010e\u010f\3\2\2\2\u010f"+
- "\u0110\b-\2\2\u0110Z\3\2\2\2\u0111\u0115\t\6\2\2\u0112\u0114\t\7\2\2\u0113"+
- "\u0112\3\2\2\2\u0114\u0117\3\2\2\2\u0115\u0113\3\2\2\2\u0115\u0116\3\2"+
- "\2\2\u0116\\\3\2\2\2\u0117\u0115\3\2\2\2\u0118\u011a\t\b\2\2\u0119\u0118"+
- "\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u0119\3\2\2\2\u011b\u011c\3\2\2\2\u011c"+
- "\u011d\3\2\2\2\u011d\u011e\b/\2\2\u011e^\3\2\2\2\17\2\u00d6\u00dc\u00de"+
- "\u00e4\u00e6\u00ee\u00f0\u00f4\u00fe\u0109\u0115\u011b\3\2\3\2";
+ "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+
+ "\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f"+
+ "\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20\3\21\3\21"+
+ "\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30"+
+ "\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36"+
+ "\3\37\3\37\3 \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3"+
+ "#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3\'\3\'\3\'\3\'\3\'"+
+ "\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3*\6*\u00d9\n*\r*\16*\u00da\3*\3*\6*\u00df"+
+ "\n*\r*\16*\u00e0\5*\u00e3\n*\3+\3+\3+\3+\7+\u00e9\n+\f+\16+\u00ec\13+"+
+ "\3+\3+\3+\3+\3+\7+\u00f3\n+\f+\16+\u00f6\13+\3+\5+\u00f9\n+\3,\3,\3-\3"+
+ "-\3-\3-\7-\u0101\n-\f-\16-\u0104\13-\3-\3-\3.\3.\3.\3.\7.\u010c\n.\f."+
+ "\16.\u010f\13.\3.\3.\3.\3.\3.\3/\3/\7/\u0118\n/\f/\16/\u011b\13/\3\60"+
+ "\6\60\u011e\n\60\r\60\16\60\u011f\3\60\3\60\3\u010d\2\61\3\3\5\4\7\5\t"+
+ "\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23"+
+ "%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
+ "%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61\3\2\t\3\2\62;\4\2$$^^\4\2))^^\4\2\f\f\17"+
+ "\17\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17\"\"\2\u012e\2\3\3\2\2\2\2"+
+ "\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2"+
+ "\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2"+
+ "\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2"+
+ "\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2"+
+ "\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2"+
+ "\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2"+
+ "K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3"+
+ "\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\3a\3\2\2\2\5c\3\2\2"+
+ "\2\7e\3\2\2\2\tg\3\2\2\2\13i\3\2\2\2\rk\3\2\2\2\17m\3\2\2\2\21p\3\2\2"+
+ "\2\23r\3\2\2\2\25u\3\2\2\2\27x\3\2\2\2\31{\3\2\2\2\33~\3\2\2\2\35\u0081"+
+ "\3\2\2\2\37\u0084\3\2\2\2!\u0087\3\2\2\2#\u0089\3\2\2\2%\u008b\3\2\2\2"+
+ "\'\u008d\3\2\2\2)\u0090\3\2\2\2+\u0092\3\2\2\2-\u0094\3\2\2\2/\u0096\3"+
+ "\2\2\2\61\u0098\3\2\2\2\63\u009a\3\2\2\2\65\u009c\3\2\2\2\67\u009e\3\2"+
+ "\2\29\u00a0\3\2\2\2;\u00a2\3\2\2\2=\u00a5\3\2\2\2?\u00a7\3\2\2\2A\u00a9"+
+ "\3\2\2\2C\u00ad\3\2\2\2E\u00b6\3\2\2\2G\u00bb\3\2\2\2I\u00c2\3\2\2\2K"+
+ "\u00c5\3\2\2\2M\u00c8\3\2\2\2O\u00cd\3\2\2\2Q\u00d4\3\2\2\2S\u00d8\3\2"+
+ "\2\2U\u00f8\3\2\2\2W\u00fa\3\2\2\2Y\u00fc\3\2\2\2[\u0107\3\2\2\2]\u0115"+
+ "\3\2\2\2_\u011d\3\2\2\2ab\7-\2\2b\4\3\2\2\2cd\7/\2\2d\6\3\2\2\2ef\7,\2"+
+ "\2f\b\3\2\2\2gh\7\61\2\2h\n\3\2\2\2ij\7\'\2\2j\f\3\2\2\2kl\7@\2\2l\16"+
+ "\3\2\2\2mn\7@\2\2no\7?\2\2o\20\3\2\2\2pq\7>\2\2q\22\3\2\2\2rs\7>\2\2s"+
+ "t\7?\2\2t\24\3\2\2\2uv\7?\2\2vw\7?\2\2w\26\3\2\2\2xy\7#\2\2yz\7?\2\2z"+
+ "\30\3\2\2\2{|\7(\2\2|}\7(\2\2}\32\3\2\2\2~\177\7~\2\2\177\u0080\7~\2\2"+
+ "\u0080\34\3\2\2\2\u0081\u0082\7@\2\2\u0082\u0083\7@\2\2\u0083\36\3\2\2"+
+ "\2\u0084\u0085\7>\2\2\u0085\u0086\7>\2\2\u0086 \3\2\2\2\u0087\u0088\7"+
+ "(\2\2\u0088\"\3\2\2\2\u0089\u008a\7~\2\2\u008a$\3\2\2\2\u008b\u008c\7"+
+ "#\2\2\u008c&\3\2\2\2\u008d\u008e\7~\2\2\u008e\u008f\7@\2\2\u008f(\3\2"+
+ "\2\2\u0090\u0091\7}\2\2\u0091*\3\2\2\2\u0092\u0093\7\177\2\2\u0093,\3"+
+ "\2\2\2\u0094\u0095\7*\2\2\u0095.\3\2\2\2\u0096\u0097\7+\2\2\u0097\60\3"+
+ "\2\2\2\u0098\u0099\7]\2\2\u0099\62\3\2\2\2\u009a\u009b\7_\2\2\u009b\64"+
+ "\3\2\2\2\u009c\u009d\7<\2\2\u009d\66\3\2\2\2\u009e\u009f\7.\2\2\u009f"+
+ "8\3\2\2\2\u00a0\u00a1\7=\2\2\u00a1:\3\2\2\2\u00a2\u00a3\7/\2\2\u00a3\u00a4"+
+ "\7@\2\2\u00a4<\3\2\2\2\u00a5\u00a6\7\u0080\2\2\u00a6>\3\2\2\2\u00a7\u00a8"+
+ "\7?\2\2\u00a8@\3\2\2\2\u00a9\u00aa\7n\2\2\u00aa\u00ab\7g\2\2\u00ab\u00ac"+
+ "\7v\2\2\u00acB\3\2\2\2\u00ad\u00ae\7h\2\2\u00ae\u00af\7w\2\2\u00af\u00b0"+
+ "\7p\2\2\u00b0\u00b1\7e\2\2\u00b1\u00b2\7v\2\2\u00b2\u00b3\7k\2\2\u00b3"+
+ "\u00b4\7q\2\2\u00b4\u00b5\7p\2\2\u00b5D\3\2\2\2\u00b6\u00b7\7y\2\2\u00b7"+
+ "\u00b8\7j\2\2\u00b8\u00b9\7g\2\2\u00b9\u00ba\7p\2\2\u00baF\3\2\2\2\u00bb"+
+ "\u00bc\7k\2\2\u00bc\u00bd\7o\2\2\u00bd\u00be\7r\2\2\u00be\u00bf\7q\2\2"+
+ "\u00bf\u00c0\7t\2\2\u00c0\u00c1\7v\2\2\u00c1H\3\2\2\2\u00c2\u00c3\7k\2"+
+ "\2\u00c3\u00c4\7u\2\2\u00c4J\3\2\2\2\u00c5\u00c6\7k\2\2\u00c6\u00c7\7"+
+ "h\2\2\u00c7L\3\2\2\2\u00c8\u00c9\7g\2\2\u00c9\u00ca\7n\2\2\u00ca\u00cb"+
+ "\7u\2\2\u00cb\u00cc\7g\2\2\u00ccN\3\2\2\2\u00cd\u00ce\7o\2\2\u00ce\u00cf"+
+ "\7q\2\2\u00cf\u00d0\7f\2\2\u00d0\u00d1\7w\2\2\u00d1\u00d2\7n\2\2\u00d2"+
+ "\u00d3\7g\2\2\u00d3P\3\2\2\2\u00d4\u00d5\7f\2\2\u00d5\u00d6\7q\2\2\u00d6"+
+ "R\3\2\2\2\u00d7\u00d9\t\2\2\2\u00d8\u00d7\3\2\2\2\u00d9\u00da\3\2\2\2"+
+ "\u00da\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00e2\3\2\2\2\u00dc\u00de"+
+ "\7\60\2\2\u00dd\u00df\t\2\2\2\u00de\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2"+
+ "\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e3\3\2\2\2\u00e2\u00dc"+
+ "\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3T\3\2\2\2\u00e4\u00ea\7$\2\2\u00e5\u00e9"+
+ "\n\3\2\2\u00e6\u00e7\7^\2\2\u00e7\u00e9\13\2\2\2\u00e8\u00e5\3\2\2\2\u00e8"+
+ "\u00e6\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00ea\u00eb\3\2"+
+ "\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00f9\7$\2\2\u00ee"+
+ "\u00f4\7)\2\2\u00ef\u00f3\n\4\2\2\u00f0\u00f1\7^\2\2\u00f1\u00f3\13\2"+
+ "\2\2\u00f2\u00ef\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4"+
+ "\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f7\3\2\2\2\u00f6\u00f4\3\2"+
+ "\2\2\u00f7\u00f9\7)\2\2\u00f8\u00e4\3\2\2\2\u00f8\u00ee\3\2\2\2\u00f9"+
+ "V\3\2\2\2\u00fa\u00fb\7\60\2\2\u00fbX\3\2\2\2\u00fc\u00fd\7\61\2\2\u00fd"+
+ "\u00fe\7\61\2\2\u00fe\u0102\3\2\2\2\u00ff\u0101\n\5\2\2\u0100\u00ff\3"+
+ "\2\2\2\u0101\u0104\3\2\2\2\u0102\u0100\3\2\2\2\u0102\u0103\3\2\2\2\u0103"+
+ "\u0105\3\2\2\2\u0104\u0102\3\2\2\2\u0105\u0106\b-\2\2\u0106Z\3\2\2\2\u0107"+
+ "\u0108\7\61\2\2\u0108\u0109\7,\2\2\u0109\u010d\3\2\2\2\u010a\u010c\13"+
+ "\2\2\2\u010b\u010a\3\2\2\2\u010c\u010f\3\2\2\2\u010d\u010e\3\2\2\2\u010d"+
+ "\u010b\3\2\2\2\u010e\u0110\3\2\2\2\u010f\u010d\3\2\2\2\u0110\u0111\7,"+
+ "\2\2\u0111\u0112\7\61\2\2\u0112\u0113\3\2\2\2\u0113\u0114\b.\2\2\u0114"+
+ "\\\3\2\2\2\u0115\u0119\t\6\2\2\u0116\u0118\t\7\2\2\u0117\u0116\3\2\2\2"+
+ "\u0118\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a^\3"+
+ "\2\2\2\u011b\u0119\3\2\2\2\u011c\u011e\t\b\2\2\u011d\u011c\3\2\2\2\u011e"+
+ "\u011f\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0121\3\2"+
+ "\2\2\u0121\u0122\b\60\2\2\u0122`\3\2\2\2\17\2\u00da\u00e0\u00e2\u00e8"+
+ "\u00ea\u00f2\u00f4\u00f8\u0102\u010d\u0119\u011f\3\2\3\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
index ba250bc..ff4e9fd 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
@@ -2,85 +2,87 @@ ADD=1
SUB=2
MUL=3
DIV=4
-GT=5
-GE=6
-LT=7
-LE=8
-EQ=9
-NE=10
-AND=11
-OR=12
-SHL=13
-SHR=14
-BAND=15
-BOR=16
-EXCLAIM=17
-PIPE=18
-LBRACE=19
-RBRACE=20
-LPAREN=21
-RPAREN=22
-LBRACKET=23
-RBRACKET=24
-COLON=25
-COMMA=26
-SEMI=27
-ARROW=28
-TILDE=29
-ASSIGN=30
-LET=31
-FUNCTION=32
-WHEN=33
-IMPORT=34
-IS=35
-IF=36
-ELSE=37
-MODULE=38
-DO=39
-NUMBER=40
-STRING=41
-DOT=42
-LINE_COMMENT=43
-BLOCK_COMMENT=44
-ID=45
-WS=46
+MOD=5
+GT=6
+GE=7
+LT=8
+LE=9
+EQ=10
+NE=11
+AND=12
+OR=13
+SHL=14
+SHR=15
+BAND=16
+BOR=17
+EXCLAIM=18
+PIPE=19
+LBRACE=20
+RBRACE=21
+LPAREN=22
+RPAREN=23
+LBRACKET=24
+RBRACKET=25
+COLON=26
+COMMA=27
+SEMI=28
+ARROW=29
+TILDE=30
+ASSIGN=31
+LET=32
+FUNCTION=33
+WHEN=34
+IMPORT=35
+IS=36
+IF=37
+ELSE=38
+MODULE=39
+DO=40
+NUMBER=41
+STRING=42
+DOT=43
+LINE_COMMENT=44
+BLOCK_COMMENT=45
+ID=46
+WS=47
'+'=1
'-'=2
'*'=3
'/'=4
-'>'=5
-'>='=6
-'<'=7
-'<='=8
-'=='=9
-'!='=10
-'&&'=11
-'||'=12
-'>>'=13
-'<<'=14
-'&'=15
-'|'=16
-'!'=17
-'|>'=18
-'{'=19
-'}'=20
-'('=21
-')'=22
-'['=23
-']'=24
-':'=25
-','=26
-';'=27
-'->'=28
-'~'=29
-'='=30
-'let'=31
-'function'=32
-'when'=33
-'import'=34
-'is'=35
-'if'=36
-'else'=37
-'module'=38
-'do'=39
-'.'=42
+'%'=5
+'>'=6
+'>='=7
+'<'=8
+'<='=9
+'=='=10
+'!='=11
+'&&'=12
+'||'=13
+'>>'=14
+'<<'=15
+'&'=16
+'|'=17
+'!'=18
+'|>'=19
+'{'=20
+'}'=21
+'('=22
+')'=23
+'['=24
+']'=25
+':'=26
+','=27
+';'=28
+'->'=29
+'~'=30
+'='=31
+'let'=32
+'function'=33
+'when'=34
+'import'=35
+'is'=36
+'if'=37
+'else'=38
+'module'=39
+'do'=40
+'.'=43
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java b/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
index 286da57..533ef10 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
@@ -139,6 +139,16 @@ public interface PiccodeScriptListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitExpr(PiccodeScriptParser.ExprContext ctx);
+ /**
+ * Enter a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
+ * @param ctx the parse tree
+ */
+ void enterClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
+ /**
+ * Exit a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
+ * @param ctx the parse tree
+ */
+ void exitClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
/**
* Enter a parse tree produced by {@link PiccodeScriptParser#unary}.
* @param ctx the parse tree
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java b/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
index 4bb5ae5..afe3e77 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
@@ -19,46 +19,46 @@ public class PiccodeScriptParser extends Parser {
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
- ADD=1, SUB=2, MUL=3, DIV=4, GT=5, GE=6, LT=7, LE=8, EQ=9, NE=10, AND=11,
- OR=12, SHL=13, SHR=14, BAND=15, BOR=16, EXCLAIM=17, PIPE=18, LBRACE=19,
- RBRACE=20, LPAREN=21, RPAREN=22, LBRACKET=23, RBRACKET=24, COLON=25, COMMA=26,
- SEMI=27, ARROW=28, TILDE=29, ASSIGN=30, LET=31, FUNCTION=32, WHEN=33,
- IMPORT=34, IS=35, IF=36, ELSE=37, MODULE=38, DO=39, NUMBER=40, STRING=41,
- DOT=42, LINE_COMMENT=43, BLOCK_COMMENT=44, ID=45, WS=46;
+ ADD=1, SUB=2, MUL=3, DIV=4, MOD=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
+ AND=12, OR=13, SHL=14, SHR=15, BAND=16, BOR=17, EXCLAIM=18, PIPE=19, LBRACE=20,
+ RBRACE=21, LPAREN=22, RPAREN=23, LBRACKET=24, RBRACKET=25, COLON=26, COMMA=27,
+ SEMI=28, ARROW=29, TILDE=30, ASSIGN=31, LET=32, FUNCTION=33, WHEN=34,
+ IMPORT=35, IS=36, IF=37, ELSE=38, MODULE=39, DO=40, NUMBER=41, STRING=42,
+ DOT=43, LINE_COMMENT=44, BLOCK_COMMENT=45, ID=46, WS=47;
public static final int
RULE_stmts = 0, RULE_stmt = 1, RULE_import_module = 2, RULE_module = 3,
RULE_module_stmts = 4, RULE_module_stmt = 5, RULE_func = 6, RULE_func_args = 7,
RULE_arg_list = 8, RULE_arg = 9, RULE_literal_expr = 10, RULE_expr_stmt = 11,
- RULE_expr = 12, RULE_unary = 13, RULE_if_expr = 14, RULE_when_expr = 15,
- RULE_when_cases = 16, RULE_when_case = 17, RULE_else_case = 18, RULE_var_decl = 19,
- RULE_tuple = 20, RULE_array = 21, RULE_object = 22, RULE_expr_list = 23,
- RULE_call_expr_list = 24, RULE_call_expr = 25, RULE_key_val_pair = 26,
- RULE_key_val_pairs = 27, RULE_do_expr = 28;
+ RULE_expr = 12, RULE_closure_decl = 13, RULE_unary = 14, RULE_if_expr = 15,
+ RULE_when_expr = 16, RULE_when_cases = 17, RULE_when_case = 18, RULE_else_case = 19,
+ RULE_var_decl = 20, RULE_tuple = 21, RULE_array = 22, RULE_object = 23,
+ RULE_expr_list = 24, RULE_call_expr_list = 25, RULE_call_expr = 26, RULE_key_val_pair = 27,
+ RULE_key_val_pairs = 28, RULE_do_expr = 29;
private static String[] makeRuleNames() {
return new String[] {
"stmts", "stmt", "import_module", "module", "module_stmts", "module_stmt",
"func", "func_args", "arg_list", "arg", "literal_expr", "expr_stmt",
- "expr", "unary", "if_expr", "when_expr", "when_cases", "when_case", "else_case",
- "var_decl", "tuple", "array", "object", "expr_list", "call_expr_list",
- "call_expr", "key_val_pair", "key_val_pairs", "do_expr"
+ "expr", "closure_decl", "unary", "if_expr", "when_expr", "when_cases",
+ "when_case", "else_case", "var_decl", "tuple", "array", "object", "expr_list",
+ "call_expr_list", "call_expr", "key_val_pair", "key_val_pairs", "do_expr"
};
}
public static final String[] ruleNames = makeRuleNames();
private static String[] makeLiteralNames() {
return new String[] {
- null, "'+'", "'-'", "'*'", "'/'", "'>'", "'>='", "'<'", "'<='", "'=='",
- "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'", "'|>'",
- "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'", "'->'",
- "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'", "'if'",
- "'else'", "'module'", "'do'", null, null, "'.'"
+ null, "'+'", "'-'", "'*'", "'/'", "'%'", "'>'", "'>='", "'<'", "'<='",
+ "'=='", "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'",
+ "'|>'", "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'",
+ "'->'", "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'",
+ "'if'", "'else'", "'module'", "'do'", null, null, "'.'"
};
}
private static final String[] _LITERAL_NAMES = makeLiteralNames();
private static String[] makeSymbolicNames() {
return new String[] {
- null, "ADD", "SUB", "MUL", "DIV", "GT", "GE", "LT", "LE", "EQ", "NE",
- "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
+ null, "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ",
+ "NE", "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
"RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
"SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
"IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
@@ -148,23 +148,23 @@ public final StmtsContext stmts() throws RecognitionException {
enterRule(_localctx, 0, RULE_stmts);
int _la;
try {
- setState(65);
+ setState(67);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(61);
+ setState(63);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << FUNCTION) | (1L << WHEN) | (1L << IMPORT) | (1L << IF) | (1L << MODULE) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << FUNCTION) | (1L << WHEN) | (1L << IMPORT) | (1L << IF) | (1L << MODULE) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
{
{
- setState(58);
+ setState(60);
stmt();
}
}
- setState(63);
+ setState(65);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -173,7 +173,7 @@ public final StmtsContext stmts() throws RecognitionException {
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(64);
+ setState(66);
match(EOF);
}
break;
@@ -226,32 +226,33 @@ public final StmtContext stmt() throws RecognitionException {
StmtContext _localctx = new StmtContext(_ctx, getState());
enterRule(_localctx, 2, RULE_stmt);
try {
- setState(71);
+ setState(73);
_errHandler.sync(this);
switch (_input.LA(1)) {
case IMPORT:
enterOuterAlt(_localctx, 1);
{
- setState(67);
+ setState(69);
import_module();
}
break;
case FUNCTION:
enterOuterAlt(_localctx, 2);
{
- setState(68);
+ setState(70);
func();
}
break;
case MODULE:
enterOuterAlt(_localctx, 3);
{
- setState(69);
+ setState(71);
module();
}
break;
case SUB:
case BAND:
+ case BOR:
case EXCLAIM:
case LBRACE:
case LPAREN:
@@ -266,7 +267,7 @@ public final StmtContext stmt() throws RecognitionException {
case ID:
enterOuterAlt(_localctx, 4);
{
- setState(70);
+ setState(72);
expr_stmt();
}
break;
@@ -317,13 +318,13 @@ public final Import_moduleContext import_module() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(73);
+ setState(75);
match(IMPORT);
- setState(74);
+ setState(76);
match(ID);
- setState(75);
+ setState(77);
match(COLON);
- setState(76);
+ setState(78);
match(ID);
}
}
@@ -371,15 +372,15 @@ public final ModuleContext module() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(78);
+ setState(80);
match(MODULE);
- setState(79);
+ setState(81);
match(ID);
- setState(80);
+ setState(82);
match(LBRACE);
- setState(81);
+ setState(83);
module_stmts();
- setState(82);
+ setState(84);
match(RBRACE);
}
}
@@ -427,17 +428,17 @@ public final Module_stmtsContext module_stmts() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(87);
+ setState(89);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LET) | (1L << FUNCTION) | (1L << MODULE))) != 0)) {
{
{
- setState(84);
+ setState(86);
module_stmt();
}
}
- setState(89);
+ setState(91);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -487,27 +488,27 @@ public final Module_stmtContext module_stmt() throws RecognitionException {
Module_stmtContext _localctx = new Module_stmtContext(_ctx, getState());
enterRule(_localctx, 10, RULE_module_stmt);
try {
- setState(93);
+ setState(95);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FUNCTION:
enterOuterAlt(_localctx, 1);
{
- setState(90);
+ setState(92);
func();
}
break;
case LET:
enterOuterAlt(_localctx, 2);
{
- setState(91);
+ setState(93);
var_decl();
}
break;
case MODULE:
enterOuterAlt(_localctx, 3);
{
- setState(92);
+ setState(94);
module();
}
break;
@@ -561,15 +562,15 @@ public final FuncContext func() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(95);
+ setState(97);
match(FUNCTION);
- setState(96);
+ setState(98);
match(ID);
- setState(97);
+ setState(99);
func_args();
- setState(98);
+ setState(100);
match(ASSIGN);
- setState(99);
+ setState(101);
expr(0);
}
}
@@ -616,19 +617,19 @@ public final Func_argsContext func_args() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(101);
- match(LPAREN);
setState(103);
+ match(LPAREN);
+ setState(105);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ID) {
{
- setState(102);
+ setState(104);
arg_list();
}
}
- setState(105);
+ setState(107);
match(RPAREN);
}
}
@@ -680,21 +681,21 @@ public final Arg_listContext arg_list() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(107);
+ setState(109);
arg();
- setState(112);
+ setState(114);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(108);
+ setState(110);
match(COMMA);
- setState(109);
+ setState(111);
arg();
}
}
- setState(114);
+ setState(116);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -743,16 +744,16 @@ public final ArgContext arg() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(115);
+ setState(117);
match(ID);
- setState(118);
+ setState(120);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ASSIGN) {
{
- setState(116);
+ setState(118);
match(ASSIGN);
- setState(117);
+ setState(119);
literal_expr();
}
}
@@ -805,41 +806,41 @@ public final Literal_exprContext literal_expr() throws RecognitionException {
Literal_exprContext _localctx = new Literal_exprContext(_ctx, getState());
enterRule(_localctx, 20, RULE_literal_expr);
try {
- setState(125);
+ setState(127);
_errHandler.sync(this);
switch (_input.LA(1)) {
case NUMBER:
enterOuterAlt(_localctx, 1);
{
- setState(120);
+ setState(122);
match(NUMBER);
}
break;
case STRING:
enterOuterAlt(_localctx, 2);
{
- setState(121);
+ setState(123);
match(STRING);
}
break;
case LBRACKET:
enterOuterAlt(_localctx, 3);
{
- setState(122);
+ setState(124);
array();
}
break;
case LPAREN:
enterOuterAlt(_localctx, 4);
{
- setState(123);
+ setState(125);
tuple();
}
break;
case LBRACE:
enterOuterAlt(_localctx, 5);
{
- setState(124);
+ setState(126);
object();
}
break;
@@ -887,7 +888,7 @@ public final Expr_stmtContext expr_stmt() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(127);
+ setState(129);
expr(0);
}
}
@@ -906,6 +907,9 @@ public static class ExprContext extends ParserRuleContext {
public Var_declContext var_decl() {
return getRuleContext(Var_declContext.class,0);
}
+ public Closure_declContext closure_decl() {
+ return getRuleContext(Closure_declContext.class,0);
+ }
public TerminalNode LPAREN() { return getToken(PiccodeScriptParser.LPAREN, 0); }
public TerminalNode RPAREN() { return getToken(PiccodeScriptParser.RPAREN, 0); }
public List expr() {
@@ -954,6 +958,7 @@ public ObjectContext object() {
public TerminalNode BAND() { return getToken(PiccodeScriptParser.BAND, 0); }
public TerminalNode MUL() { return getToken(PiccodeScriptParser.MUL, 0); }
public TerminalNode DIV() { return getToken(PiccodeScriptParser.DIV, 0); }
+ public TerminalNode MOD() { return getToken(PiccodeScriptParser.MOD, 0); }
public TerminalNode ADD() { return getToken(PiccodeScriptParser.ADD, 0); }
public TerminalNode SUB() { return getToken(PiccodeScriptParser.SUB, 0); }
public TerminalNode COLON() { return getToken(PiccodeScriptParser.COLON, 0); }
@@ -995,96 +1000,102 @@ private ExprContext expr(int _p) throws RecognitionException {
int _alt;
enterOuterAlt(_localctx, 1);
{
- setState(146);
+ setState(149);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
{
- setState(130);
+ setState(132);
var_decl();
}
break;
case 2:
{
- setState(131);
- match(LPAREN);
setState(133);
+ closure_decl();
+ }
+ break;
+ case 3:
+ {
+ setState(134);
+ match(LPAREN);
+ setState(136);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
{
- setState(132);
+ setState(135);
expr(0);
}
}
- setState(135);
+ setState(138);
match(RPAREN);
}
break;
- case 3:
+ case 4:
{
- setState(136);
+ setState(139);
unary();
}
break;
- case 4:
+ case 5:
{
- setState(137);
+ setState(140);
if_expr();
}
break;
- case 5:
+ case 6:
{
- setState(138);
+ setState(141);
when_expr();
}
break;
- case 6:
+ case 7:
{
- setState(139);
+ setState(142);
do_expr();
}
break;
- case 7:
+ case 8:
{
- setState(140);
+ setState(143);
array();
}
break;
- case 8:
+ case 9:
{
- setState(141);
+ setState(144);
tuple();
}
break;
- case 9:
+ case 10:
{
- setState(142);
+ setState(145);
object();
}
break;
- case 10:
+ case 11:
{
- setState(143);
+ setState(146);
match(ID);
}
break;
- case 11:
+ case 12:
{
- setState(144);
+ setState(147);
match(NUMBER);
}
break;
- case 12:
+ case 13:
{
- setState(145);
+ setState(148);
match(STRING);
}
break;
}
_ctx.stop = _input.LT(-1);
- setState(216);
+ setState(222);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,13,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -1092,275 +1103,287 @@ private ExprContext expr(int _p) throws RecognitionException {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
- setState(214);
+ setState(220);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) {
case 1:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(148);
- if (!(precpred(_ctx, 31))) throw new FailedPredicateException(this, "precpred(_ctx, 31)");
- setState(149);
- match(DOT);
- setState(150);
- expr(32);
- }
- break;
- case 2:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(151);
- if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)");
+ if (!(precpred(_ctx, 32))) throw new FailedPredicateException(this, "precpred(_ctx, 32)");
setState(152);
- match(PIPE);
+ match(DOT);
setState(153);
- expr(31);
+ expr(33);
}
break;
- case 3:
+ case 2:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(154);
- if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)");
+ if (!(precpred(_ctx, 31))) throw new FailedPredicateException(this, "precpred(_ctx, 31)");
setState(155);
- match(OR);
+ match(PIPE);
setState(156);
- expr(30);
+ expr(32);
}
break;
- case 4:
+ case 3:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(157);
- if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)");
+ if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)");
setState(158);
- match(AND);
+ match(OR);
setState(159);
- expr(29);
+ expr(31);
}
break;
- case 5:
+ case 4:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(160);
- if (!(precpred(_ctx, 27))) throw new FailedPredicateException(this, "precpred(_ctx, 27)");
+ if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)");
setState(161);
- match(EQ);
+ match(AND);
setState(162);
- expr(28);
+ expr(30);
}
break;
- case 6:
+ case 5:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(163);
- if (!(precpred(_ctx, 26))) throw new FailedPredicateException(this, "precpred(_ctx, 26)");
+ if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)");
setState(164);
- match(NE);
+ match(EQ);
setState(165);
- expr(27);
+ expr(29);
}
break;
- case 7:
+ case 6:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(166);
- if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)");
+ if (!(precpred(_ctx, 27))) throw new FailedPredicateException(this, "precpred(_ctx, 27)");
setState(167);
- match(LT);
+ match(NE);
setState(168);
- expr(26);
+ expr(28);
}
break;
- case 8:
+ case 7:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(169);
- if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)");
+ if (!(precpred(_ctx, 26))) throw new FailedPredicateException(this, "precpred(_ctx, 26)");
setState(170);
- match(LE);
+ match(LT);
setState(171);
- expr(25);
+ expr(27);
}
break;
- case 9:
+ case 8:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(172);
- if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)");
+ if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)");
setState(173);
- match(GT);
+ match(LE);
setState(174);
- expr(24);
+ expr(26);
}
break;
- case 10:
+ case 9:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(175);
- if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)");
+ if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)");
setState(176);
- match(GE);
+ match(GT);
setState(177);
- expr(23);
+ expr(25);
}
break;
- case 11:
+ case 10:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(178);
- if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)");
+ if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)");
setState(179);
- match(SHL);
+ match(GE);
setState(180);
- expr(22);
+ expr(24);
}
break;
- case 12:
+ case 11:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(181);
- if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
+ if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)");
setState(182);
- match(SHR);
+ match(SHL);
setState(183);
- expr(21);
+ expr(23);
}
break;
- case 13:
+ case 12:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(184);
- if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
+ if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)");
setState(185);
- match(BOR);
+ match(SHR);
setState(186);
- expr(20);
+ expr(22);
}
break;
- case 14:
+ case 13:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(187);
- if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
+ if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
setState(188);
- match(BAND);
+ match(BOR);
setState(189);
- expr(19);
+ expr(21);
}
break;
- case 15:
+ case 14:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(190);
- if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
+ if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
setState(191);
- match(MUL);
+ match(BAND);
setState(192);
- expr(18);
+ expr(20);
}
break;
- case 16:
+ case 15:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(193);
- if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
+ if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
setState(194);
- match(DIV);
+ match(MUL);
setState(195);
- expr(17);
+ expr(19);
}
break;
- case 17:
+ case 16:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(196);
- if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
+ if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
setState(197);
- match(ADD);
+ match(DIV);
setState(198);
- expr(16);
+ expr(18);
}
break;
- case 18:
+ case 17:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(199);
- if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
+ if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
setState(200);
- match(SUB);
+ match(MOD);
setState(201);
- expr(15);
+ expr(17);
}
break;
- case 19:
+ case 18:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(202);
- if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
+ if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
setState(203);
- match(DOT);
+ match(ADD);
setState(204);
- expr(14);
+ expr(16);
}
break;
- case 20:
+ case 19:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(205);
- if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
+ if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
setState(206);
- match(COLON);
+ match(SUB);
setState(207);
- expr(13);
+ expr(15);
}
break;
- case 21:
+ case 20:
{
_localctx = new ExprContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(208);
- if (!(precpred(_ctx, 33))) throw new FailedPredicateException(this, "precpred(_ctx, 33)");
+ if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
setState(209);
- match(LPAREN);
+ match(DOT);
+ setState(210);
+ expr(14);
+ }
+ break;
+ case 21:
+ {
+ _localctx = new ExprContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expr);
setState(211);
+ if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
+ setState(212);
+ match(COLON);
+ setState(213);
+ expr(13);
+ }
+ break;
+ case 22:
+ {
+ _localctx = new ExprContext(_parentctx, _parentState);
+ pushNewRecursionContext(_localctx, _startState, RULE_expr);
+ setState(214);
+ if (!(precpred(_ctx, 35))) throw new FailedPredicateException(this, "precpred(_ctx, 35)");
+ setState(215);
+ match(LPAREN);
+ setState(217);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
{
- setState(210);
+ setState(216);
call_expr_list();
}
}
- setState(213);
+ setState(219);
match(RPAREN);
}
break;
}
}
}
- setState(218);
+ setState(224);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,13,_ctx);
}
@@ -1377,6 +1400,75 @@ private ExprContext expr(int _p) throws RecognitionException {
return _localctx;
}
+ public static class Closure_declContext extends ParserRuleContext {
+ public List BOR() { return getTokens(PiccodeScriptParser.BOR); }
+ public TerminalNode BOR(int i) {
+ return getToken(PiccodeScriptParser.BOR, i);
+ }
+ public TerminalNode ARROW() { return getToken(PiccodeScriptParser.ARROW, 0); }
+ public ExprContext expr() {
+ return getRuleContext(ExprContext.class,0);
+ }
+ public Arg_listContext arg_list() {
+ return getRuleContext(Arg_listContext.class,0);
+ }
+ public Closure_declContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_closure_decl; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterClosure_decl(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitClosure_decl(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitClosure_decl(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final Closure_declContext closure_decl() throws RecognitionException {
+ Closure_declContext _localctx = new Closure_declContext(_ctx, getState());
+ enterRule(_localctx, 26, RULE_closure_decl);
+ int _la;
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(225);
+ match(BOR);
+ setState(227);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==ID) {
+ {
+ setState(226);
+ arg_list();
+ }
+ }
+
+ setState(229);
+ match(BOR);
+ setState(230);
+ match(ARROW);
+ setState(231);
+ expr(0);
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class UnaryContext extends ParserRuleContext {
public TerminalNode EXCLAIM() { return getToken(PiccodeScriptParser.EXCLAIM, 0); }
public ExprContext expr() {
@@ -1406,44 +1498,44 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final UnaryContext unary() throws RecognitionException {
UnaryContext _localctx = new UnaryContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_unary);
+ enterRule(_localctx, 28, RULE_unary);
try {
- setState(227);
+ setState(241);
_errHandler.sync(this);
switch (_input.LA(1)) {
case EXCLAIM:
enterOuterAlt(_localctx, 1);
{
- setState(219);
+ setState(233);
match(EXCLAIM);
- setState(220);
+ setState(234);
expr(0);
}
break;
case SUB:
enterOuterAlt(_localctx, 2);
{
- setState(221);
+ setState(235);
match(SUB);
- setState(222);
+ setState(236);
expr(0);
}
break;
case TILDE:
enterOuterAlt(_localctx, 3);
{
- setState(223);
+ setState(237);
match(TILDE);
- setState(224);
+ setState(238);
expr(0);
}
break;
case BAND:
enterOuterAlt(_localctx, 4);
{
- setState(225);
+ setState(239);
match(BAND);
- setState(226);
+ setState(240);
expr(0);
}
break;
@@ -1500,27 +1592,27 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final If_exprContext if_expr() throws RecognitionException {
If_exprContext _localctx = new If_exprContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_if_expr);
+ enterRule(_localctx, 30, RULE_if_expr);
try {
enterOuterAlt(_localctx, 1);
{
- setState(229);
+ setState(243);
match(IF);
- setState(230);
+ setState(244);
expr(0);
- setState(231);
+ setState(245);
match(LBRACE);
- setState(232);
+ setState(246);
expr(0);
- setState(233);
+ setState(247);
match(RBRACE);
- setState(234);
+ setState(248);
match(ELSE);
- setState(235);
+ setState(249);
match(LBRACE);
- setState(236);
+ setState(250);
expr(0);
- setState(237);
+ setState(251);
match(RBRACE);
}
}
@@ -1569,30 +1661,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final When_exprContext when_expr() throws RecognitionException {
When_exprContext _localctx = new When_exprContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_when_expr);
+ enterRule(_localctx, 32, RULE_when_expr);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(239);
+ setState(253);
match(WHEN);
- setState(240);
+ setState(254);
expr(0);
- setState(241);
+ setState(255);
match(LBRACE);
- setState(242);
+ setState(256);
when_cases();
- setState(244);
+ setState(258);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ELSE) {
{
- setState(243);
+ setState(257);
else_case();
}
}
- setState(246);
+ setState(260);
match(RBRACE);
}
}
@@ -1635,22 +1727,22 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final When_casesContext when_cases() throws RecognitionException {
When_casesContext _localctx = new When_casesContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_when_cases);
+ enterRule(_localctx, 34, RULE_when_cases);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(251);
+ setState(265);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==IS) {
{
{
- setState(248);
+ setState(262);
when_case();
}
}
- setState(253);
+ setState(267);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -1697,17 +1789,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final When_caseContext when_case() throws RecognitionException {
When_caseContext _localctx = new When_caseContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_when_case);
+ enterRule(_localctx, 36, RULE_when_case);
try {
enterOuterAlt(_localctx, 1);
{
- setState(254);
+ setState(268);
match(IS);
- setState(255);
+ setState(269);
expr_list();
- setState(256);
+ setState(270);
match(ARROW);
- setState(257);
+ setState(271);
expr(0);
}
}
@@ -1749,15 +1841,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Else_caseContext else_case() throws RecognitionException {
Else_caseContext _localctx = new Else_caseContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_else_case);
+ enterRule(_localctx, 38, RULE_else_case);
try {
enterOuterAlt(_localctx, 1);
{
- setState(259);
+ setState(273);
match(ELSE);
- setState(260);
+ setState(274);
match(ARROW);
- setState(261);
+ setState(275);
expr(0);
}
}
@@ -1800,17 +1892,17 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Var_declContext var_decl() throws RecognitionException {
Var_declContext _localctx = new Var_declContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_var_decl);
+ enterRule(_localctx, 40, RULE_var_decl);
try {
enterOuterAlt(_localctx, 1);
{
- setState(263);
+ setState(277);
match(LET);
- setState(264);
+ setState(278);
match(ID);
- setState(265);
+ setState(279);
match(ASSIGN);
- setState(266);
+ setState(280);
expr(0);
}
}
@@ -1852,15 +1944,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TupleContext tuple() throws RecognitionException {
TupleContext _localctx = new TupleContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_tuple);
+ enterRule(_localctx, 42, RULE_tuple);
try {
enterOuterAlt(_localctx, 1);
{
- setState(268);
+ setState(282);
match(LPAREN);
- setState(269);
+ setState(283);
expr_list();
- setState(270);
+ setState(284);
match(RPAREN);
}
}
@@ -1902,24 +1994,24 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArrayContext array() throws RecognitionException {
ArrayContext _localctx = new ArrayContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_array);
+ enterRule(_localctx, 44, RULE_array);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(272);
+ setState(286);
match(LBRACKET);
- setState(274);
+ setState(288);
_errHandler.sync(this);
_la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
+ if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
{
- setState(273);
+ setState(287);
expr_list();
}
}
- setState(276);
+ setState(290);
match(RBRACKET);
}
}
@@ -1961,15 +2053,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ObjectContext object() throws RecognitionException {
ObjectContext _localctx = new ObjectContext(_ctx, getState());
- enterRule(_localctx, 44, RULE_object);
+ enterRule(_localctx, 46, RULE_object);
try {
enterOuterAlt(_localctx, 1);
{
- setState(278);
+ setState(292);
match(LBRACE);
- setState(279);
+ setState(293);
key_val_pairs();
- setState(280);
+ setState(294);
match(RBRACE);
}
}
@@ -2016,26 +2108,26 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Expr_listContext expr_list() throws RecognitionException {
Expr_listContext _localctx = new Expr_listContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_expr_list);
+ enterRule(_localctx, 48, RULE_expr_list);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(282);
+ setState(296);
expr(0);
- setState(287);
+ setState(301);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(283);
+ setState(297);
match(COMMA);
- setState(284);
+ setState(298);
expr(0);
}
}
- setState(289);
+ setState(303);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2084,26 +2176,26 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Call_expr_listContext call_expr_list() throws RecognitionException {
Call_expr_listContext _localctx = new Call_expr_listContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_call_expr_list);
+ enterRule(_localctx, 50, RULE_call_expr_list);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(290);
+ setState(304);
call_expr();
- setState(295);
+ setState(309);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(291);
+ setState(305);
match(COMMA);
- setState(292);
+ setState(306);
call_expr();
}
}
- setState(297);
+ setState(311);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2147,25 +2239,25 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Call_exprContext call_expr() throws RecognitionException {
Call_exprContext _localctx = new Call_exprContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_call_expr);
+ enterRule(_localctx, 52, RULE_call_expr);
int _la;
try {
- setState(304);
+ setState(318);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,21,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(298);
+ setState(312);
match(ID);
- setState(301);
+ setState(315);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==ASSIGN) {
{
- setState(299);
+ setState(313);
match(ASSIGN);
- setState(300);
+ setState(314);
expr(0);
}
}
@@ -2175,7 +2267,7 @@ public final Call_exprContext call_expr() throws RecognitionException {
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(303);
+ setState(317);
expr(0);
}
break;
@@ -2219,15 +2311,15 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Key_val_pairContext key_val_pair() throws RecognitionException {
Key_val_pairContext _localctx = new Key_val_pairContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_key_val_pair);
+ enterRule(_localctx, 54, RULE_key_val_pair);
try {
enterOuterAlt(_localctx, 1);
{
- setState(306);
+ setState(320);
match(ID);
- setState(307);
+ setState(321);
match(COLON);
- setState(308);
+ setState(322);
expr(0);
}
}
@@ -2274,26 +2366,26 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Key_val_pairsContext key_val_pairs() throws RecognitionException {
Key_val_pairsContext _localctx = new Key_val_pairsContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_key_val_pairs);
+ enterRule(_localctx, 56, RULE_key_val_pairs);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(310);
+ setState(324);
key_val_pair();
- setState(315);
+ setState(329);
_errHandler.sync(this);
_la = _input.LA(1);
while (_la==COMMA) {
{
{
- setState(311);
+ setState(325);
match(COMMA);
- setState(312);
+ setState(326);
key_val_pair();
}
}
- setState(317);
+ setState(331);
_errHandler.sync(this);
_la = _input.LA(1);
}
@@ -2341,30 +2433,30 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final Do_exprContext do_expr() throws RecognitionException {
Do_exprContext _localctx = new Do_exprContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_do_expr);
+ enterRule(_localctx, 58, RULE_do_expr);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(318);
+ setState(332);
match(DO);
- setState(319);
+ setState(333);
match(LBRACE);
- setState(323);
+ setState(337);
_errHandler.sync(this);
_la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
{
{
- setState(320);
+ setState(334);
expr(0);
}
}
- setState(325);
+ setState(339);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(326);
+ setState(340);
match(RBRACE);
}
}
@@ -2389,170 +2481,179 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
private boolean expr_sempred(ExprContext _localctx, int predIndex) {
switch (predIndex) {
case 0:
- return precpred(_ctx, 31);
+ return precpred(_ctx, 32);
case 1:
- return precpred(_ctx, 30);
+ return precpred(_ctx, 31);
case 2:
- return precpred(_ctx, 29);
+ return precpred(_ctx, 30);
case 3:
- return precpred(_ctx, 28);
+ return precpred(_ctx, 29);
case 4:
- return precpred(_ctx, 27);
+ return precpred(_ctx, 28);
case 5:
- return precpred(_ctx, 26);
+ return precpred(_ctx, 27);
case 6:
- return precpred(_ctx, 25);
+ return precpred(_ctx, 26);
case 7:
- return precpred(_ctx, 24);
+ return precpred(_ctx, 25);
case 8:
- return precpred(_ctx, 23);
+ return precpred(_ctx, 24);
case 9:
- return precpred(_ctx, 22);
+ return precpred(_ctx, 23);
case 10:
- return precpred(_ctx, 21);
+ return precpred(_ctx, 22);
case 11:
- return precpred(_ctx, 20);
+ return precpred(_ctx, 21);
case 12:
- return precpred(_ctx, 19);
+ return precpred(_ctx, 20);
case 13:
- return precpred(_ctx, 18);
+ return precpred(_ctx, 19);
case 14:
- return precpred(_ctx, 17);
+ return precpred(_ctx, 18);
case 15:
- return precpred(_ctx, 16);
+ return precpred(_ctx, 17);
case 16:
- return precpred(_ctx, 15);
+ return precpred(_ctx, 16);
case 17:
- return precpred(_ctx, 14);
+ return precpred(_ctx, 15);
case 18:
- return precpred(_ctx, 13);
+ return precpred(_ctx, 14);
case 19:
- return precpred(_ctx, 12);
+ return precpred(_ctx, 13);
case 20:
- return precpred(_ctx, 33);
+ return precpred(_ctx, 12);
+ case 21:
+ return precpred(_ctx, 35);
}
return true;
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\60\u014b\4\2\t\2"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\61\u0159\4\2\t\2"+
"\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
- "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\3\2\7\2>\n\2\f\2\16"+
- "\2A\13\2\3\2\5\2D\n\2\3\3\3\3\3\3\3\3\5\3J\n\3\3\4\3\4\3\4\3\4\3\4\3\5"+
- "\3\5\3\5\3\5\3\5\3\5\3\6\7\6X\n\6\f\6\16\6[\13\6\3\7\3\7\3\7\5\7`\n\7"+
- "\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\5\tj\n\t\3\t\3\t\3\n\3\n\3\n\7\nq\n\n"+
- "\f\n\16\nt\13\n\3\13\3\13\3\13\5\13y\n\13\3\f\3\f\3\f\3\f\3\f\5\f\u0080"+
- "\n\f\3\r\3\r\3\16\3\16\3\16\3\16\5\16\u0088\n\16\3\16\3\16\3\16\3\16\3"+
- "\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0095\n\16\3\16\3\16\3\16\3\16"+
+ "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\3\2\7\2@"+
+ "\n\2\f\2\16\2C\13\2\3\2\5\2F\n\2\3\3\3\3\3\3\3\3\5\3L\n\3\3\4\3\4\3\4"+
+ "\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\7\6Z\n\6\f\6\16\6]\13\6\3\7\3\7\3"+
+ "\7\5\7b\n\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\5\tl\n\t\3\t\3\t\3\n\3\n\3"+
+ "\n\7\ns\n\n\f\n\16\nv\13\n\3\13\3\13\3\13\5\13{\n\13\3\f\3\f\3\f\3\f\3"+
+ "\f\5\f\u0082\n\f\3\r\3\r\3\16\3\16\3\16\3\16\3\16\5\16\u008b\n\16\3\16"+
+ "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0098\n\16\3\16"+
"\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
"\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
"\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
"\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\5\16\u00d6\n\16\3\16\7\16\u00d9\n\16\f\16\16\16\u00dc"+
- "\13\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\17\5\17\u00e6\n\17\3\20\3"+
- "\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\5"+
- "\21\u00f7\n\21\3\21\3\21\3\22\7\22\u00fc\n\22\f\22\16\22\u00ff\13\22\3"+
- "\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3"+
- "\26\3\26\3\26\3\26\3\27\3\27\5\27\u0115\n\27\3\27\3\27\3\30\3\30\3\30"+
- "\3\30\3\31\3\31\3\31\7\31\u0120\n\31\f\31\16\31\u0123\13\31\3\32\3\32"+
- "\3\32\7\32\u0128\n\32\f\32\16\32\u012b\13\32\3\33\3\33\3\33\5\33\u0130"+
- "\n\33\3\33\5\33\u0133\n\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\7\35\u013c"+
- "\n\35\f\35\16\35\u013f\13\35\3\36\3\36\3\36\7\36\u0144\n\36\f\36\16\36"+
- "\u0147\13\36\3\36\3\36\3\36\2\3\32\37\2\4\6\b\n\f\16\20\22\24\26\30\32"+
- "\34\36 \"$&(*,.\60\62\64\668:\2\2\2\u016a\2C\3\2\2\2\4I\3\2\2\2\6K\3\2"+
- "\2\2\bP\3\2\2\2\nY\3\2\2\2\f_\3\2\2\2\16a\3\2\2\2\20g\3\2\2\2\22m\3\2"+
- "\2\2\24u\3\2\2\2\26\177\3\2\2\2\30\u0081\3\2\2\2\32\u0094\3\2\2\2\34\u00e5"+
- "\3\2\2\2\36\u00e7\3\2\2\2 \u00f1\3\2\2\2\"\u00fd\3\2\2\2$\u0100\3\2\2"+
- "\2&\u0105\3\2\2\2(\u0109\3\2\2\2*\u010e\3\2\2\2,\u0112\3\2\2\2.\u0118"+
- "\3\2\2\2\60\u011c\3\2\2\2\62\u0124\3\2\2\2\64\u0132\3\2\2\2\66\u0134\3"+
- "\2\2\28\u0138\3\2\2\2:\u0140\3\2\2\2<>\5\4\3\2=<\3\2\2\2>A\3\2\2\2?=\3"+
- "\2\2\2?@\3\2\2\2@D\3\2\2\2A?\3\2\2\2BD\7\2\2\3C?\3\2\2\2CB\3\2\2\2D\3"+
- "\3\2\2\2EJ\5\6\4\2FJ\5\16\b\2GJ\5\b\5\2HJ\5\30\r\2IE\3\2\2\2IF\3\2\2\2"+
- "IG\3\2\2\2IH\3\2\2\2J\5\3\2\2\2KL\7$\2\2LM\7/\2\2MN\7\33\2\2NO\7/\2\2"+
- "O\7\3\2\2\2PQ\7(\2\2QR\7/\2\2RS\7\25\2\2ST\5\n\6\2TU\7\26\2\2U\t\3\2\2"+
- "\2VX\5\f\7\2WV\3\2\2\2X[\3\2\2\2YW\3\2\2\2YZ\3\2\2\2Z\13\3\2\2\2[Y\3\2"+
- "\2\2\\`\5\16\b\2]`\5(\25\2^`\5\b\5\2_\\\3\2\2\2_]\3\2\2\2_^\3\2\2\2`\r"+
- "\3\2\2\2ab\7\"\2\2bc\7/\2\2cd\5\20\t\2de\7 \2\2ef\5\32\16\2f\17\3\2\2"+
- "\2gi\7\27\2\2hj\5\22\n\2ih\3\2\2\2ij\3\2\2\2jk\3\2\2\2kl\7\30\2\2l\21"+
- "\3\2\2\2mr\5\24\13\2no\7\34\2\2oq\5\24\13\2pn\3\2\2\2qt\3\2\2\2rp\3\2"+
- "\2\2rs\3\2\2\2s\23\3\2\2\2tr\3\2\2\2ux\7/\2\2vw\7 \2\2wy\5\26\f\2xv\3"+
- "\2\2\2xy\3\2\2\2y\25\3\2\2\2z\u0080\7*\2\2{\u0080\7+\2\2|\u0080\5,\27"+
- "\2}\u0080\5*\26\2~\u0080\5.\30\2\177z\3\2\2\2\177{\3\2\2\2\177|\3\2\2"+
- "\2\177}\3\2\2\2\177~\3\2\2\2\u0080\27\3\2\2\2\u0081\u0082\5\32\16\2\u0082"+
- "\31\3\2\2\2\u0083\u0084\b\16\1\2\u0084\u0095\5(\25\2\u0085\u0087\7\27"+
- "\2\2\u0086\u0088\5\32\16\2\u0087\u0086\3\2\2\2\u0087\u0088\3\2\2\2\u0088"+
- "\u0089\3\2\2\2\u0089\u0095\7\30\2\2\u008a\u0095\5\34\17\2\u008b\u0095"+
- "\5\36\20\2\u008c\u0095\5 \21\2\u008d\u0095\5:\36\2\u008e\u0095\5,\27\2"+
- "\u008f\u0095\5*\26\2\u0090\u0095\5.\30\2\u0091\u0095\7/\2\2\u0092\u0095"+
- "\7*\2\2\u0093\u0095\7+\2\2\u0094\u0083\3\2\2\2\u0094\u0085\3\2\2\2\u0094"+
- "\u008a\3\2\2\2\u0094\u008b\3\2\2\2\u0094\u008c\3\2\2\2\u0094\u008d\3\2"+
- "\2\2\u0094\u008e\3\2\2\2\u0094\u008f\3\2\2\2\u0094\u0090\3\2\2\2\u0094"+
- "\u0091\3\2\2\2\u0094\u0092\3\2\2\2\u0094\u0093\3\2\2\2\u0095\u00da\3\2"+
- "\2\2\u0096\u0097\f!\2\2\u0097\u0098\7,\2\2\u0098\u00d9\5\32\16\"\u0099"+
- "\u009a\f \2\2\u009a\u009b\7\24\2\2\u009b\u00d9\5\32\16!\u009c\u009d\f"+
- "\37\2\2\u009d\u009e\7\16\2\2\u009e\u00d9\5\32\16 \u009f\u00a0\f\36\2\2"+
- "\u00a0\u00a1\7\r\2\2\u00a1\u00d9\5\32\16\37\u00a2\u00a3\f\35\2\2\u00a3"+
- "\u00a4\7\13\2\2\u00a4\u00d9\5\32\16\36\u00a5\u00a6\f\34\2\2\u00a6\u00a7"+
- "\7\f\2\2\u00a7\u00d9\5\32\16\35\u00a8\u00a9\f\33\2\2\u00a9\u00aa\7\t\2"+
- "\2\u00aa\u00d9\5\32\16\34\u00ab\u00ac\f\32\2\2\u00ac\u00ad\7\n\2\2\u00ad"+
- "\u00d9\5\32\16\33\u00ae\u00af\f\31\2\2\u00af\u00b0\7\7\2\2\u00b0\u00d9"+
- "\5\32\16\32\u00b1\u00b2\f\30\2\2\u00b2\u00b3\7\b\2\2\u00b3\u00d9\5\32"+
- "\16\31\u00b4\u00b5\f\27\2\2\u00b5\u00b6\7\17\2\2\u00b6\u00d9\5\32\16\30"+
- "\u00b7\u00b8\f\26\2\2\u00b8\u00b9\7\20\2\2\u00b9\u00d9\5\32\16\27\u00ba"+
- "\u00bb\f\25\2\2\u00bb\u00bc\7\22\2\2\u00bc\u00d9\5\32\16\26\u00bd\u00be"+
- "\f\24\2\2\u00be\u00bf\7\21\2\2\u00bf\u00d9\5\32\16\25\u00c0\u00c1\f\23"+
- "\2\2\u00c1\u00c2\7\5\2\2\u00c2\u00d9\5\32\16\24\u00c3\u00c4\f\22\2\2\u00c4"+
- "\u00c5\7\6\2\2\u00c5\u00d9\5\32\16\23\u00c6\u00c7\f\21\2\2\u00c7\u00c8"+
- "\7\3\2\2\u00c8\u00d9\5\32\16\22\u00c9\u00ca\f\20\2\2\u00ca\u00cb\7\4\2"+
- "\2\u00cb\u00d9\5\32\16\21\u00cc\u00cd\f\17\2\2\u00cd\u00ce\7,\2\2\u00ce"+
- "\u00d9\5\32\16\20\u00cf\u00d0\f\16\2\2\u00d0\u00d1\7\33\2\2\u00d1\u00d9"+
- "\5\32\16\17\u00d2\u00d3\f#\2\2\u00d3\u00d5\7\27\2\2\u00d4\u00d6\5\62\32"+
- "\2\u00d5\u00d4\3\2\2\2\u00d5\u00d6\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d9"+
- "\7\30\2\2\u00d8\u0096\3\2\2\2\u00d8\u0099\3\2\2\2\u00d8\u009c\3\2\2\2"+
- "\u00d8\u009f\3\2\2\2\u00d8\u00a2\3\2\2\2\u00d8\u00a5\3\2\2\2\u00d8\u00a8"+
- "\3\2\2\2\u00d8\u00ab\3\2\2\2\u00d8\u00ae\3\2\2\2\u00d8\u00b1\3\2\2\2\u00d8"+
- "\u00b4\3\2\2\2\u00d8\u00b7\3\2\2\2\u00d8\u00ba\3\2\2\2\u00d8\u00bd\3\2"+
- "\2\2\u00d8\u00c0\3\2\2\2\u00d8\u00c3\3\2\2\2\u00d8\u00c6\3\2\2\2\u00d8"+
- "\u00c9\3\2\2\2\u00d8\u00cc\3\2\2\2\u00d8\u00cf\3\2\2\2\u00d8\u00d2\3\2"+
- "\2\2\u00d9\u00dc\3\2\2\2\u00da\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db"+
- "\33\3\2\2\2\u00dc\u00da\3\2\2\2\u00dd\u00de\7\23\2\2\u00de\u00e6\5\32"+
- "\16\2\u00df\u00e0\7\4\2\2\u00e0\u00e6\5\32\16\2\u00e1\u00e2\7\37\2\2\u00e2"+
- "\u00e6\5\32\16\2\u00e3\u00e4\7\21\2\2\u00e4\u00e6\5\32\16\2\u00e5\u00dd"+
- "\3\2\2\2\u00e5\u00df\3\2\2\2\u00e5\u00e1\3\2\2\2\u00e5\u00e3\3\2\2\2\u00e6"+
- "\35\3\2\2\2\u00e7\u00e8\7&\2\2\u00e8\u00e9\5\32\16\2\u00e9\u00ea\7\25"+
- "\2\2\u00ea\u00eb\5\32\16\2\u00eb\u00ec\7\26\2\2\u00ec\u00ed\7\'\2\2\u00ed"+
- "\u00ee\7\25\2\2\u00ee\u00ef\5\32\16\2\u00ef\u00f0\7\26\2\2\u00f0\37\3"+
- "\2\2\2\u00f1\u00f2\7#\2\2\u00f2\u00f3\5\32\16\2\u00f3\u00f4\7\25\2\2\u00f4"+
- "\u00f6\5\"\22\2\u00f5\u00f7\5&\24\2\u00f6\u00f5\3\2\2\2\u00f6\u00f7\3"+
- "\2\2\2\u00f7\u00f8\3\2\2\2\u00f8\u00f9\7\26\2\2\u00f9!\3\2\2\2\u00fa\u00fc"+
- "\5$\23\2\u00fb\u00fa\3\2\2\2\u00fc\u00ff\3\2\2\2\u00fd\u00fb\3\2\2\2\u00fd"+
- "\u00fe\3\2\2\2\u00fe#\3\2\2\2\u00ff\u00fd\3\2\2\2\u0100\u0101\7%\2\2\u0101"+
- "\u0102\5\60\31\2\u0102\u0103\7\36\2\2\u0103\u0104\5\32\16\2\u0104%\3\2"+
- "\2\2\u0105\u0106\7\'\2\2\u0106\u0107\7\36\2\2\u0107\u0108\5\32\16\2\u0108"+
- "\'\3\2\2\2\u0109\u010a\7!\2\2\u010a\u010b\7/\2\2\u010b\u010c\7 \2\2\u010c"+
- "\u010d\5\32\16\2\u010d)\3\2\2\2\u010e\u010f\7\27\2\2\u010f\u0110\5\60"+
- "\31\2\u0110\u0111\7\30\2\2\u0111+\3\2\2\2\u0112\u0114\7\31\2\2\u0113\u0115"+
- "\5\60\31\2\u0114\u0113\3\2\2\2\u0114\u0115\3\2\2\2\u0115\u0116\3\2\2\2"+
- "\u0116\u0117\7\32\2\2\u0117-\3\2\2\2\u0118\u0119\7\25\2\2\u0119\u011a"+
- "\58\35\2\u011a\u011b\7\26\2\2\u011b/\3\2\2\2\u011c\u0121\5\32\16\2\u011d"+
- "\u011e\7\34\2\2\u011e\u0120\5\32\16\2\u011f\u011d\3\2\2\2\u0120\u0123"+
- "\3\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122\61\3\2\2\2\u0123"+
- "\u0121\3\2\2\2\u0124\u0129\5\64\33\2\u0125\u0126\7\34\2\2\u0126\u0128"+
- "\5\64\33\2\u0127\u0125\3\2\2\2\u0128\u012b\3\2\2\2\u0129\u0127\3\2\2\2"+
- "\u0129\u012a\3\2\2\2\u012a\63\3\2\2\2\u012b\u0129\3\2\2\2\u012c\u012f"+
- "\7/\2\2\u012d\u012e\7 \2\2\u012e\u0130\5\32\16\2\u012f\u012d\3\2\2\2\u012f"+
- "\u0130\3\2\2\2\u0130\u0133\3\2\2\2\u0131\u0133\5\32\16\2\u0132\u012c\3"+
- "\2\2\2\u0132\u0131\3\2\2\2\u0133\65\3\2\2\2\u0134\u0135\7/\2\2\u0135\u0136"+
- "\7\33\2\2\u0136\u0137\5\32\16\2\u0137\67\3\2\2\2\u0138\u013d\5\66\34\2"+
- "\u0139\u013a\7\34\2\2\u013a\u013c\5\66\34\2\u013b\u0139\3\2\2\2\u013c"+
- "\u013f\3\2\2\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e9\3\2\2\2"+
- "\u013f\u013d\3\2\2\2\u0140\u0141\7)\2\2\u0141\u0145\7\25\2\2\u0142\u0144"+
- "\5\32\16\2\u0143\u0142\3\2\2\2\u0144\u0147\3\2\2\2\u0145\u0143\3\2\2\2"+
- "\u0145\u0146\3\2\2\2\u0146\u0148\3\2\2\2\u0147\u0145\3\2\2\2\u0148\u0149"+
- "\7\26\2\2\u0149;\3\2\2\2\32?CIY_irx\177\u0087\u0094\u00d5\u00d8\u00da"+
- "\u00e5\u00f6\u00fd\u0114\u0121\u0129\u012f\u0132\u013d\u0145";
+ "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00dc\n\16\3\16\7\16"+
+ "\u00df\n\16\f\16\16\16\u00e2\13\16\3\17\3\17\5\17\u00e6\n\17\3\17\3\17"+
+ "\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00f4\n\20\3\21"+
+ "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22"+
+ "\5\22\u0105\n\22\3\22\3\22\3\23\7\23\u010a\n\23\f\23\16\23\u010d\13\23"+
+ "\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26"+
+ "\3\27\3\27\3\27\3\27\3\30\3\30\5\30\u0123\n\30\3\30\3\30\3\31\3\31\3\31"+
+ "\3\31\3\32\3\32\3\32\7\32\u012e\n\32\f\32\16\32\u0131\13\32\3\33\3\33"+
+ "\3\33\7\33\u0136\n\33\f\33\16\33\u0139\13\33\3\34\3\34\3\34\5\34\u013e"+
+ "\n\34\3\34\5\34\u0141\n\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36\7\36\u014a"+
+ "\n\36\f\36\16\36\u014d\13\36\3\37\3\37\3\37\7\37\u0152\n\37\f\37\16\37"+
+ "\u0155\13\37\3\37\3\37\3\37\2\3\32 \2\4\6\b\n\f\16\20\22\24\26\30\32\34"+
+ "\36 \"$&(*,.\60\62\64\668:<\2\2\2\u017a\2E\3\2\2\2\4K\3\2\2\2\6M\3\2\2"+
+ "\2\bR\3\2\2\2\n[\3\2\2\2\fa\3\2\2\2\16c\3\2\2\2\20i\3\2\2\2\22o\3\2\2"+
+ "\2\24w\3\2\2\2\26\u0081\3\2\2\2\30\u0083\3\2\2\2\32\u0097\3\2\2\2\34\u00e3"+
+ "\3\2\2\2\36\u00f3\3\2\2\2 \u00f5\3\2\2\2\"\u00ff\3\2\2\2$\u010b\3\2\2"+
+ "\2&\u010e\3\2\2\2(\u0113\3\2\2\2*\u0117\3\2\2\2,\u011c\3\2\2\2.\u0120"+
+ "\3\2\2\2\60\u0126\3\2\2\2\62\u012a\3\2\2\2\64\u0132\3\2\2\2\66\u0140\3"+
+ "\2\2\28\u0142\3\2\2\2:\u0146\3\2\2\2<\u014e\3\2\2\2>@\5\4\3\2?>\3\2\2"+
+ "\2@C\3\2\2\2A?\3\2\2\2AB\3\2\2\2BF\3\2\2\2CA\3\2\2\2DF\7\2\2\3EA\3\2\2"+
+ "\2ED\3\2\2\2F\3\3\2\2\2GL\5\6\4\2HL\5\16\b\2IL\5\b\5\2JL\5\30\r\2KG\3"+
+ "\2\2\2KH\3\2\2\2KI\3\2\2\2KJ\3\2\2\2L\5\3\2\2\2MN\7%\2\2NO\7\60\2\2OP"+
+ "\7\34\2\2PQ\7\60\2\2Q\7\3\2\2\2RS\7)\2\2ST\7\60\2\2TU\7\26\2\2UV\5\n\6"+
+ "\2VW\7\27\2\2W\t\3\2\2\2XZ\5\f\7\2YX\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3"+
+ "\2\2\2\\\13\3\2\2\2][\3\2\2\2^b\5\16\b\2_b\5*\26\2`b\5\b\5\2a^\3\2\2\2"+
+ "a_\3\2\2\2a`\3\2\2\2b\r\3\2\2\2cd\7#\2\2de\7\60\2\2ef\5\20\t\2fg\7!\2"+
+ "\2gh\5\32\16\2h\17\3\2\2\2ik\7\30\2\2jl\5\22\n\2kj\3\2\2\2kl\3\2\2\2l"+
+ "m\3\2\2\2mn\7\31\2\2n\21\3\2\2\2ot\5\24\13\2pq\7\35\2\2qs\5\24\13\2rp"+
+ "\3\2\2\2sv\3\2\2\2tr\3\2\2\2tu\3\2\2\2u\23\3\2\2\2vt\3\2\2\2wz\7\60\2"+
+ "\2xy\7!\2\2y{\5\26\f\2zx\3\2\2\2z{\3\2\2\2{\25\3\2\2\2|\u0082\7+\2\2}"+
+ "\u0082\7,\2\2~\u0082\5.\30\2\177\u0082\5,\27\2\u0080\u0082\5\60\31\2\u0081"+
+ "|\3\2\2\2\u0081}\3\2\2\2\u0081~\3\2\2\2\u0081\177\3\2\2\2\u0081\u0080"+
+ "\3\2\2\2\u0082\27\3\2\2\2\u0083\u0084\5\32\16\2\u0084\31\3\2\2\2\u0085"+
+ "\u0086\b\16\1\2\u0086\u0098\5*\26\2\u0087\u0098\5\34\17\2\u0088\u008a"+
+ "\7\30\2\2\u0089\u008b\5\32\16\2\u008a\u0089\3\2\2\2\u008a\u008b\3\2\2"+
+ "\2\u008b\u008c\3\2\2\2\u008c\u0098\7\31\2\2\u008d\u0098\5\36\20\2\u008e"+
+ "\u0098\5 \21\2\u008f\u0098\5\"\22\2\u0090\u0098\5<\37\2\u0091\u0098\5"+
+ ".\30\2\u0092\u0098\5,\27\2\u0093\u0098\5\60\31\2\u0094\u0098\7\60\2\2"+
+ "\u0095\u0098\7+\2\2\u0096\u0098\7,\2\2\u0097\u0085\3\2\2\2\u0097\u0087"+
+ "\3\2\2\2\u0097\u0088\3\2\2\2\u0097\u008d\3\2\2\2\u0097\u008e\3\2\2\2\u0097"+
+ "\u008f\3\2\2\2\u0097\u0090\3\2\2\2\u0097\u0091\3\2\2\2\u0097\u0092\3\2"+
+ "\2\2\u0097\u0093\3\2\2\2\u0097\u0094\3\2\2\2\u0097\u0095\3\2\2\2\u0097"+
+ "\u0096\3\2\2\2\u0098\u00e0\3\2\2\2\u0099\u009a\f\"\2\2\u009a\u009b\7-"+
+ "\2\2\u009b\u00df\5\32\16#\u009c\u009d\f!\2\2\u009d\u009e\7\25\2\2\u009e"+
+ "\u00df\5\32\16\"\u009f\u00a0\f \2\2\u00a0\u00a1\7\17\2\2\u00a1\u00df\5"+
+ "\32\16!\u00a2\u00a3\f\37\2\2\u00a3\u00a4\7\16\2\2\u00a4\u00df\5\32\16"+
+ " \u00a5\u00a6\f\36\2\2\u00a6\u00a7\7\f\2\2\u00a7\u00df\5\32\16\37\u00a8"+
+ "\u00a9\f\35\2\2\u00a9\u00aa\7\r\2\2\u00aa\u00df\5\32\16\36\u00ab\u00ac"+
+ "\f\34\2\2\u00ac\u00ad\7\n\2\2\u00ad\u00df\5\32\16\35\u00ae\u00af\f\33"+
+ "\2\2\u00af\u00b0\7\13\2\2\u00b0\u00df\5\32\16\34\u00b1\u00b2\f\32\2\2"+
+ "\u00b2\u00b3\7\b\2\2\u00b3\u00df\5\32\16\33\u00b4\u00b5\f\31\2\2\u00b5"+
+ "\u00b6\7\t\2\2\u00b6\u00df\5\32\16\32\u00b7\u00b8\f\30\2\2\u00b8\u00b9"+
+ "\7\20\2\2\u00b9\u00df\5\32\16\31\u00ba\u00bb\f\27\2\2\u00bb\u00bc\7\21"+
+ "\2\2\u00bc\u00df\5\32\16\30\u00bd\u00be\f\26\2\2\u00be\u00bf\7\23\2\2"+
+ "\u00bf\u00df\5\32\16\27\u00c0\u00c1\f\25\2\2\u00c1\u00c2\7\22\2\2\u00c2"+
+ "\u00df\5\32\16\26\u00c3\u00c4\f\24\2\2\u00c4\u00c5\7\5\2\2\u00c5\u00df"+
+ "\5\32\16\25\u00c6\u00c7\f\23\2\2\u00c7\u00c8\7\6\2\2\u00c8\u00df\5\32"+
+ "\16\24\u00c9\u00ca\f\22\2\2\u00ca\u00cb\7\7\2\2\u00cb\u00df\5\32\16\23"+
+ "\u00cc\u00cd\f\21\2\2\u00cd\u00ce\7\3\2\2\u00ce\u00df\5\32\16\22\u00cf"+
+ "\u00d0\f\20\2\2\u00d0\u00d1\7\4\2\2\u00d1\u00df\5\32\16\21\u00d2\u00d3"+
+ "\f\17\2\2\u00d3\u00d4\7-\2\2\u00d4\u00df\5\32\16\20\u00d5\u00d6\f\16\2"+
+ "\2\u00d6\u00d7\7\34\2\2\u00d7\u00df\5\32\16\17\u00d8\u00d9\f%\2\2\u00d9"+
+ "\u00db\7\30\2\2\u00da\u00dc\5\64\33\2\u00db\u00da\3\2\2\2\u00db\u00dc"+
+ "\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00df\7\31\2\2\u00de\u0099\3\2\2\2"+
+ "\u00de\u009c\3\2\2\2\u00de\u009f\3\2\2\2\u00de\u00a2\3\2\2\2\u00de\u00a5"+
+ "\3\2\2\2\u00de\u00a8\3\2\2\2\u00de\u00ab\3\2\2\2\u00de\u00ae\3\2\2\2\u00de"+
+ "\u00b1\3\2\2\2\u00de\u00b4\3\2\2\2\u00de\u00b7\3\2\2\2\u00de\u00ba\3\2"+
+ "\2\2\u00de\u00bd\3\2\2\2\u00de\u00c0\3\2\2\2\u00de\u00c3\3\2\2\2\u00de"+
+ "\u00c6\3\2\2\2\u00de\u00c9\3\2\2\2\u00de\u00cc\3\2\2\2\u00de\u00cf\3\2"+
+ "\2\2\u00de\u00d2\3\2\2\2\u00de\u00d5\3\2\2\2\u00de\u00d8\3\2\2\2\u00df"+
+ "\u00e2\3\2\2\2\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\33\3\2\2"+
+ "\2\u00e2\u00e0\3\2\2\2\u00e3\u00e5\7\23\2\2\u00e4\u00e6\5\22\n\2\u00e5"+
+ "\u00e4\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\7\23"+
+ "\2\2\u00e8\u00e9\7\37\2\2\u00e9\u00ea\5\32\16\2\u00ea\35\3\2\2\2\u00eb"+
+ "\u00ec\7\24\2\2\u00ec\u00f4\5\32\16\2\u00ed\u00ee\7\4\2\2\u00ee\u00f4"+
+ "\5\32\16\2\u00ef\u00f0\7 \2\2\u00f0\u00f4\5\32\16\2\u00f1\u00f2\7\22\2"+
+ "\2\u00f2\u00f4\5\32\16\2\u00f3\u00eb\3\2\2\2\u00f3\u00ed\3\2\2\2\u00f3"+
+ "\u00ef\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\37\3\2\2\2\u00f5\u00f6\7\'\2"+
+ "\2\u00f6\u00f7\5\32\16\2\u00f7\u00f8\7\26\2\2\u00f8\u00f9\5\32\16\2\u00f9"+
+ "\u00fa\7\27\2\2\u00fa\u00fb\7(\2\2\u00fb\u00fc\7\26\2\2\u00fc\u00fd\5"+
+ "\32\16\2\u00fd\u00fe\7\27\2\2\u00fe!\3\2\2\2\u00ff\u0100\7$\2\2\u0100"+
+ "\u0101\5\32\16\2\u0101\u0102\7\26\2\2\u0102\u0104\5$\23\2\u0103\u0105"+
+ "\5(\25\2\u0104\u0103\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0106\3\2\2\2\u0106"+
+ "\u0107\7\27\2\2\u0107#\3\2\2\2\u0108\u010a\5&\24\2\u0109\u0108\3\2\2\2"+
+ "\u010a\u010d\3\2\2\2\u010b\u0109\3\2\2\2\u010b\u010c\3\2\2\2\u010c%\3"+
+ "\2\2\2\u010d\u010b\3\2\2\2\u010e\u010f\7&\2\2\u010f\u0110\5\62\32\2\u0110"+
+ "\u0111\7\37\2\2\u0111\u0112\5\32\16\2\u0112\'\3\2\2\2\u0113\u0114\7(\2"+
+ "\2\u0114\u0115\7\37\2\2\u0115\u0116\5\32\16\2\u0116)\3\2\2\2\u0117\u0118"+
+ "\7\"\2\2\u0118\u0119\7\60\2\2\u0119\u011a\7!\2\2\u011a\u011b\5\32\16\2"+
+ "\u011b+\3\2\2\2\u011c\u011d\7\30\2\2\u011d\u011e\5\62\32\2\u011e\u011f"+
+ "\7\31\2\2\u011f-\3\2\2\2\u0120\u0122\7\32\2\2\u0121\u0123\5\62\32\2\u0122"+
+ "\u0121\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125\7\33"+
+ "\2\2\u0125/\3\2\2\2\u0126\u0127\7\26\2\2\u0127\u0128\5:\36\2\u0128\u0129"+
+ "\7\27\2\2\u0129\61\3\2\2\2\u012a\u012f\5\32\16\2\u012b\u012c\7\35\2\2"+
+ "\u012c\u012e\5\32\16\2\u012d\u012b\3\2\2\2\u012e\u0131\3\2\2\2\u012f\u012d"+
+ "\3\2\2\2\u012f\u0130\3\2\2\2\u0130\63\3\2\2\2\u0131\u012f\3\2\2\2\u0132"+
+ "\u0137\5\66\34\2\u0133\u0134\7\35\2\2\u0134\u0136\5\66\34\2\u0135\u0133"+
+ "\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138"+
+ "\65\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u013d\7\60\2\2\u013b\u013c\7!\2"+
+ "\2\u013c\u013e\5\32\16\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e"+
+ "\u0141\3\2\2\2\u013f\u0141\5\32\16\2\u0140\u013a\3\2\2\2\u0140\u013f\3"+
+ "\2\2\2\u0141\67\3\2\2\2\u0142\u0143\7\60\2\2\u0143\u0144\7\34\2\2\u0144"+
+ "\u0145\5\32\16\2\u01459\3\2\2\2\u0146\u014b\58\35\2\u0147\u0148\7\35\2"+
+ "\2\u0148\u014a\58\35\2\u0149\u0147\3\2\2\2\u014a\u014d\3\2\2\2\u014b\u0149"+
+ "\3\2\2\2\u014b\u014c\3\2\2\2\u014c;\3\2\2\2\u014d\u014b\3\2\2\2\u014e"+
+ "\u014f\7*\2\2\u014f\u0153\7\26\2\2\u0150\u0152\5\32\16\2\u0151\u0150\3"+
+ "\2\2\2\u0152\u0155\3\2\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154"+
+ "\u0156\3\2\2\2\u0155\u0153\3\2\2\2\u0156\u0157\7\27\2\2\u0157=\3\2\2\2"+
+ "\33AEK[aktz\u0081\u008a\u0097\u00db\u00de\u00e0\u00e5\u00f3\u0104\u010b"+
+ "\u0122\u012f\u0137\u013d\u0140\u014b\u0153";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java b/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
index 83e5f60..d2bf9a4 100644
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
+++ b/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
@@ -90,6 +90,12 @@ public interface PiccodeScriptVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitExpr(PiccodeScriptParser.ExprContext ctx);
+ /**
+ * Visit a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
/**
* Visit a parse tree produced by {@link PiccodeScriptParser#unary}.
* @param ctx the parse tree
From 6bdfa8bb5ac098043a57f4030f08dee5ce131c3b Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Fri, 23 May 2025 10:27:39 +0200
Subject: [PATCH 06/17] antlr4: Minor edits
---
src/main/antlr4/PiccodeScript.g4 | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/main/antlr4/PiccodeScript.g4 b/src/main/antlr4/PiccodeScript.g4
index 3835d34..c404d89 100644
--- a/src/main/antlr4/PiccodeScript.g4
+++ b/src/main/antlr4/PiccodeScript.g4
@@ -53,6 +53,7 @@ expr_stmt: expr;
expr
: expr LPAREN call_expr_list? RPAREN
| var_decl
+ | closure_decl
| expr DOT expr
| expr PIPE expr
| expr OR expr
@@ -69,6 +70,7 @@ expr
| expr BAND expr
| expr MUL expr
| expr DIV expr
+ | expr MOD expr
| expr ADD expr
| expr SUB expr
| expr DOT expr
@@ -86,6 +88,7 @@ expr
| STRING
;
+closure_decl: BOR arg_list? BOR ARROW expr;
unary:
EXCLAIM expr
@@ -126,6 +129,7 @@ ADD: '+';
SUB: '-';
MUL: '*';
DIV: '/';
+MOD: '%';
GT: '>';
GE: '>=';
From a22e07300b6ac45d9533bc2d7963a71be478a4fe Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Fri, 23 May 2025 10:29:18 +0200
Subject: [PATCH 07/17] ast: Fix some minor issues
---
src/main/java/org/piccode/ast/BinOpAst.java | 14 +++++++--
.../java/org/piccode/ast/DotOperationAst.java | 7 ++++-
.../java/org/piccode/ast/PiccodeVisitor.java | 30 +++++++++++++++++--
src/main/java/org/piccode/ast/WhenAst.java | 25 +++++++++-------
4 files changed, 60 insertions(+), 16 deletions(-)
diff --git a/src/main/java/org/piccode/ast/BinOpAst.java b/src/main/java/org/piccode/ast/BinOpAst.java
index 0072f3d..0c26bd5 100644
--- a/src/main/java/org/piccode/ast/BinOpAst.java
+++ b/src/main/java/org/piccode/ast/BinOpAst.java
@@ -37,18 +37,23 @@ public PiccodeValue execute() {
double result = 0;
if (op.equals("+")) {
result = (double) lf.raw() + (double) rh.raw();
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("-")) {
result = (double) lf.raw() - (double) rh.raw();
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("*")) {
result = (double) lf.raw() * (double) rh.raw();
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("/")) {
result = (double) lf.raw() / (double) rh.raw();
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("%")) {
result = (double) lf.raw() % (double) rh.raw();
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals(">")) {
@@ -69,19 +74,22 @@ public PiccodeValue execute() {
if (op.equals("<<")) {
result = ((int) (double)lf.raw()) << ((int) (double)rh.raw());
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals(">>")) {
result = ((int) (double)lf.raw()) >> ((int) (double)rh.raw());
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("|")) {
result = ((int) (double)lf.raw()) | ((int) (double)rh.raw());
+ return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("&")) {
result = ((int) (double)lf.raw()) & ((int) (double)rh.raw());
+ return new PiccodeNumber(String.valueOf(result));
}
- return new PiccodeNumber(String.valueOf(result));
}
if (op.equals("+")) {
@@ -90,11 +98,11 @@ public PiccodeValue execute() {
}
if (op.equals("==")) {
- return new PiccodeBoolean(left.raw() == right.raw() ? "true" : "false");
+ return new PiccodeBoolean(left.equals(right) ? "true" : "false");
}
if (op.equals("!=")) {
- return new PiccodeBoolean(left.raw() == right.raw() ? "true" : "false");
+ return new PiccodeBoolean(left.equals(right) ? "true" : "false");
}
throw new PiccodeException("Invalid operator: " + op + " " + left.getClass() + " vs " + right.getClass());
diff --git a/src/main/java/org/piccode/ast/DotOperationAst.java b/src/main/java/org/piccode/ast/DotOperationAst.java
index 28ae4e6..a22ec32 100644
--- a/src/main/java/org/piccode/ast/DotOperationAst.java
+++ b/src/main/java/org/piccode/ast/DotOperationAst.java
@@ -6,6 +6,7 @@
import org.piccode.rt.PiccodeModule;
import org.piccode.rt.PiccodeNumber;
import org.piccode.rt.PiccodeObject;
+import org.piccode.rt.PiccodeString;
import org.piccode.rt.PiccodeTuple;
import org.piccode.rt.PiccodeValue;
@@ -45,7 +46,11 @@ public PiccodeValue execute() {
if (left instanceof PiccodeArray arr && rhs instanceof IdentifierAst id && id.text.equals("len")) {
return new PiccodeNumber("" + arr.array().length);
- }
+ }
+
+ if (left instanceof PiccodeString str && rhs instanceof IdentifierAst id && id.text.equals("len")) {
+ return new PiccodeNumber("" + str.toString().length());
+ }
else if (left instanceof PiccodeArray arr){
return processArrayIndexing(arr.array(), rhs.execute());
diff --git a/src/main/java/org/piccode/ast/PiccodeVisitor.java b/src/main/java/org/piccode/ast/PiccodeVisitor.java
index 42a70c5..b110072 100644
--- a/src/main/java/org/piccode/ast/PiccodeVisitor.java
+++ b/src/main/java/org/piccode/ast/PiccodeVisitor.java
@@ -31,6 +31,19 @@ public Ast visitStmts(StmtsContext ctx) {
return new StatementList(stmts);
}
+ @Override
+ public Ast visitClosure_decl(Closure_declContext ctx) {
+
+ var args = visitArgs(ctx.arg_list());
+ var body = visitExpr(ctx.expr());
+
+ if (args.isEmpty()) {
+ return new ClosureAst(null, body);
+ }
+
+ return new ClosureAst(args, body);
+ }
+
@Override
public Ast visitFunc(FuncContext ctx) {
var tok = ctx.ID().getSymbol();
@@ -48,18 +61,23 @@ public Ast visitFunc(FuncContext ctx) {
public List visitFuncArgs(Func_argsContext ctx) {
var args = new ArrayList();
-
if (ctx.arg_list() == null) {
return args;
}
- for (var arg : ctx.arg_list().arg()) {
+ return visitArgs(ctx.arg_list());
+ }
+
+ public List visitArgs(Arg_listContext ctx) {
+ var args = new ArrayList();
+ for (var arg : ctx.arg()) {
var _arg = (Arg) visitArg(arg);
args.add(_arg);
}
return args;
}
+
@Override
public Ast visitArg(ArgContext ctx) {
var name = ctx.ID().getText();
@@ -183,6 +201,10 @@ public Ast visitExpr(ExprContext expr) {
return visitVar_decl(expr.var_decl());
}
+ if (expr.closure_decl() != null) {
+ return visitClosure_decl(expr.closure_decl());
+ }
+
if (expr.when_expr() != null) {
return visitWhen_expr(expr.when_expr());
}
@@ -211,6 +233,10 @@ public Ast visitExpr(ExprContext expr) {
return visitBinOp("/", expr);
}
+ if (expr.MOD() != null) {
+ return visitBinOp("%", expr);
+ }
+
if (expr.GT() != null) {
return visitBinOp(">", expr);
}
diff --git a/src/main/java/org/piccode/ast/WhenAst.java b/src/main/java/org/piccode/ast/WhenAst.java
index 61fe5f3..8990cb6 100644
--- a/src/main/java/org/piccode/ast/WhenAst.java
+++ b/src/main/java/org/piccode/ast/WhenAst.java
@@ -5,7 +5,6 @@
import org.piccode.rt.*;
import java.util.*;
-
/**
*
* @author hexaredecimal
@@ -43,12 +42,16 @@ public PiccodeValue execute() {
for (var match_case : cases) {
var tempSymtable = new HashMap();
if (isMatching(match_case.match, cond_value, tempSymtable)) {
- Context.top.pushStack();
- for (var entry : tempSymtable.entrySet()) {
- Context.top.putLocal(entry.getKey(), entry.getValue());
+ if (!tempSymtable.isEmpty()) {
+ Context.top.pushStack();
+ for (var entry : tempSymtable.entrySet()) {
+ Context.top.putLocal(entry.getKey(), entry.getValue());
+ }
}
var result = match_case.value.execute();
- Context.top.dropStackFrame();
+ if (!tempSymtable.isEmpty()) {
+ Context.top.dropStackFrame();
+ }
return result;
}
}
@@ -71,20 +74,22 @@ private boolean isMatching(List patterns, PiccodeValue cond_value, Map temp) {
if (pattern instanceof IdentifierAst id) {
- temp.put(id.text, value);
+ if (!id.text.equals("_")) {
+ temp.put(id.text, value);
+ }
return true;
}
-
+
if (pattern instanceof NumberAst lit) {
var litVal = lit.execute();
- return Objects.equals(litVal, value);
+ return litVal.equals(value);
}
-
+
if (pattern instanceof StringAst lit) {
var litVal = lit.execute();
return Objects.equals(litVal, value);
}
-
+
if (pattern instanceof TupleAst tup && value instanceof PiccodeTuple vTup) {
var items = tup.nodes;
var vItems = vTup.nodes;
From b93e85c1e3c4378b39791a581604c4e3a6b2ded6 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Fri, 23 May 2025 10:29:45 +0200
Subject: [PATCH 08/17] pkg: Improves the standard library
---
pkg/array/array.pics | 85 +++++++++++++++++++++++++++++++++++++++++-
pkg/math/math.pics | 23 +++++++++---
pkg/number/number.pics | 28 ++++++++++++++
pkg/string/string.pics | 20 +++++++++-
pkg/tuple/tuple.pics | 28 ++++++++++++++
5 files changed, 176 insertions(+), 8 deletions(-)
create mode 100644 pkg/number/number.pics
diff --git a/pkg/array/array.pics b/pkg/array/array.pics
index 0785474..18bde83 100644
--- a/pkg/array/array.pics
+++ b/pkg/array/array.pics
@@ -1,6 +1,87 @@
module Array {
- function concat(left=[], right=[]) = pic_nat_array_concat(left, right)
+
+ function concat(a=[], b=[]) =
+ when a {
+ is [] -> b
+ is x:rest -> x : concat(rest, b)
+ }
+
function toString(arr=[]) = pic_nat_array_tostring(arr)
- function join(array=[], sep=",") = pic_nat_array_join(array, sep)
+
+ function join(xs=[], sep=",") =
+ when xs {
+ is [] -> ""
+ is [x] -> x
+ is x:rest -> x + sep + join(rest, sep)
+ }
+
+ function zip(xs=[], ys=[]) =
+ when [xs, ys] {
+ is [[], _] -> []
+ is [_, []] -> []
+ is [x:xs1, y:ys1] -> [ [x, y] ] : zip(xs1, ys1)
+ }
+
+ function map(xs=[], f) =
+ when xs{
+ is [] -> []
+ is x:rest -> f(x) : map(rest, f)
+ }
+
+ function filter(xs=[], pred) =
+ when xs {
+ is [] -> []
+ is x:rest ->
+ if pred(x) {
+ x : filter(rest, pred)
+ } else {
+ filter(rest, pred)
+ }
+ }
+
+ function reduce(xs=[], f, acc) =
+ when xs {
+ is [] -> acc
+ is x:rest -> reduce(rest, f, f(acc, x))
+ }
+
+ function length(xs=[]) = xs.len
+
+ function reverse(xs=[]) = Array.reduce(xs, |acc, x| -> x : acc, [])
+
+ function flatMap(xs=[], f) = Array.reduce(xs, |acc, x| -> concat(acc, f(x)), [])
+
+ function take(xs=[], n=0) =
+ if n <= 0 {
+ []
+ } else {
+ when xs {
+ is [] -> []
+ is x:rest -> x : take(rest, n - 1)
+ }
+ }
+
+ function drop(xs=[], n=0) =
+ if n <= 0 {
+ xs
+ } else {
+ when xs {
+ is [] -> []
+ is _:rest -> drop(rest, n - 1)
+ }
+ }
+
+ function contains(xs=[], value) =
+ when xs {
+ is [] -> false
+ is x:rest -> if x == value { true } else { contains(rest, value) }
+ }
+
+ function indexOf(xs=[], value, i=0) =
+ when xs {
+ is [] -> -1
+ is x:rest -> if x == value { i } else { indexOf(rest, value, i + 1) }
+ }
+
}
diff --git a/pkg/math/math.pics b/pkg/math/math.pics
index 08ec6c5..e704b6c 100644
--- a/pkg/math/math.pics
+++ b/pkg/math/math.pics
@@ -20,12 +20,25 @@ module Math {
function pow(a=0, b=0) = pic_nat_pow(a, b)
function clamp(a=0, low=-1, high=1) =
- if a < low { low }
- else if a > high { high }
- else { a }
+ if a < low { low }
+ else {
+ if a > high { high }
+ else { a }
+ }
- function max(a=0,b=0) = if a > b { a } else { b }
- function min(a=0,b=0) = if a < b { a } else { b }
+ function max(a=0, b=0) = if a > b { a } else { b }
+ function min(a=0, b=0) = if a < b { a } else { b }
+
+ function degToRad(deg=0) = deg * (3.141592653589793 / 180)
+ function radToDeg(rad=0) = rad * (180 / 3.141592653589793)
+
+ function isEven(n=0) = (n % 2) == 0
+ function isOdd(n=0) = (n % 2) != 0
+
+ function factorial(n=0) =
+ if n <= 1 { 1 }
+ else { n * factorial(n - 1) }
+
}
diff --git a/pkg/number/number.pics b/pkg/number/number.pics
new file mode 100644
index 0000000..633dcb2
--- /dev/null
+++ b/pkg/number/number.pics
@@ -0,0 +1,28 @@
+module Number {
+
+ function isZero(n=0) = n == 0
+ function isPositive(n=0) = n > 0
+ function isNegative(n=0) = n < 0
+ function isEven(n=0) = (n % 2) == 0
+ function isOdd(n=0) = (n % 2) != 0
+
+ function toString(n=0) = n + ""
+
+ function add(a=0, b=0) = a + b
+ function sub(a=0, b=0) = a - b
+ function mul(a=0, b=0) = a * b
+ function div(a=0, b=1) = a / b
+ function mod(a=0, b=1) = a % b
+ function pow(a=0, b=0) = pic_nat_pow(a, b)
+
+ function inc(n=0) = n + 1
+ function dec(n=0) = n - 1
+
+ function and(a=0, b=0) = a & b
+ function or(a=0, b=0) = a | b
+
+ function shl(a=0, b=0) = a << b
+ function shr(a=0, b=0) = a >> b
+
+
+}
diff --git a/pkg/string/string.pics b/pkg/string/string.pics
index 9aa14ea..4efaa07 100644
--- a/pkg/string/string.pics
+++ b/pkg/string/string.pics
@@ -5,8 +5,26 @@ module String {
function trim(value="") = pic_nat_stringtrim(value)
function uppercase(value="") = pic_nat_stringuppercase(value)
function lowercase(value="") = pic_nat_stringlowercase(value)
- function length(value="") = pic_nat_stringlength(value)
+ function length(xs="")= xs.len
function split(value="", delim="") = pic_nat_stringsplit(value, delim)
+
+ function repeat(str="", n=0) =
+ if n <= 0 { "" }
+ else { str + repeat(str, n - 1) }
+
+ function padLeft(str="", total=0, char=" ") = do {
+ let padCount = total - String.length(str)
+ if padCount <= 0 { str }
+ else { repeat(char, padCount) + str }
+ }
+
+ function padRight(str="", total=0, char=" ") = do {
+ let padCount = total - String.length(str)
+ if padCount <= 0 { str }
+ else { str + repeat(char, padCount) }
+ }
+
+
}
diff --git a/pkg/tuple/tuple.pics b/pkg/tuple/tuple.pics
index 8930fc0..3d82add 100644
--- a/pkg/tuple/tuple.pics
+++ b/pkg/tuple/tuple.pics
@@ -1,5 +1,33 @@
module Tuple {
+
function size(tup=(0, 0)) = pic_nat_tuplesize(tup)
+
function toArray(tup=(0, 0)) = pic_nat_tupletoarray(tup)
+
+ function map(tup=(0, 0), f) =
+ when tup {
+ is (a, b) -> (f(a), f(b))
+ }
+
+ function zipWith(t1=(0, 0), t2=(0, 0), f) =
+ when [t1, t2] {
+ is [(a1, b1), (a2, b2)] -> (f(a1, a2), f(b1, b2))
+ }
+
+ function swap(tup=(0, 0)) =
+ when tup {
+ is (a, b) -> (b, a)
+ }
+
+ function equals(t1=(0, 0), t2=(0, 0)) =
+ when [t1, t2] {
+ is [(a1, b1), (a2, b2)] -> (a1 == a2 and b1 == b2)
+ }
+
+ function toString(tup=(0, 0)) =
+ when tup {
+ is (a, b) -> "(" + a + ", " + b + ")"
+ }
+
}
\ No newline at end of file
From 093a0aa80dac167b5a51b8aa3bc41b9488d687c6 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Fri, 23 May 2025 10:30:14 +0200
Subject: [PATCH 09/17] rt: Fixed the runtime
---
src/main/java/org/piccode/rt/Context.java | 6 ++++++
src/main/java/org/piccode/rt/PiccodeNumber.java | 4 +++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/piccode/rt/Context.java b/src/main/java/org/piccode/rt/Context.java
index 47cbfea..81ec5e9 100644
--- a/src/main/java/org/piccode/rt/Context.java
+++ b/src/main/java/org/piccode/rt/Context.java
@@ -23,6 +23,12 @@ public static void addGlobal(String name, PiccodeValue value) {
}
public void pushStack() {
+ if (!scope_stack.isEmpty()) {
+ var _top = scope_stack.peek();
+ var new_stack = new HashMap<>(_top);
+ scope_stack.push(new_stack);
+ return;
+ }
scope_stack.push(new HashMap<>());
}
diff --git a/src/main/java/org/piccode/rt/PiccodeNumber.java b/src/main/java/org/piccode/rt/PiccodeNumber.java
index 4dc67ee..b059fa1 100644
--- a/src/main/java/org/piccode/rt/PiccodeNumber.java
+++ b/src/main/java/org/piccode/rt/PiccodeNumber.java
@@ -37,7 +37,9 @@ public boolean equals(Object obj) {
if (!(obj instanceof PiccodeNumber)) return false;
var num = (PiccodeNumber) obj;
- return num.number.equals(this.number);
+ var lhs = ((Double) this.raw()).doubleValue();
+ var rhs = ((Double) num.raw()).doubleValue();
+ return lhs == rhs;
}
From d44d8e1379654e60c9aaf67fe69fb8e9ee218e5c Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 13:56:56 +0200
Subject: [PATCH 10/17] piccode: Removed the compiler from the project and made
it its own thing
---
src/main/antlr4/PiccodeScript.g4 | 191 --
.../org/editor/errors/IDEErrorListener.java | 39 -
.../org/piccode/antlr4/PiccodeScript.interp | 135 -
.../org/piccode/antlr4/PiccodeScript.tokens | 88 -
.../antlr4/PiccodeScriptBaseListener.java | 401 ---
.../antlr4/PiccodeScriptBaseVisitor.java | 226 --
.../piccode/antlr4/PiccodeScriptLexer.interp | 158 -
.../piccode/antlr4/PiccodeScriptLexer.java | 228 --
.../piccode/antlr4/PiccodeScriptLexer.tokens | 88 -
.../piccode/antlr4/PiccodeScriptListener.java | 312 --
.../piccode/antlr4/PiccodeScriptParser.java | 2665 -----------------
.../piccode/antlr4/PiccodeScriptVisitor.java | 195 --
src/main/java/org/piccode/ast/Arg.java | 36 -
src/main/java/org/piccode/ast/ArrayAst.java | 44 -
src/main/java/org/piccode/ast/Ast.java | 11 -
src/main/java/org/piccode/ast/BinOpAst.java | 110 -
src/main/java/org/piccode/ast/CallAst.java | 74 -
src/main/java/org/piccode/ast/ClosureAst.java | 45 -
src/main/java/org/piccode/ast/DoExprAst.java | 41 -
.../java/org/piccode/ast/DotOperationAst.java | 155 -
.../java/org/piccode/ast/FunctionAst.java | 50 -
.../java/org/piccode/ast/IdentifierAst.java | 33 -
.../java/org/piccode/ast/IfExpression.java | 51 -
src/main/java/org/piccode/ast/ImportAst.java | 95 -
.../java/org/piccode/ast/ListConstAst.java | 62 -
src/main/java/org/piccode/ast/ModuleAst.java | 46 -
.../java/org/piccode/ast/NamedCallArg.java | 31 -
src/main/java/org/piccode/ast/NumberAst.java | 27 -
src/main/java/org/piccode/ast/ObjectAst.java | 52 -
.../java/org/piccode/ast/PiccodeVisitor.java | 518 ----
src/main/java/org/piccode/ast/PipeAst.java | 45 -
.../java/org/piccode/ast/StatementList.java | 37 -
src/main/java/org/piccode/ast/StringAst.java | 77 -
src/main/java/org/piccode/ast/TupleAst.java | 44 -
src/main/java/org/piccode/ast/UnaryAst.java | 57 -
src/main/java/org/piccode/ast/UnitAst.java | 21 -
src/main/java/org/piccode/ast/VarDecl.java | 31 -
src/main/java/org/piccode/ast/WhenAst.java | 147 -
src/main/java/org/piccode/ast/WhenCase.java | 31 -
.../java/org/piccode/backend/Compiler.java | 96 -
src/main/java/org/piccode/rt/Context.java | 55 -
src/main/java/org/piccode/rt/Evaluator.java | 13 -
.../java/org/piccode/rt/NativeFunction.java | 101 -
.../java/org/piccode/rt/PiccodeArray.java | 67 -
.../java/org/piccode/rt/PiccodeBoolean.java | 50 -
.../java/org/piccode/rt/PiccodeClosure.java | 93 -
.../java/org/piccode/rt/PiccodeException.java | 13 -
.../java/org/piccode/rt/PiccodeModule.java | 57 -
.../java/org/piccode/rt/PiccodeNumber.java | 46 -
.../java/org/piccode/rt/PiccodeObject.java | 69 -
.../java/org/piccode/rt/PiccodeString.java | 48 -
.../java/org/piccode/rt/PiccodeTuple.java | 64 -
src/main/java/org/piccode/rt/PiccodeUnit.java | 20 -
.../java/org/piccode/rt/PiccodeValue.java | 9 -
.../rt/modules/NativeFunctionFactory.java | 37 -
.../rt/modules/PiccodeArrayModule.java | 42 -
.../rt/modules/PiccodeColorModule.java | 31 -
.../piccode/rt/modules/PiccodeGfxModule.java | 127 -
.../piccode/rt/modules/PiccodeIOModule.java | 33 -
.../piccode/rt/modules/PiccodeMathModule.java | 95 -
.../rt/modules/PiccodeResourceModule.java | 24 -
.../rt/modules/PiccodeStringModule.java | 56 -
.../rt/modules/PiccodeTupleModule.java | 32 -
src/test/java/org/piccode/ast/TopLevel.java | 95 -
src/test/java/org/piccode/rt/Runtime.java | 75 -
65 files changed, 8145 deletions(-)
delete mode 100644 src/main/antlr4/PiccodeScript.g4
delete mode 100644 src/main/java/org/editor/errors/IDEErrorListener.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScript.interp
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScript.tokens
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
delete mode 100644 src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
delete mode 100644 src/main/java/org/piccode/ast/Arg.java
delete mode 100644 src/main/java/org/piccode/ast/ArrayAst.java
delete mode 100644 src/main/java/org/piccode/ast/Ast.java
delete mode 100644 src/main/java/org/piccode/ast/BinOpAst.java
delete mode 100644 src/main/java/org/piccode/ast/CallAst.java
delete mode 100644 src/main/java/org/piccode/ast/ClosureAst.java
delete mode 100644 src/main/java/org/piccode/ast/DoExprAst.java
delete mode 100644 src/main/java/org/piccode/ast/DotOperationAst.java
delete mode 100644 src/main/java/org/piccode/ast/FunctionAst.java
delete mode 100644 src/main/java/org/piccode/ast/IdentifierAst.java
delete mode 100644 src/main/java/org/piccode/ast/IfExpression.java
delete mode 100644 src/main/java/org/piccode/ast/ImportAst.java
delete mode 100644 src/main/java/org/piccode/ast/ListConstAst.java
delete mode 100644 src/main/java/org/piccode/ast/ModuleAst.java
delete mode 100644 src/main/java/org/piccode/ast/NamedCallArg.java
delete mode 100644 src/main/java/org/piccode/ast/NumberAst.java
delete mode 100644 src/main/java/org/piccode/ast/ObjectAst.java
delete mode 100644 src/main/java/org/piccode/ast/PiccodeVisitor.java
delete mode 100644 src/main/java/org/piccode/ast/PipeAst.java
delete mode 100644 src/main/java/org/piccode/ast/StatementList.java
delete mode 100644 src/main/java/org/piccode/ast/StringAst.java
delete mode 100644 src/main/java/org/piccode/ast/TupleAst.java
delete mode 100644 src/main/java/org/piccode/ast/UnaryAst.java
delete mode 100644 src/main/java/org/piccode/ast/UnitAst.java
delete mode 100644 src/main/java/org/piccode/ast/VarDecl.java
delete mode 100644 src/main/java/org/piccode/ast/WhenAst.java
delete mode 100644 src/main/java/org/piccode/ast/WhenCase.java
delete mode 100644 src/main/java/org/piccode/backend/Compiler.java
delete mode 100644 src/main/java/org/piccode/rt/Context.java
delete mode 100644 src/main/java/org/piccode/rt/Evaluator.java
delete mode 100644 src/main/java/org/piccode/rt/NativeFunction.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeArray.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeBoolean.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeClosure.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeException.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeModule.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeNumber.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeObject.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeString.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeTuple.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeUnit.java
delete mode 100644 src/main/java/org/piccode/rt/PiccodeValue.java
delete mode 100644 src/main/java/org/piccode/rt/modules/NativeFunctionFactory.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeArrayModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeColorModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeGfxModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeIOModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeMathModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeResourceModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeStringModule.java
delete mode 100644 src/main/java/org/piccode/rt/modules/PiccodeTupleModule.java
delete mode 100644 src/test/java/org/piccode/ast/TopLevel.java
delete mode 100644 src/test/java/org/piccode/rt/Runtime.java
diff --git a/src/main/antlr4/PiccodeScript.g4 b/src/main/antlr4/PiccodeScript.g4
deleted file mode 100644
index c404d89..0000000
--- a/src/main/antlr4/PiccodeScript.g4
+++ /dev/null
@@ -1,191 +0,0 @@
-grammar PiccodeScript;
-
-options {
- language = Java;
-}
-
-@header {
- package org.piccode.antlr4;
-}
-
-stmts: stmt*
- | EOF;
-
-stmt:
- import_module
- | func
- | module
- | expr_stmt;
-
-import_module:
- IMPORT ID COLON ID;
-
-module:
- MODULE ID LBRACE module_stmts RBRACE;
-
-module_stmts:
- module_stmt*;
-
-module_stmt:
- func
- | var_decl
- | module;
-
-func: FUNCTION ID func_args ASSIGN expr ;
-
-func_args: '(' arg_list? ')' ;
-
-arg_list: arg (',' arg)* ;
-
-arg: ID (ASSIGN literal_expr)? ; // only allow literals in default values
-
-
-literal_expr :
- NUMBER
- | STRING
- |array
- | tuple
- | object
- ;
-
-expr_stmt: expr;
- // parser rules
-expr
- : expr LPAREN call_expr_list? RPAREN
- | var_decl
- | closure_decl
- | expr DOT expr
- | expr PIPE expr
- | expr OR expr
- | expr AND expr
- | expr EQ expr
- | expr NE expr
- | expr LT expr
- | expr LE expr
- | expr GT expr
- | expr GE expr
- | expr SHL expr
- | expr SHR expr
- | expr BOR expr
- | expr BAND expr
- | expr MUL expr
- | expr DIV expr
- | expr MOD expr
- | expr ADD expr
- | expr SUB expr
- | expr DOT expr
- | expr COLON expr
- | LPAREN expr? RPAREN
- | unary
- | if_expr
- | when_expr
- | do_expr
- | array
- | tuple
- | object
- | ID
- | NUMBER
- | STRING
- ;
-
-closure_decl: BOR arg_list? BOR ARROW expr;
-
-unary:
- EXCLAIM expr
- | SUB expr
- | TILDE expr
- | BAND expr;
-
-if_expr:
- IF expr LBRACE expr RBRACE ELSE LBRACE expr RBRACE;
-
-when_expr:
- WHEN expr LBRACE when_cases else_case? RBRACE;
-
-when_cases: when_case*;
-
-when_case: IS expr_list ARROW expr;
-
-else_case: ELSE ARROW expr;
-
-var_decl: LET ID ASSIGN expr;
-tuple: LPAREN expr_list RPAREN;
-array: LBRACKET expr_list? RBRACKET;
-object: LBRACE key_val_pairs RBRACE;
-
-expr_list: expr (COMMA expr)*;
-call_expr_list: call_expr (COMMA call_expr)*;
-
-call_expr: ID (ASSIGN expr)?
- | expr;
-
-key_val_pair: ID COLON expr;
-key_val_pairs: key_val_pair (COMMA key_val_pair)*;
-
-do_expr: DO LBRACE expr* RBRACE;
-
- // lexer rules
-ADD: '+';
-SUB: '-';
-MUL: '*';
-DIV: '/';
-MOD: '%';
-
-GT: '>';
-GE: '>=';
-LT: '<';
-LE: '<=';
-EQ: '==';
-NE: '!=';
-
-AND: '&&';
-OR: '||';
-
-SHL: '>>';
-SHR: '<<';
-BAND: '&';
-BOR: '|';
-EXCLAIM : '!';
-PIPE: '|>';
-
-LBRACE: '{';
-RBRACE: '}';
-LPAREN: '(';
-RPAREN: ')';
-LBRACKET: '[';
-RBRACKET: ']';
-COLON: ':';
-COMMA: ',';
-SEMI: ';';
-ARROW: '->';
-TILDE: '~';
-
-
-ASSIGN: '=';
-
-LET: 'let';
-FUNCTION: 'function';
-WHEN: 'when';
-IMPORT: 'import';
-IS: 'is';
-IF: 'if';
-ELSE: 'else';
-MODULE: 'module';
-DO: 'do';
-
-// Matches both integers and floats (e.g., 123, 45.67)
-NUMBER: [0-9]+ ('.' [0-9]+)?;
-
-// Matches strings like "hello world" or 'hello world'
-// Handles basic escaped quotes
-STRING: '"' (~["\\] | '\\' .)* '"'
-| '\'' (~['\\] | '\\' .)* '\'';
-
-DOT: '.';
-
-LINE_COMMENT: '//' ~[\r\n]* -> channel(HIDDEN);
-BLOCK_COMMENT: '/*' .*? '*/' -> channel(HIDDEN);
-
-
-ID: [a-zA-Z_][a-zA-Z0-9_]* ;
-WS: [ \t\r\n]+ -> channel(HIDDEN);
diff --git a/src/main/java/org/editor/errors/IDEErrorListener.java b/src/main/java/org/editor/errors/IDEErrorListener.java
deleted file mode 100644
index 9b4ac0e..0000000
--- a/src/main/java/org/editor/errors/IDEErrorListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.editor.errors;
-
-/**
- *
- * @author hexaredecimal
- */
-
-import java.util.ArrayList;
-import java.util.List;
-import org.antlr.v4.runtime.*;
-
-public class IDEErrorListener extends BaseErrorListener {
-
- public static class SyntaxErrorInfo {
-
- public final int line;
- public final int charPositionInLine;
- public final String message;
-
- public SyntaxErrorInfo(int line, int charPositionInLine, String message) {
- this.line = line;
- this.charPositionInLine = charPositionInLine;
- this.message = message;
- }
- }
-
- private final List syntaxErrors = new ArrayList<>();
-
- @Override
- public void syntaxError(Recognizer, ?> recognizer, Object offendingSymbol,
- int line, int charPositionInLine,
- String msg, RecognitionException e) {
- syntaxErrors.add(new SyntaxErrorInfo(line, charPositionInLine, msg));
- }
-
- public List getSyntaxErrorInfos() {
- return syntaxErrors;
- }
-}
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScript.interp b/src/main/java/org/piccode/antlr4/PiccodeScript.interp
deleted file mode 100644
index 3da7fb7..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScript.interp
+++ /dev/null
@@ -1,135 +0,0 @@
-token literal names:
-null
-'+'
-'-'
-'*'
-'/'
-'%'
-'>'
-'>='
-'<'
-'<='
-'=='
-'!='
-'&&'
-'||'
-'>>'
-'<<'
-'&'
-'|'
-'!'
-'|>'
-'{'
-'}'
-'('
-')'
-'['
-']'
-':'
-','
-';'
-'->'
-'~'
-'='
-'let'
-'function'
-'when'
-'import'
-'is'
-'if'
-'else'
-'module'
-'do'
-null
-null
-'.'
-null
-null
-null
-null
-
-token symbolic names:
-null
-ADD
-SUB
-MUL
-DIV
-MOD
-GT
-GE
-LT
-LE
-EQ
-NE
-AND
-OR
-SHL
-SHR
-BAND
-BOR
-EXCLAIM
-PIPE
-LBRACE
-RBRACE
-LPAREN
-RPAREN
-LBRACKET
-RBRACKET
-COLON
-COMMA
-SEMI
-ARROW
-TILDE
-ASSIGN
-LET
-FUNCTION
-WHEN
-IMPORT
-IS
-IF
-ELSE
-MODULE
-DO
-NUMBER
-STRING
-DOT
-LINE_COMMENT
-BLOCK_COMMENT
-ID
-WS
-
-rule names:
-stmts
-stmt
-import_module
-module
-module_stmts
-module_stmt
-func
-func_args
-arg_list
-arg
-literal_expr
-expr_stmt
-expr
-closure_decl
-unary
-if_expr
-when_expr
-when_cases
-when_case
-else_case
-var_decl
-tuple
-array
-object
-expr_list
-call_expr_list
-call_expr
-key_val_pair
-key_val_pairs
-do_expr
-
-
-atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 49, 345, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 3, 2, 7, 2, 64, 10, 2, 12, 2, 14, 2, 67, 11, 2, 3, 2, 5, 2, 70, 10, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 76, 10, 3, 3, 4, 3, 4, 3, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 7, 6, 90, 10, 6, 12, 6, 14, 6, 93, 11, 6, 3, 7, 3, 7, 3, 7, 5, 7, 98, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 5, 9, 108, 10, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 7, 10, 115, 10, 10, 12, 10, 14, 10, 118, 11, 10, 3, 11, 3, 11, 3, 11, 5, 11, 123, 10, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 130, 10, 12, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 139, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 152, 10, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 220, 10, 14, 3, 14, 7, 14, 223, 10, 14, 12, 14, 14, 14, 226, 11, 14, 3, 15, 3, 15, 5, 15, 230, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 5, 16, 244, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 5, 18, 261, 10, 18, 3, 18, 3, 18, 3, 19, 7, 19, 266, 10, 19, 12, 19, 14, 19, 269, 11, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 5, 24, 291, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 7, 26, 302, 10, 26, 12, 26, 14, 26, 305, 11, 26, 3, 27, 3, 27, 3, 27, 7, 27, 310, 10, 27, 12, 27, 14, 27, 313, 11, 27, 3, 28, 3, 28, 3, 28, 5, 28, 318, 10, 28, 3, 28, 5, 28, 321, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 7, 30, 330, 10, 30, 12, 30, 14, 30, 333, 11, 30, 3, 31, 3, 31, 3, 31, 7, 31, 338, 10, 31, 12, 31, 14, 31, 341, 11, 31, 3, 31, 3, 31, 3, 31, 2, 3, 26, 32, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 2, 2, 2, 378, 2, 69, 3, 2, 2, 2, 4, 75, 3, 2, 2, 2, 6, 77, 3, 2, 2, 2, 8, 82, 3, 2, 2, 2, 10, 91, 3, 2, 2, 2, 12, 97, 3, 2, 2, 2, 14, 99, 3, 2, 2, 2, 16, 105, 3, 2, 2, 2, 18, 111, 3, 2, 2, 2, 20, 119, 3, 2, 2, 2, 22, 129, 3, 2, 2, 2, 24, 131, 3, 2, 2, 2, 26, 151, 3, 2, 2, 2, 28, 227, 3, 2, 2, 2, 30, 243, 3, 2, 2, 2, 32, 245, 3, 2, 2, 2, 34, 255, 3, 2, 2, 2, 36, 267, 3, 2, 2, 2, 38, 270, 3, 2, 2, 2, 40, 275, 3, 2, 2, 2, 42, 279, 3, 2, 2, 2, 44, 284, 3, 2, 2, 2, 46, 288, 3, 2, 2, 2, 48, 294, 3, 2, 2, 2, 50, 298, 3, 2, 2, 2, 52, 306, 3, 2, 2, 2, 54, 320, 3, 2, 2, 2, 56, 322, 3, 2, 2, 2, 58, 326, 3, 2, 2, 2, 60, 334, 3, 2, 2, 2, 62, 64, 5, 4, 3, 2, 63, 62, 3, 2, 2, 2, 64, 67, 3, 2, 2, 2, 65, 63, 3, 2, 2, 2, 65, 66, 3, 2, 2, 2, 66, 70, 3, 2, 2, 2, 67, 65, 3, 2, 2, 2, 68, 70, 7, 2, 2, 3, 69, 65, 3, 2, 2, 2, 69, 68, 3, 2, 2, 2, 70, 3, 3, 2, 2, 2, 71, 76, 5, 6, 4, 2, 72, 76, 5, 14, 8, 2, 73, 76, 5, 8, 5, 2, 74, 76, 5, 24, 13, 2, 75, 71, 3, 2, 2, 2, 75, 72, 3, 2, 2, 2, 75, 73, 3, 2, 2, 2, 75, 74, 3, 2, 2, 2, 76, 5, 3, 2, 2, 2, 77, 78, 7, 37, 2, 2, 78, 79, 7, 48, 2, 2, 79, 80, 7, 28, 2, 2, 80, 81, 7, 48, 2, 2, 81, 7, 3, 2, 2, 2, 82, 83, 7, 41, 2, 2, 83, 84, 7, 48, 2, 2, 84, 85, 7, 22, 2, 2, 85, 86, 5, 10, 6, 2, 86, 87, 7, 23, 2, 2, 87, 9, 3, 2, 2, 2, 88, 90, 5, 12, 7, 2, 89, 88, 3, 2, 2, 2, 90, 93, 3, 2, 2, 2, 91, 89, 3, 2, 2, 2, 91, 92, 3, 2, 2, 2, 92, 11, 3, 2, 2, 2, 93, 91, 3, 2, 2, 2, 94, 98, 5, 14, 8, 2, 95, 98, 5, 42, 22, 2, 96, 98, 5, 8, 5, 2, 97, 94, 3, 2, 2, 2, 97, 95, 3, 2, 2, 2, 97, 96, 3, 2, 2, 2, 98, 13, 3, 2, 2, 2, 99, 100, 7, 35, 2, 2, 100, 101, 7, 48, 2, 2, 101, 102, 5, 16, 9, 2, 102, 103, 7, 33, 2, 2, 103, 104, 5, 26, 14, 2, 104, 15, 3, 2, 2, 2, 105, 107, 7, 24, 2, 2, 106, 108, 5, 18, 10, 2, 107, 106, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 109, 3, 2, 2, 2, 109, 110, 7, 25, 2, 2, 110, 17, 3, 2, 2, 2, 111, 116, 5, 20, 11, 2, 112, 113, 7, 29, 2, 2, 113, 115, 5, 20, 11, 2, 114, 112, 3, 2, 2, 2, 115, 118, 3, 2, 2, 2, 116, 114, 3, 2, 2, 2, 116, 117, 3, 2, 2, 2, 117, 19, 3, 2, 2, 2, 118, 116, 3, 2, 2, 2, 119, 122, 7, 48, 2, 2, 120, 121, 7, 33, 2, 2, 121, 123, 5, 22, 12, 2, 122, 120, 3, 2, 2, 2, 122, 123, 3, 2, 2, 2, 123, 21, 3, 2, 2, 2, 124, 130, 7, 43, 2, 2, 125, 130, 7, 44, 2, 2, 126, 130, 5, 46, 24, 2, 127, 130, 5, 44, 23, 2, 128, 130, 5, 48, 25, 2, 129, 124, 3, 2, 2, 2, 129, 125, 3, 2, 2, 2, 129, 126, 3, 2, 2, 2, 129, 127, 3, 2, 2, 2, 129, 128, 3, 2, 2, 2, 130, 23, 3, 2, 2, 2, 131, 132, 5, 26, 14, 2, 132, 25, 3, 2, 2, 2, 133, 134, 8, 14, 1, 2, 134, 152, 5, 42, 22, 2, 135, 152, 5, 28, 15, 2, 136, 138, 7, 24, 2, 2, 137, 139, 5, 26, 14, 2, 138, 137, 3, 2, 2, 2, 138, 139, 3, 2, 2, 2, 139, 140, 3, 2, 2, 2, 140, 152, 7, 25, 2, 2, 141, 152, 5, 30, 16, 2, 142, 152, 5, 32, 17, 2, 143, 152, 5, 34, 18, 2, 144, 152, 5, 60, 31, 2, 145, 152, 5, 46, 24, 2, 146, 152, 5, 44, 23, 2, 147, 152, 5, 48, 25, 2, 148, 152, 7, 48, 2, 2, 149, 152, 7, 43, 2, 2, 150, 152, 7, 44, 2, 2, 151, 133, 3, 2, 2, 2, 151, 135, 3, 2, 2, 2, 151, 136, 3, 2, 2, 2, 151, 141, 3, 2, 2, 2, 151, 142, 3, 2, 2, 2, 151, 143, 3, 2, 2, 2, 151, 144, 3, 2, 2, 2, 151, 145, 3, 2, 2, 2, 151, 146, 3, 2, 2, 2, 151, 147, 3, 2, 2, 2, 151, 148, 3, 2, 2, 2, 151, 149, 3, 2, 2, 2, 151, 150, 3, 2, 2, 2, 152, 224, 3, 2, 2, 2, 153, 154, 12, 34, 2, 2, 154, 155, 7, 45, 2, 2, 155, 223, 5, 26, 14, 35, 156, 157, 12, 33, 2, 2, 157, 158, 7, 21, 2, 2, 158, 223, 5, 26, 14, 34, 159, 160, 12, 32, 2, 2, 160, 161, 7, 15, 2, 2, 161, 223, 5, 26, 14, 33, 162, 163, 12, 31, 2, 2, 163, 164, 7, 14, 2, 2, 164, 223, 5, 26, 14, 32, 165, 166, 12, 30, 2, 2, 166, 167, 7, 12, 2, 2, 167, 223, 5, 26, 14, 31, 168, 169, 12, 29, 2, 2, 169, 170, 7, 13, 2, 2, 170, 223, 5, 26, 14, 30, 171, 172, 12, 28, 2, 2, 172, 173, 7, 10, 2, 2, 173, 223, 5, 26, 14, 29, 174, 175, 12, 27, 2, 2, 175, 176, 7, 11, 2, 2, 176, 223, 5, 26, 14, 28, 177, 178, 12, 26, 2, 2, 178, 179, 7, 8, 2, 2, 179, 223, 5, 26, 14, 27, 180, 181, 12, 25, 2, 2, 181, 182, 7, 9, 2, 2, 182, 223, 5, 26, 14, 26, 183, 184, 12, 24, 2, 2, 184, 185, 7, 16, 2, 2, 185, 223, 5, 26, 14, 25, 186, 187, 12, 23, 2, 2, 187, 188, 7, 17, 2, 2, 188, 223, 5, 26, 14, 24, 189, 190, 12, 22, 2, 2, 190, 191, 7, 19, 2, 2, 191, 223, 5, 26, 14, 23, 192, 193, 12, 21, 2, 2, 193, 194, 7, 18, 2, 2, 194, 223, 5, 26, 14, 22, 195, 196, 12, 20, 2, 2, 196, 197, 7, 5, 2, 2, 197, 223, 5, 26, 14, 21, 198, 199, 12, 19, 2, 2, 199, 200, 7, 6, 2, 2, 200, 223, 5, 26, 14, 20, 201, 202, 12, 18, 2, 2, 202, 203, 7, 7, 2, 2, 203, 223, 5, 26, 14, 19, 204, 205, 12, 17, 2, 2, 205, 206, 7, 3, 2, 2, 206, 223, 5, 26, 14, 18, 207, 208, 12, 16, 2, 2, 208, 209, 7, 4, 2, 2, 209, 223, 5, 26, 14, 17, 210, 211, 12, 15, 2, 2, 211, 212, 7, 45, 2, 2, 212, 223, 5, 26, 14, 16, 213, 214, 12, 14, 2, 2, 214, 215, 7, 28, 2, 2, 215, 223, 5, 26, 14, 15, 216, 217, 12, 37, 2, 2, 217, 219, 7, 24, 2, 2, 218, 220, 5, 52, 27, 2, 219, 218, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 221, 3, 2, 2, 2, 221, 223, 7, 25, 2, 2, 222, 153, 3, 2, 2, 2, 222, 156, 3, 2, 2, 2, 222, 159, 3, 2, 2, 2, 222, 162, 3, 2, 2, 2, 222, 165, 3, 2, 2, 2, 222, 168, 3, 2, 2, 2, 222, 171, 3, 2, 2, 2, 222, 174, 3, 2, 2, 2, 222, 177, 3, 2, 2, 2, 222, 180, 3, 2, 2, 2, 222, 183, 3, 2, 2, 2, 222, 186, 3, 2, 2, 2, 222, 189, 3, 2, 2, 2, 222, 192, 3, 2, 2, 2, 222, 195, 3, 2, 2, 2, 222, 198, 3, 2, 2, 2, 222, 201, 3, 2, 2, 2, 222, 204, 3, 2, 2, 2, 222, 207, 3, 2, 2, 2, 222, 210, 3, 2, 2, 2, 222, 213, 3, 2, 2, 2, 222, 216, 3, 2, 2, 2, 223, 226, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 27, 3, 2, 2, 2, 226, 224, 3, 2, 2, 2, 227, 229, 7, 19, 2, 2, 228, 230, 5, 18, 10, 2, 229, 228, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 232, 7, 19, 2, 2, 232, 233, 7, 31, 2, 2, 233, 234, 5, 26, 14, 2, 234, 29, 3, 2, 2, 2, 235, 236, 7, 20, 2, 2, 236, 244, 5, 26, 14, 2, 237, 238, 7, 4, 2, 2, 238, 244, 5, 26, 14, 2, 239, 240, 7, 32, 2, 2, 240, 244, 5, 26, 14, 2, 241, 242, 7, 18, 2, 2, 242, 244, 5, 26, 14, 2, 243, 235, 3, 2, 2, 2, 243, 237, 3, 2, 2, 2, 243, 239, 3, 2, 2, 2, 243, 241, 3, 2, 2, 2, 244, 31, 3, 2, 2, 2, 245, 246, 7, 39, 2, 2, 246, 247, 5, 26, 14, 2, 247, 248, 7, 22, 2, 2, 248, 249, 5, 26, 14, 2, 249, 250, 7, 23, 2, 2, 250, 251, 7, 40, 2, 2, 251, 252, 7, 22, 2, 2, 252, 253, 5, 26, 14, 2, 253, 254, 7, 23, 2, 2, 254, 33, 3, 2, 2, 2, 255, 256, 7, 36, 2, 2, 256, 257, 5, 26, 14, 2, 257, 258, 7, 22, 2, 2, 258, 260, 5, 36, 19, 2, 259, 261, 5, 40, 21, 2, 260, 259, 3, 2, 2, 2, 260, 261, 3, 2, 2, 2, 261, 262, 3, 2, 2, 2, 262, 263, 7, 23, 2, 2, 263, 35, 3, 2, 2, 2, 264, 266, 5, 38, 20, 2, 265, 264, 3, 2, 2, 2, 266, 269, 3, 2, 2, 2, 267, 265, 3, 2, 2, 2, 267, 268, 3, 2, 2, 2, 268, 37, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 271, 7, 38, 2, 2, 271, 272, 5, 50, 26, 2, 272, 273, 7, 31, 2, 2, 273, 274, 5, 26, 14, 2, 274, 39, 3, 2, 2, 2, 275, 276, 7, 40, 2, 2, 276, 277, 7, 31, 2, 2, 277, 278, 5, 26, 14, 2, 278, 41, 3, 2, 2, 2, 279, 280, 7, 34, 2, 2, 280, 281, 7, 48, 2, 2, 281, 282, 7, 33, 2, 2, 282, 283, 5, 26, 14, 2, 283, 43, 3, 2, 2, 2, 284, 285, 7, 24, 2, 2, 285, 286, 5, 50, 26, 2, 286, 287, 7, 25, 2, 2, 287, 45, 3, 2, 2, 2, 288, 290, 7, 26, 2, 2, 289, 291, 5, 50, 26, 2, 290, 289, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 292, 3, 2, 2, 2, 292, 293, 7, 27, 2, 2, 293, 47, 3, 2, 2, 2, 294, 295, 7, 22, 2, 2, 295, 296, 5, 58, 30, 2, 296, 297, 7, 23, 2, 2, 297, 49, 3, 2, 2, 2, 298, 303, 5, 26, 14, 2, 299, 300, 7, 29, 2, 2, 300, 302, 5, 26, 14, 2, 301, 299, 3, 2, 2, 2, 302, 305, 3, 2, 2, 2, 303, 301, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 51, 3, 2, 2, 2, 305, 303, 3, 2, 2, 2, 306, 311, 5, 54, 28, 2, 307, 308, 7, 29, 2, 2, 308, 310, 5, 54, 28, 2, 309, 307, 3, 2, 2, 2, 310, 313, 3, 2, 2, 2, 311, 309, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 53, 3, 2, 2, 2, 313, 311, 3, 2, 2, 2, 314, 317, 7, 48, 2, 2, 315, 316, 7, 33, 2, 2, 316, 318, 5, 26, 14, 2, 317, 315, 3, 2, 2, 2, 317, 318, 3, 2, 2, 2, 318, 321, 3, 2, 2, 2, 319, 321, 5, 26, 14, 2, 320, 314, 3, 2, 2, 2, 320, 319, 3, 2, 2, 2, 321, 55, 3, 2, 2, 2, 322, 323, 7, 48, 2, 2, 323, 324, 7, 28, 2, 2, 324, 325, 5, 26, 14, 2, 325, 57, 3, 2, 2, 2, 326, 331, 5, 56, 29, 2, 327, 328, 7, 29, 2, 2, 328, 330, 5, 56, 29, 2, 329, 327, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 59, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 335, 7, 42, 2, 2, 335, 339, 7, 22, 2, 2, 336, 338, 5, 26, 14, 2, 337, 336, 3, 2, 2, 2, 338, 341, 3, 2, 2, 2, 339, 337, 3, 2, 2, 2, 339, 340, 3, 2, 2, 2, 340, 342, 3, 2, 2, 2, 341, 339, 3, 2, 2, 2, 342, 343, 7, 23, 2, 2, 343, 61, 3, 2, 2, 2, 27, 65, 69, 75, 91, 97, 107, 116, 122, 129, 138, 151, 219, 222, 224, 229, 243, 260, 267, 290, 303, 311, 317, 320, 331, 339]
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScript.tokens b/src/main/java/org/piccode/antlr4/PiccodeScript.tokens
deleted file mode 100644
index ff4e9fd..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScript.tokens
+++ /dev/null
@@ -1,88 +0,0 @@
-ADD=1
-SUB=2
-MUL=3
-DIV=4
-MOD=5
-GT=6
-GE=7
-LT=8
-LE=9
-EQ=10
-NE=11
-AND=12
-OR=13
-SHL=14
-SHR=15
-BAND=16
-BOR=17
-EXCLAIM=18
-PIPE=19
-LBRACE=20
-RBRACE=21
-LPAREN=22
-RPAREN=23
-LBRACKET=24
-RBRACKET=25
-COLON=26
-COMMA=27
-SEMI=28
-ARROW=29
-TILDE=30
-ASSIGN=31
-LET=32
-FUNCTION=33
-WHEN=34
-IMPORT=35
-IS=36
-IF=37
-ELSE=38
-MODULE=39
-DO=40
-NUMBER=41
-STRING=42
-DOT=43
-LINE_COMMENT=44
-BLOCK_COMMENT=45
-ID=46
-WS=47
-'+'=1
-'-'=2
-'*'=3
-'/'=4
-'%'=5
-'>'=6
-'>='=7
-'<'=8
-'<='=9
-'=='=10
-'!='=11
-'&&'=12
-'||'=13
-'>>'=14
-'<<'=15
-'&'=16
-'|'=17
-'!'=18
-'|>'=19
-'{'=20
-'}'=21
-'('=22
-')'=23
-'['=24
-']'=25
-':'=26
-','=27
-';'=28
-'->'=29
-'~'=30
-'='=31
-'let'=32
-'function'=33
-'when'=34
-'import'=35
-'is'=36
-'if'=37
-'else'=38
-'module'=39
-'do'=40
-'.'=43
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
deleted file mode 100644
index 2fa9681..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseListener.java
+++ /dev/null
@@ -1,401 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ErrorNode;
-import org.antlr.v4.runtime.tree.TerminalNode;
-
-/**
- * This class provides an empty implementation of {@link PiccodeScriptListener},
- * which can be extended to create a listener which only needs to handle a subset
- * of the available methods.
- */
-public class PiccodeScriptBaseListener implements PiccodeScriptListener {
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterStmts(PiccodeScriptParser.StmtsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitStmts(PiccodeScriptParser.StmtsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterStmt(PiccodeScriptParser.StmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitStmt(PiccodeScriptParser.StmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterImport_module(PiccodeScriptParser.Import_moduleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitImport_module(PiccodeScriptParser.Import_moduleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterModule(PiccodeScriptParser.ModuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitModule(PiccodeScriptParser.ModuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterModule_stmt(PiccodeScriptParser.Module_stmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitModule_stmt(PiccodeScriptParser.Module_stmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterFunc(PiccodeScriptParser.FuncContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitFunc(PiccodeScriptParser.FuncContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterFunc_args(PiccodeScriptParser.Func_argsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitFunc_args(PiccodeScriptParser.Func_argsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterArg_list(PiccodeScriptParser.Arg_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitArg_list(PiccodeScriptParser.Arg_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterArg(PiccodeScriptParser.ArgContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitArg(PiccodeScriptParser.ArgContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterExpr(PiccodeScriptParser.ExprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitExpr(PiccodeScriptParser.ExprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterUnary(PiccodeScriptParser.UnaryContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitUnary(PiccodeScriptParser.UnaryContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterIf_expr(PiccodeScriptParser.If_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitIf_expr(PiccodeScriptParser.If_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterWhen_expr(PiccodeScriptParser.When_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitWhen_expr(PiccodeScriptParser.When_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterWhen_cases(PiccodeScriptParser.When_casesContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitWhen_cases(PiccodeScriptParser.When_casesContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterWhen_case(PiccodeScriptParser.When_caseContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitWhen_case(PiccodeScriptParser.When_caseContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterElse_case(PiccodeScriptParser.Else_caseContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitElse_case(PiccodeScriptParser.Else_caseContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterVar_decl(PiccodeScriptParser.Var_declContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitVar_decl(PiccodeScriptParser.Var_declContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterTuple(PiccodeScriptParser.TupleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitTuple(PiccodeScriptParser.TupleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterArray(PiccodeScriptParser.ArrayContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitArray(PiccodeScriptParser.ArrayContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterObject(PiccodeScriptParser.ObjectContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitObject(PiccodeScriptParser.ObjectContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterExpr_list(PiccodeScriptParser.Expr_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitExpr_list(PiccodeScriptParser.Expr_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterCall_expr(PiccodeScriptParser.Call_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitCall_expr(PiccodeScriptParser.Call_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterDo_expr(PiccodeScriptParser.Do_exprContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitDo_expr(PiccodeScriptParser.Do_exprContext ctx) { }
-
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void enterEveryRule(ParserRuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void exitEveryRule(ParserRuleContext ctx) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void visitTerminal(TerminalNode node) { }
- /**
- * {@inheritDoc}
- *
- * The default implementation does nothing.
- */
- @Override public void visitErrorNode(ErrorNode node) { }
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java b/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
deleted file mode 100644
index 363046b..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptBaseVisitor.java
+++ /dev/null
@@ -1,226 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
-
-/**
- * This class provides an empty implementation of {@link PiccodeScriptVisitor},
- * which can be extended to create a visitor which only needs to handle a subset
- * of the available methods.
- *
- * @param The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public class PiccodeScriptBaseVisitor extends AbstractParseTreeVisitor implements PiccodeScriptVisitor {
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitStmts(PiccodeScriptParser.StmtsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitStmt(PiccodeScriptParser.StmtContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitImport_module(PiccodeScriptParser.Import_moduleContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitModule(PiccodeScriptParser.ModuleContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitModule_stmt(PiccodeScriptParser.Module_stmtContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitFunc(PiccodeScriptParser.FuncContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitFunc_args(PiccodeScriptParser.Func_argsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitArg_list(PiccodeScriptParser.Arg_listContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitArg(PiccodeScriptParser.ArgContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitExpr(PiccodeScriptParser.ExprContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitClosure_decl(PiccodeScriptParser.Closure_declContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitUnary(PiccodeScriptParser.UnaryContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitIf_expr(PiccodeScriptParser.If_exprContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitWhen_expr(PiccodeScriptParser.When_exprContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitWhen_cases(PiccodeScriptParser.When_casesContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitWhen_case(PiccodeScriptParser.When_caseContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitElse_case(PiccodeScriptParser.Else_caseContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitVar_decl(PiccodeScriptParser.Var_declContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitTuple(PiccodeScriptParser.TupleContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitArray(PiccodeScriptParser.ArrayContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitObject(PiccodeScriptParser.ObjectContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitExpr_list(PiccodeScriptParser.Expr_listContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitCall_expr(PiccodeScriptParser.Call_exprContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitDo_expr(PiccodeScriptParser.Do_exprContext ctx) { return visitChildren(ctx); }
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
deleted file mode 100644
index 2bd5ed4..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.interp
+++ /dev/null
@@ -1,158 +0,0 @@
-token literal names:
-null
-'+'
-'-'
-'*'
-'/'
-'%'
-'>'
-'>='
-'<'
-'<='
-'=='
-'!='
-'&&'
-'||'
-'>>'
-'<<'
-'&'
-'|'
-'!'
-'|>'
-'{'
-'}'
-'('
-')'
-'['
-']'
-':'
-','
-';'
-'->'
-'~'
-'='
-'let'
-'function'
-'when'
-'import'
-'is'
-'if'
-'else'
-'module'
-'do'
-null
-null
-'.'
-null
-null
-null
-null
-
-token symbolic names:
-null
-ADD
-SUB
-MUL
-DIV
-MOD
-GT
-GE
-LT
-LE
-EQ
-NE
-AND
-OR
-SHL
-SHR
-BAND
-BOR
-EXCLAIM
-PIPE
-LBRACE
-RBRACE
-LPAREN
-RPAREN
-LBRACKET
-RBRACKET
-COLON
-COMMA
-SEMI
-ARROW
-TILDE
-ASSIGN
-LET
-FUNCTION
-WHEN
-IMPORT
-IS
-IF
-ELSE
-MODULE
-DO
-NUMBER
-STRING
-DOT
-LINE_COMMENT
-BLOCK_COMMENT
-ID
-WS
-
-rule names:
-ADD
-SUB
-MUL
-DIV
-MOD
-GT
-GE
-LT
-LE
-EQ
-NE
-AND
-OR
-SHL
-SHR
-BAND
-BOR
-EXCLAIM
-PIPE
-LBRACE
-RBRACE
-LPAREN
-RPAREN
-LBRACKET
-RBRACKET
-COLON
-COMMA
-SEMI
-ARROW
-TILDE
-ASSIGN
-LET
-FUNCTION
-WHEN
-IMPORT
-IS
-IF
-ELSE
-MODULE
-DO
-NUMBER
-STRING
-DOT
-LINE_COMMENT
-BLOCK_COMMENT
-ID
-WS
-
-channel names:
-DEFAULT_TOKEN_CHANNEL
-HIDDEN
-
-mode names:
-DEFAULT_MODE
-
-atn:
-[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 49, 291, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 23, 3, 23, 3, 24, 3, 24, 3, 25, 3, 25, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 42, 6, 42, 217, 10, 42, 13, 42, 14, 42, 218, 3, 42, 3, 42, 6, 42, 223, 10, 42, 13, 42, 14, 42, 224, 5, 42, 227, 10, 42, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 233, 10, 43, 12, 43, 14, 43, 236, 11, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 7, 43, 243, 10, 43, 12, 43, 14, 43, 246, 11, 43, 3, 43, 5, 43, 249, 10, 43, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 7, 45, 257, 10, 45, 12, 45, 14, 45, 260, 11, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 7, 46, 268, 10, 46, 12, 46, 14, 46, 271, 11, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 7, 47, 280, 10, 47, 12, 47, 14, 47, 283, 11, 47, 3, 48, 6, 48, 286, 10, 48, 13, 48, 14, 48, 287, 3, 48, 3, 48, 3, 269, 2, 49, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 3, 2, 9, 3, 2, 50, 59, 4, 2, 36, 36, 94, 94, 4, 2, 41, 41, 94, 94, 4, 2, 12, 12, 15, 15, 5, 2, 67, 92, 97, 97, 99, 124, 6, 2, 50, 59, 67, 92, 97, 97, 99, 124, 5, 2, 11, 12, 15, 15, 34, 34, 2, 302, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 3, 97, 3, 2, 2, 2, 5, 99, 3, 2, 2, 2, 7, 101, 3, 2, 2, 2, 9, 103, 3, 2, 2, 2, 11, 105, 3, 2, 2, 2, 13, 107, 3, 2, 2, 2, 15, 109, 3, 2, 2, 2, 17, 112, 3, 2, 2, 2, 19, 114, 3, 2, 2, 2, 21, 117, 3, 2, 2, 2, 23, 120, 3, 2, 2, 2, 25, 123, 3, 2, 2, 2, 27, 126, 3, 2, 2, 2, 29, 129, 3, 2, 2, 2, 31, 132, 3, 2, 2, 2, 33, 135, 3, 2, 2, 2, 35, 137, 3, 2, 2, 2, 37, 139, 3, 2, 2, 2, 39, 141, 3, 2, 2, 2, 41, 144, 3, 2, 2, 2, 43, 146, 3, 2, 2, 2, 45, 148, 3, 2, 2, 2, 47, 150, 3, 2, 2, 2, 49, 152, 3, 2, 2, 2, 51, 154, 3, 2, 2, 2, 53, 156, 3, 2, 2, 2, 55, 158, 3, 2, 2, 2, 57, 160, 3, 2, 2, 2, 59, 162, 3, 2, 2, 2, 61, 165, 3, 2, 2, 2, 63, 167, 3, 2, 2, 2, 65, 169, 3, 2, 2, 2, 67, 173, 3, 2, 2, 2, 69, 182, 3, 2, 2, 2, 71, 187, 3, 2, 2, 2, 73, 194, 3, 2, 2, 2, 75, 197, 3, 2, 2, 2, 77, 200, 3, 2, 2, 2, 79, 205, 3, 2, 2, 2, 81, 212, 3, 2, 2, 2, 83, 216, 3, 2, 2, 2, 85, 248, 3, 2, 2, 2, 87, 250, 3, 2, 2, 2, 89, 252, 3, 2, 2, 2, 91, 263, 3, 2, 2, 2, 93, 277, 3, 2, 2, 2, 95, 285, 3, 2, 2, 2, 97, 98, 7, 45, 2, 2, 98, 4, 3, 2, 2, 2, 99, 100, 7, 47, 2, 2, 100, 6, 3, 2, 2, 2, 101, 102, 7, 44, 2, 2, 102, 8, 3, 2, 2, 2, 103, 104, 7, 49, 2, 2, 104, 10, 3, 2, 2, 2, 105, 106, 7, 39, 2, 2, 106, 12, 3, 2, 2, 2, 107, 108, 7, 64, 2, 2, 108, 14, 3, 2, 2, 2, 109, 110, 7, 64, 2, 2, 110, 111, 7, 63, 2, 2, 111, 16, 3, 2, 2, 2, 112, 113, 7, 62, 2, 2, 113, 18, 3, 2, 2, 2, 114, 115, 7, 62, 2, 2, 115, 116, 7, 63, 2, 2, 116, 20, 3, 2, 2, 2, 117, 118, 7, 63, 2, 2, 118, 119, 7, 63, 2, 2, 119, 22, 3, 2, 2, 2, 120, 121, 7, 35, 2, 2, 121, 122, 7, 63, 2, 2, 122, 24, 3, 2, 2, 2, 123, 124, 7, 40, 2, 2, 124, 125, 7, 40, 2, 2, 125, 26, 3, 2, 2, 2, 126, 127, 7, 126, 2, 2, 127, 128, 7, 126, 2, 2, 128, 28, 3, 2, 2, 2, 129, 130, 7, 64, 2, 2, 130, 131, 7, 64, 2, 2, 131, 30, 3, 2, 2, 2, 132, 133, 7, 62, 2, 2, 133, 134, 7, 62, 2, 2, 134, 32, 3, 2, 2, 2, 135, 136, 7, 40, 2, 2, 136, 34, 3, 2, 2, 2, 137, 138, 7, 126, 2, 2, 138, 36, 3, 2, 2, 2, 139, 140, 7, 35, 2, 2, 140, 38, 3, 2, 2, 2, 141, 142, 7, 126, 2, 2, 142, 143, 7, 64, 2, 2, 143, 40, 3, 2, 2, 2, 144, 145, 7, 125, 2, 2, 145, 42, 3, 2, 2, 2, 146, 147, 7, 127, 2, 2, 147, 44, 3, 2, 2, 2, 148, 149, 7, 42, 2, 2, 149, 46, 3, 2, 2, 2, 150, 151, 7, 43, 2, 2, 151, 48, 3, 2, 2, 2, 152, 153, 7, 93, 2, 2, 153, 50, 3, 2, 2, 2, 154, 155, 7, 95, 2, 2, 155, 52, 3, 2, 2, 2, 156, 157, 7, 60, 2, 2, 157, 54, 3, 2, 2, 2, 158, 159, 7, 46, 2, 2, 159, 56, 3, 2, 2, 2, 160, 161, 7, 61, 2, 2, 161, 58, 3, 2, 2, 2, 162, 163, 7, 47, 2, 2, 163, 164, 7, 64, 2, 2, 164, 60, 3, 2, 2, 2, 165, 166, 7, 128, 2, 2, 166, 62, 3, 2, 2, 2, 167, 168, 7, 63, 2, 2, 168, 64, 3, 2, 2, 2, 169, 170, 7, 110, 2, 2, 170, 171, 7, 103, 2, 2, 171, 172, 7, 118, 2, 2, 172, 66, 3, 2, 2, 2, 173, 174, 7, 104, 2, 2, 174, 175, 7, 119, 2, 2, 175, 176, 7, 112, 2, 2, 176, 177, 7, 101, 2, 2, 177, 178, 7, 118, 2, 2, 178, 179, 7, 107, 2, 2, 179, 180, 7, 113, 2, 2, 180, 181, 7, 112, 2, 2, 181, 68, 3, 2, 2, 2, 182, 183, 7, 121, 2, 2, 183, 184, 7, 106, 2, 2, 184, 185, 7, 103, 2, 2, 185, 186, 7, 112, 2, 2, 186, 70, 3, 2, 2, 2, 187, 188, 7, 107, 2, 2, 188, 189, 7, 111, 2, 2, 189, 190, 7, 114, 2, 2, 190, 191, 7, 113, 2, 2, 191, 192, 7, 116, 2, 2, 192, 193, 7, 118, 2, 2, 193, 72, 3, 2, 2, 2, 194, 195, 7, 107, 2, 2, 195, 196, 7, 117, 2, 2, 196, 74, 3, 2, 2, 2, 197, 198, 7, 107, 2, 2, 198, 199, 7, 104, 2, 2, 199, 76, 3, 2, 2, 2, 200, 201, 7, 103, 2, 2, 201, 202, 7, 110, 2, 2, 202, 203, 7, 117, 2, 2, 203, 204, 7, 103, 2, 2, 204, 78, 3, 2, 2, 2, 205, 206, 7, 111, 2, 2, 206, 207, 7, 113, 2, 2, 207, 208, 7, 102, 2, 2, 208, 209, 7, 119, 2, 2, 209, 210, 7, 110, 2, 2, 210, 211, 7, 103, 2, 2, 211, 80, 3, 2, 2, 2, 212, 213, 7, 102, 2, 2, 213, 214, 7, 113, 2, 2, 214, 82, 3, 2, 2, 2, 215, 217, 9, 2, 2, 2, 216, 215, 3, 2, 2, 2, 217, 218, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 226, 3, 2, 2, 2, 220, 222, 7, 48, 2, 2, 221, 223, 9, 2, 2, 2, 222, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 222, 3, 2, 2, 2, 224, 225, 3, 2, 2, 2, 225, 227, 3, 2, 2, 2, 226, 220, 3, 2, 2, 2, 226, 227, 3, 2, 2, 2, 227, 84, 3, 2, 2, 2, 228, 234, 7, 36, 2, 2, 229, 233, 10, 3, 2, 2, 230, 231, 7, 94, 2, 2, 231, 233, 11, 2, 2, 2, 232, 229, 3, 2, 2, 2, 232, 230, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 237, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 237, 249, 7, 36, 2, 2, 238, 244, 7, 41, 2, 2, 239, 243, 10, 4, 2, 2, 240, 241, 7, 94, 2, 2, 241, 243, 11, 2, 2, 2, 242, 239, 3, 2, 2, 2, 242, 240, 3, 2, 2, 2, 243, 246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 247, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 249, 7, 41, 2, 2, 248, 228, 3, 2, 2, 2, 248, 238, 3, 2, 2, 2, 249, 86, 3, 2, 2, 2, 250, 251, 7, 48, 2, 2, 251, 88, 3, 2, 2, 2, 252, 253, 7, 49, 2, 2, 253, 254, 7, 49, 2, 2, 254, 258, 3, 2, 2, 2, 255, 257, 10, 5, 2, 2, 256, 255, 3, 2, 2, 2, 257, 260, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 261, 3, 2, 2, 2, 260, 258, 3, 2, 2, 2, 261, 262, 8, 45, 2, 2, 262, 90, 3, 2, 2, 2, 263, 264, 7, 49, 2, 2, 264, 265, 7, 44, 2, 2, 265, 269, 3, 2, 2, 2, 266, 268, 11, 2, 2, 2, 267, 266, 3, 2, 2, 2, 268, 271, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 270, 272, 3, 2, 2, 2, 271, 269, 3, 2, 2, 2, 272, 273, 7, 44, 2, 2, 273, 274, 7, 49, 2, 2, 274, 275, 3, 2, 2, 2, 275, 276, 8, 46, 2, 2, 276, 92, 3, 2, 2, 2, 277, 281, 9, 6, 2, 2, 278, 280, 9, 7, 2, 2, 279, 278, 3, 2, 2, 2, 280, 283, 3, 2, 2, 2, 281, 279, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 94, 3, 2, 2, 2, 283, 281, 3, 2, 2, 2, 284, 286, 9, 8, 2, 2, 285, 284, 3, 2, 2, 2, 286, 287, 3, 2, 2, 2, 287, 285, 3, 2, 2, 2, 287, 288, 3, 2, 2, 2, 288, 289, 3, 2, 2, 2, 289, 290, 8, 48, 2, 2, 290, 96, 3, 2, 2, 2, 15, 2, 218, 224, 226, 232, 234, 242, 244, 248, 258, 269, 281, 287, 3, 2, 3, 2]
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
deleted file mode 100644
index dbd824d..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.java
+++ /dev/null
@@ -1,228 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-import org.antlr.v4.runtime.Lexer;
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.Token;
-import org.antlr.v4.runtime.TokenStream;
-import org.antlr.v4.runtime.*;
-import org.antlr.v4.runtime.atn.*;
-import org.antlr.v4.runtime.dfa.DFA;
-import org.antlr.v4.runtime.misc.*;
-
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
-public class PiccodeScriptLexer extends Lexer {
- static { RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION); }
-
- protected static final DFA[] _decisionToDFA;
- protected static final PredictionContextCache _sharedContextCache =
- new PredictionContextCache();
- public static final int
- ADD=1, SUB=2, MUL=3, DIV=4, MOD=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
- AND=12, OR=13, SHL=14, SHR=15, BAND=16, BOR=17, EXCLAIM=18, PIPE=19, LBRACE=20,
- RBRACE=21, LPAREN=22, RPAREN=23, LBRACKET=24, RBRACKET=25, COLON=26, COMMA=27,
- SEMI=28, ARROW=29, TILDE=30, ASSIGN=31, LET=32, FUNCTION=33, WHEN=34,
- IMPORT=35, IS=36, IF=37, ELSE=38, MODULE=39, DO=40, NUMBER=41, STRING=42,
- DOT=43, LINE_COMMENT=44, BLOCK_COMMENT=45, ID=46, WS=47;
- public static String[] channelNames = {
- "DEFAULT_TOKEN_CHANNEL", "HIDDEN"
- };
-
- public static String[] modeNames = {
- "DEFAULT_MODE"
- };
-
- private static String[] makeRuleNames() {
- return new String[] {
- "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ", "NE",
- "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
- "RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
- "SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
- "IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
- "BLOCK_COMMENT", "ID", "WS"
- };
- }
- public static final String[] ruleNames = makeRuleNames();
-
- private static String[] makeLiteralNames() {
- return new String[] {
- null, "'+'", "'-'", "'*'", "'/'", "'%'", "'>'", "'>='", "'<'", "'<='",
- "'=='", "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'",
- "'|>'", "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'",
- "'->'", "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'",
- "'if'", "'else'", "'module'", "'do'", null, null, "'.'"
- };
- }
- private static final String[] _LITERAL_NAMES = makeLiteralNames();
- private static String[] makeSymbolicNames() {
- return new String[] {
- null, "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ",
- "NE", "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
- "RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
- "SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
- "IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
- "BLOCK_COMMENT", "ID", "WS"
- };
- }
- private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
- public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
-
- /**
- * @deprecated Use {@link #VOCABULARY} instead.
- */
- @Deprecated
- public static final String[] tokenNames;
- static {
- tokenNames = new String[_SYMBOLIC_NAMES.length];
- for (int i = 0; i < tokenNames.length; i++) {
- tokenNames[i] = VOCABULARY.getLiteralName(i);
- if (tokenNames[i] == null) {
- tokenNames[i] = VOCABULARY.getSymbolicName(i);
- }
-
- if (tokenNames[i] == null) {
- tokenNames[i] = "";
- }
- }
- }
-
- @Override
- @Deprecated
- public String[] getTokenNames() {
- return tokenNames;
- }
-
- @Override
-
- public Vocabulary getVocabulary() {
- return VOCABULARY;
- }
-
-
- public PiccodeScriptLexer(CharStream input) {
- super(input);
- _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
- }
-
- @Override
- public String getGrammarFileName() { return "PiccodeScript.g4"; }
-
- @Override
- public String[] getRuleNames() { return ruleNames; }
-
- @Override
- public String getSerializedATN() { return _serializedATN; }
-
- @Override
- public String[] getChannelNames() { return channelNames; }
-
- @Override
- public String[] getModeNames() { return modeNames; }
-
- @Override
- public ATN getATN() { return _ATN; }
-
- public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\61\u0123\b\1\4\2"+
- "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
- "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
- "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
- "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+
- " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+
- "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3"+
- "\6\3\6\3\7\3\7\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f"+
- "\3\f\3\r\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\20\3\20\3\20\3\21\3\21"+
- "\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\25\3\25\3\26\3\26\3\27\3\27\3\30"+
- "\3\30\3\31\3\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\3\36\3\36\3\36"+
- "\3\37\3\37\3 \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3"+
- "#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3&\3&\3&\3\'\3\'\3\'\3\'\3\'"+
- "\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3*\6*\u00d9\n*\r*\16*\u00da\3*\3*\6*\u00df"+
- "\n*\r*\16*\u00e0\5*\u00e3\n*\3+\3+\3+\3+\7+\u00e9\n+\f+\16+\u00ec\13+"+
- "\3+\3+\3+\3+\3+\7+\u00f3\n+\f+\16+\u00f6\13+\3+\5+\u00f9\n+\3,\3,\3-\3"+
- "-\3-\3-\7-\u0101\n-\f-\16-\u0104\13-\3-\3-\3.\3.\3.\3.\7.\u010c\n.\f."+
- "\16.\u010f\13.\3.\3.\3.\3.\3.\3/\3/\7/\u0118\n/\f/\16/\u011b\13/\3\60"+
- "\6\60\u011e\n\60\r\60\16\60\u011f\3\60\3\60\3\u010d\2\61\3\3\5\4\7\5\t"+
- "\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23"+
- "%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
- "%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61\3\2\t\3\2\62;\4\2$$^^\4\2))^^\4\2\f\f\17"+
- "\17\5\2C\\aac|\6\2\62;C\\aac|\5\2\13\f\17\17\"\"\2\u012e\2\3\3\2\2\2\2"+
- "\5\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2"+
- "\2\2\21\3\2\2\2\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2"+
- "\33\3\2\2\2\2\35\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2"+
- "\2\'\3\2\2\2\2)\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2"+
- "\2\63\3\2\2\2\2\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2"+
- "\2\2?\3\2\2\2\2A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2"+
- "K\3\2\2\2\2M\3\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3"+
- "\2\2\2\2Y\3\2\2\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\3a\3\2\2\2\5c\3\2\2"+
- "\2\7e\3\2\2\2\tg\3\2\2\2\13i\3\2\2\2\rk\3\2\2\2\17m\3\2\2\2\21p\3\2\2"+
- "\2\23r\3\2\2\2\25u\3\2\2\2\27x\3\2\2\2\31{\3\2\2\2\33~\3\2\2\2\35\u0081"+
- "\3\2\2\2\37\u0084\3\2\2\2!\u0087\3\2\2\2#\u0089\3\2\2\2%\u008b\3\2\2\2"+
- "\'\u008d\3\2\2\2)\u0090\3\2\2\2+\u0092\3\2\2\2-\u0094\3\2\2\2/\u0096\3"+
- "\2\2\2\61\u0098\3\2\2\2\63\u009a\3\2\2\2\65\u009c\3\2\2\2\67\u009e\3\2"+
- "\2\29\u00a0\3\2\2\2;\u00a2\3\2\2\2=\u00a5\3\2\2\2?\u00a7\3\2\2\2A\u00a9"+
- "\3\2\2\2C\u00ad\3\2\2\2E\u00b6\3\2\2\2G\u00bb\3\2\2\2I\u00c2\3\2\2\2K"+
- "\u00c5\3\2\2\2M\u00c8\3\2\2\2O\u00cd\3\2\2\2Q\u00d4\3\2\2\2S\u00d8\3\2"+
- "\2\2U\u00f8\3\2\2\2W\u00fa\3\2\2\2Y\u00fc\3\2\2\2[\u0107\3\2\2\2]\u0115"+
- "\3\2\2\2_\u011d\3\2\2\2ab\7-\2\2b\4\3\2\2\2cd\7/\2\2d\6\3\2\2\2ef\7,\2"+
- "\2f\b\3\2\2\2gh\7\61\2\2h\n\3\2\2\2ij\7\'\2\2j\f\3\2\2\2kl\7@\2\2l\16"+
- "\3\2\2\2mn\7@\2\2no\7?\2\2o\20\3\2\2\2pq\7>\2\2q\22\3\2\2\2rs\7>\2\2s"+
- "t\7?\2\2t\24\3\2\2\2uv\7?\2\2vw\7?\2\2w\26\3\2\2\2xy\7#\2\2yz\7?\2\2z"+
- "\30\3\2\2\2{|\7(\2\2|}\7(\2\2}\32\3\2\2\2~\177\7~\2\2\177\u0080\7~\2\2"+
- "\u0080\34\3\2\2\2\u0081\u0082\7@\2\2\u0082\u0083\7@\2\2\u0083\36\3\2\2"+
- "\2\u0084\u0085\7>\2\2\u0085\u0086\7>\2\2\u0086 \3\2\2\2\u0087\u0088\7"+
- "(\2\2\u0088\"\3\2\2\2\u0089\u008a\7~\2\2\u008a$\3\2\2\2\u008b\u008c\7"+
- "#\2\2\u008c&\3\2\2\2\u008d\u008e\7~\2\2\u008e\u008f\7@\2\2\u008f(\3\2"+
- "\2\2\u0090\u0091\7}\2\2\u0091*\3\2\2\2\u0092\u0093\7\177\2\2\u0093,\3"+
- "\2\2\2\u0094\u0095\7*\2\2\u0095.\3\2\2\2\u0096\u0097\7+\2\2\u0097\60\3"+
- "\2\2\2\u0098\u0099\7]\2\2\u0099\62\3\2\2\2\u009a\u009b\7_\2\2\u009b\64"+
- "\3\2\2\2\u009c\u009d\7<\2\2\u009d\66\3\2\2\2\u009e\u009f\7.\2\2\u009f"+
- "8\3\2\2\2\u00a0\u00a1\7=\2\2\u00a1:\3\2\2\2\u00a2\u00a3\7/\2\2\u00a3\u00a4"+
- "\7@\2\2\u00a4<\3\2\2\2\u00a5\u00a6\7\u0080\2\2\u00a6>\3\2\2\2\u00a7\u00a8"+
- "\7?\2\2\u00a8@\3\2\2\2\u00a9\u00aa\7n\2\2\u00aa\u00ab\7g\2\2\u00ab\u00ac"+
- "\7v\2\2\u00acB\3\2\2\2\u00ad\u00ae\7h\2\2\u00ae\u00af\7w\2\2\u00af\u00b0"+
- "\7p\2\2\u00b0\u00b1\7e\2\2\u00b1\u00b2\7v\2\2\u00b2\u00b3\7k\2\2\u00b3"+
- "\u00b4\7q\2\2\u00b4\u00b5\7p\2\2\u00b5D\3\2\2\2\u00b6\u00b7\7y\2\2\u00b7"+
- "\u00b8\7j\2\2\u00b8\u00b9\7g\2\2\u00b9\u00ba\7p\2\2\u00baF\3\2\2\2\u00bb"+
- "\u00bc\7k\2\2\u00bc\u00bd\7o\2\2\u00bd\u00be\7r\2\2\u00be\u00bf\7q\2\2"+
- "\u00bf\u00c0\7t\2\2\u00c0\u00c1\7v\2\2\u00c1H\3\2\2\2\u00c2\u00c3\7k\2"+
- "\2\u00c3\u00c4\7u\2\2\u00c4J\3\2\2\2\u00c5\u00c6\7k\2\2\u00c6\u00c7\7"+
- "h\2\2\u00c7L\3\2\2\2\u00c8\u00c9\7g\2\2\u00c9\u00ca\7n\2\2\u00ca\u00cb"+
- "\7u\2\2\u00cb\u00cc\7g\2\2\u00ccN\3\2\2\2\u00cd\u00ce\7o\2\2\u00ce\u00cf"+
- "\7q\2\2\u00cf\u00d0\7f\2\2\u00d0\u00d1\7w\2\2\u00d1\u00d2\7n\2\2\u00d2"+
- "\u00d3\7g\2\2\u00d3P\3\2\2\2\u00d4\u00d5\7f\2\2\u00d5\u00d6\7q\2\2\u00d6"+
- "R\3\2\2\2\u00d7\u00d9\t\2\2\2\u00d8\u00d7\3\2\2\2\u00d9\u00da\3\2\2\2"+
- "\u00da\u00d8\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00e2\3\2\2\2\u00dc\u00de"+
- "\7\60\2\2\u00dd\u00df\t\2\2\2\u00de\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2"+
- "\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\u00e3\3\2\2\2\u00e2\u00dc"+
- "\3\2\2\2\u00e2\u00e3\3\2\2\2\u00e3T\3\2\2\2\u00e4\u00ea\7$\2\2\u00e5\u00e9"+
- "\n\3\2\2\u00e6\u00e7\7^\2\2\u00e7\u00e9\13\2\2\2\u00e8\u00e5\3\2\2\2\u00e8"+
- "\u00e6\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2\2\2\u00ea\u00eb\3\2"+
- "\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00f9\7$\2\2\u00ee"+
- "\u00f4\7)\2\2\u00ef\u00f3\n\4\2\2\u00f0\u00f1\7^\2\2\u00f1\u00f3\13\2"+
- "\2\2\u00f2\u00ef\3\2\2\2\u00f2\u00f0\3\2\2\2\u00f3\u00f6\3\2\2\2\u00f4"+
- "\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\u00f7\3\2\2\2\u00f6\u00f4\3\2"+
- "\2\2\u00f7\u00f9\7)\2\2\u00f8\u00e4\3\2\2\2\u00f8\u00ee\3\2\2\2\u00f9"+
- "V\3\2\2\2\u00fa\u00fb\7\60\2\2\u00fbX\3\2\2\2\u00fc\u00fd\7\61\2\2\u00fd"+
- "\u00fe\7\61\2\2\u00fe\u0102\3\2\2\2\u00ff\u0101\n\5\2\2\u0100\u00ff\3"+
- "\2\2\2\u0101\u0104\3\2\2\2\u0102\u0100\3\2\2\2\u0102\u0103\3\2\2\2\u0103"+
- "\u0105\3\2\2\2\u0104\u0102\3\2\2\2\u0105\u0106\b-\2\2\u0106Z\3\2\2\2\u0107"+
- "\u0108\7\61\2\2\u0108\u0109\7,\2\2\u0109\u010d\3\2\2\2\u010a\u010c\13"+
- "\2\2\2\u010b\u010a\3\2\2\2\u010c\u010f\3\2\2\2\u010d\u010e\3\2\2\2\u010d"+
- "\u010b\3\2\2\2\u010e\u0110\3\2\2\2\u010f\u010d\3\2\2\2\u0110\u0111\7,"+
- "\2\2\u0111\u0112\7\61\2\2\u0112\u0113\3\2\2\2\u0113\u0114\b.\2\2\u0114"+
- "\\\3\2\2\2\u0115\u0119\t\6\2\2\u0116\u0118\t\7\2\2\u0117\u0116\3\2\2\2"+
- "\u0118\u011b\3\2\2\2\u0119\u0117\3\2\2\2\u0119\u011a\3\2\2\2\u011a^\3"+
- "\2\2\2\u011b\u0119\3\2\2\2\u011c\u011e\t\b\2\2\u011d\u011c\3\2\2\2\u011e"+
- "\u011f\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2\2\2\u0120\u0121\3\2"+
- "\2\2\u0121\u0122\b\60\2\2\u0122`\3\2\2\2\17\2\u00da\u00e0\u00e2\u00e8"+
- "\u00ea\u00f2\u00f4\u00f8\u0102\u010d\u0119\u011f\3\2\3\2";
- public static final ATN _ATN =
- new ATNDeserializer().deserialize(_serializedATN.toCharArray());
- static {
- _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
- for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
- _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens b/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
deleted file mode 100644
index ff4e9fd..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptLexer.tokens
+++ /dev/null
@@ -1,88 +0,0 @@
-ADD=1
-SUB=2
-MUL=3
-DIV=4
-MOD=5
-GT=6
-GE=7
-LT=8
-LE=9
-EQ=10
-NE=11
-AND=12
-OR=13
-SHL=14
-SHR=15
-BAND=16
-BOR=17
-EXCLAIM=18
-PIPE=19
-LBRACE=20
-RBRACE=21
-LPAREN=22
-RPAREN=23
-LBRACKET=24
-RBRACKET=25
-COLON=26
-COMMA=27
-SEMI=28
-ARROW=29
-TILDE=30
-ASSIGN=31
-LET=32
-FUNCTION=33
-WHEN=34
-IMPORT=35
-IS=36
-IF=37
-ELSE=38
-MODULE=39
-DO=40
-NUMBER=41
-STRING=42
-DOT=43
-LINE_COMMENT=44
-BLOCK_COMMENT=45
-ID=46
-WS=47
-'+'=1
-'-'=2
-'*'=3
-'/'=4
-'%'=5
-'>'=6
-'>='=7
-'<'=8
-'<='=9
-'=='=10
-'!='=11
-'&&'=12
-'||'=13
-'>>'=14
-'<<'=15
-'&'=16
-'|'=17
-'!'=18
-'|>'=19
-'{'=20
-'}'=21
-'('=22
-')'=23
-'['=24
-']'=25
-':'=26
-','=27
-';'=28
-'->'=29
-'~'=30
-'='=31
-'let'=32
-'function'=33
-'when'=34
-'import'=35
-'is'=36
-'if'=37
-'else'=38
-'module'=39
-'do'=40
-'.'=43
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java b/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
deleted file mode 100644
index 533ef10..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptListener.java
+++ /dev/null
@@ -1,312 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-import org.antlr.v4.runtime.tree.ParseTreeListener;
-
-/**
- * This interface defines a complete listener for a parse tree produced by
- * {@link PiccodeScriptParser}.
- */
-public interface PiccodeScriptListener extends ParseTreeListener {
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#stmts}.
- * @param ctx the parse tree
- */
- void enterStmts(PiccodeScriptParser.StmtsContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#stmts}.
- * @param ctx the parse tree
- */
- void exitStmts(PiccodeScriptParser.StmtsContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#stmt}.
- * @param ctx the parse tree
- */
- void enterStmt(PiccodeScriptParser.StmtContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#stmt}.
- * @param ctx the parse tree
- */
- void exitStmt(PiccodeScriptParser.StmtContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#import_module}.
- * @param ctx the parse tree
- */
- void enterImport_module(PiccodeScriptParser.Import_moduleContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#import_module}.
- * @param ctx the parse tree
- */
- void exitImport_module(PiccodeScriptParser.Import_moduleContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#module}.
- * @param ctx the parse tree
- */
- void enterModule(PiccodeScriptParser.ModuleContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#module}.
- * @param ctx the parse tree
- */
- void exitModule(PiccodeScriptParser.ModuleContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#module_stmts}.
- * @param ctx the parse tree
- */
- void enterModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#module_stmts}.
- * @param ctx the parse tree
- */
- void exitModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#module_stmt}.
- * @param ctx the parse tree
- */
- void enterModule_stmt(PiccodeScriptParser.Module_stmtContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#module_stmt}.
- * @param ctx the parse tree
- */
- void exitModule_stmt(PiccodeScriptParser.Module_stmtContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#func}.
- * @param ctx the parse tree
- */
- void enterFunc(PiccodeScriptParser.FuncContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#func}.
- * @param ctx the parse tree
- */
- void exitFunc(PiccodeScriptParser.FuncContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#func_args}.
- * @param ctx the parse tree
- */
- void enterFunc_args(PiccodeScriptParser.Func_argsContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#func_args}.
- * @param ctx the parse tree
- */
- void exitFunc_args(PiccodeScriptParser.Func_argsContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#arg_list}.
- * @param ctx the parse tree
- */
- void enterArg_list(PiccodeScriptParser.Arg_listContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#arg_list}.
- * @param ctx the parse tree
- */
- void exitArg_list(PiccodeScriptParser.Arg_listContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#arg}.
- * @param ctx the parse tree
- */
- void enterArg(PiccodeScriptParser.ArgContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#arg}.
- * @param ctx the parse tree
- */
- void exitArg(PiccodeScriptParser.ArgContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#literal_expr}.
- * @param ctx the parse tree
- */
- void enterLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#literal_expr}.
- * @param ctx the parse tree
- */
- void exitLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#expr_stmt}.
- * @param ctx the parse tree
- */
- void enterExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#expr_stmt}.
- * @param ctx the parse tree
- */
- void exitExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#expr}.
- * @param ctx the parse tree
- */
- void enterExpr(PiccodeScriptParser.ExprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#expr}.
- * @param ctx the parse tree
- */
- void exitExpr(PiccodeScriptParser.ExprContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
- * @param ctx the parse tree
- */
- void enterClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
- * @param ctx the parse tree
- */
- void exitClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#unary}.
- * @param ctx the parse tree
- */
- void enterUnary(PiccodeScriptParser.UnaryContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#unary}.
- * @param ctx the parse tree
- */
- void exitUnary(PiccodeScriptParser.UnaryContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#if_expr}.
- * @param ctx the parse tree
- */
- void enterIf_expr(PiccodeScriptParser.If_exprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#if_expr}.
- * @param ctx the parse tree
- */
- void exitIf_expr(PiccodeScriptParser.If_exprContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#when_expr}.
- * @param ctx the parse tree
- */
- void enterWhen_expr(PiccodeScriptParser.When_exprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#when_expr}.
- * @param ctx the parse tree
- */
- void exitWhen_expr(PiccodeScriptParser.When_exprContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#when_cases}.
- * @param ctx the parse tree
- */
- void enterWhen_cases(PiccodeScriptParser.When_casesContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#when_cases}.
- * @param ctx the parse tree
- */
- void exitWhen_cases(PiccodeScriptParser.When_casesContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#when_case}.
- * @param ctx the parse tree
- */
- void enterWhen_case(PiccodeScriptParser.When_caseContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#when_case}.
- * @param ctx the parse tree
- */
- void exitWhen_case(PiccodeScriptParser.When_caseContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#else_case}.
- * @param ctx the parse tree
- */
- void enterElse_case(PiccodeScriptParser.Else_caseContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#else_case}.
- * @param ctx the parse tree
- */
- void exitElse_case(PiccodeScriptParser.Else_caseContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#var_decl}.
- * @param ctx the parse tree
- */
- void enterVar_decl(PiccodeScriptParser.Var_declContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#var_decl}.
- * @param ctx the parse tree
- */
- void exitVar_decl(PiccodeScriptParser.Var_declContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#tuple}.
- * @param ctx the parse tree
- */
- void enterTuple(PiccodeScriptParser.TupleContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#tuple}.
- * @param ctx the parse tree
- */
- void exitTuple(PiccodeScriptParser.TupleContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#array}.
- * @param ctx the parse tree
- */
- void enterArray(PiccodeScriptParser.ArrayContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#array}.
- * @param ctx the parse tree
- */
- void exitArray(PiccodeScriptParser.ArrayContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#object}.
- * @param ctx the parse tree
- */
- void enterObject(PiccodeScriptParser.ObjectContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#object}.
- * @param ctx the parse tree
- */
- void exitObject(PiccodeScriptParser.ObjectContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#expr_list}.
- * @param ctx the parse tree
- */
- void enterExpr_list(PiccodeScriptParser.Expr_listContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#expr_list}.
- * @param ctx the parse tree
- */
- void exitExpr_list(PiccodeScriptParser.Expr_listContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#call_expr_list}.
- * @param ctx the parse tree
- */
- void enterCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#call_expr_list}.
- * @param ctx the parse tree
- */
- void exitCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#call_expr}.
- * @param ctx the parse tree
- */
- void enterCall_expr(PiccodeScriptParser.Call_exprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#call_expr}.
- * @param ctx the parse tree
- */
- void exitCall_expr(PiccodeScriptParser.Call_exprContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#key_val_pair}.
- * @param ctx the parse tree
- */
- void enterKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#key_val_pair}.
- * @param ctx the parse tree
- */
- void exitKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#key_val_pairs}.
- * @param ctx the parse tree
- */
- void enterKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#key_val_pairs}.
- * @param ctx the parse tree
- */
- void exitKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx);
- /**
- * Enter a parse tree produced by {@link PiccodeScriptParser#do_expr}.
- * @param ctx the parse tree
- */
- void enterDo_expr(PiccodeScriptParser.Do_exprContext ctx);
- /**
- * Exit a parse tree produced by {@link PiccodeScriptParser#do_expr}.
- * @param ctx the parse tree
- */
- void exitDo_expr(PiccodeScriptParser.Do_exprContext ctx);
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java b/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
deleted file mode 100644
index afe3e77..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptParser.java
+++ /dev/null
@@ -1,2665 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-import org.antlr.v4.runtime.atn.*;
-import org.antlr.v4.runtime.dfa.DFA;
-import org.antlr.v4.runtime.*;
-import org.antlr.v4.runtime.misc.*;
-import org.antlr.v4.runtime.tree.*;
-import java.util.List;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
-public class PiccodeScriptParser extends Parser {
- static { RuntimeMetaData.checkVersion("4.9.3", RuntimeMetaData.VERSION); }
-
- protected static final DFA[] _decisionToDFA;
- protected static final PredictionContextCache _sharedContextCache =
- new PredictionContextCache();
- public static final int
- ADD=1, SUB=2, MUL=3, DIV=4, MOD=5, GT=6, GE=7, LT=8, LE=9, EQ=10, NE=11,
- AND=12, OR=13, SHL=14, SHR=15, BAND=16, BOR=17, EXCLAIM=18, PIPE=19, LBRACE=20,
- RBRACE=21, LPAREN=22, RPAREN=23, LBRACKET=24, RBRACKET=25, COLON=26, COMMA=27,
- SEMI=28, ARROW=29, TILDE=30, ASSIGN=31, LET=32, FUNCTION=33, WHEN=34,
- IMPORT=35, IS=36, IF=37, ELSE=38, MODULE=39, DO=40, NUMBER=41, STRING=42,
- DOT=43, LINE_COMMENT=44, BLOCK_COMMENT=45, ID=46, WS=47;
- public static final int
- RULE_stmts = 0, RULE_stmt = 1, RULE_import_module = 2, RULE_module = 3,
- RULE_module_stmts = 4, RULE_module_stmt = 5, RULE_func = 6, RULE_func_args = 7,
- RULE_arg_list = 8, RULE_arg = 9, RULE_literal_expr = 10, RULE_expr_stmt = 11,
- RULE_expr = 12, RULE_closure_decl = 13, RULE_unary = 14, RULE_if_expr = 15,
- RULE_when_expr = 16, RULE_when_cases = 17, RULE_when_case = 18, RULE_else_case = 19,
- RULE_var_decl = 20, RULE_tuple = 21, RULE_array = 22, RULE_object = 23,
- RULE_expr_list = 24, RULE_call_expr_list = 25, RULE_call_expr = 26, RULE_key_val_pair = 27,
- RULE_key_val_pairs = 28, RULE_do_expr = 29;
- private static String[] makeRuleNames() {
- return new String[] {
- "stmts", "stmt", "import_module", "module", "module_stmts", "module_stmt",
- "func", "func_args", "arg_list", "arg", "literal_expr", "expr_stmt",
- "expr", "closure_decl", "unary", "if_expr", "when_expr", "when_cases",
- "when_case", "else_case", "var_decl", "tuple", "array", "object", "expr_list",
- "call_expr_list", "call_expr", "key_val_pair", "key_val_pairs", "do_expr"
- };
- }
- public static final String[] ruleNames = makeRuleNames();
-
- private static String[] makeLiteralNames() {
- return new String[] {
- null, "'+'", "'-'", "'*'", "'/'", "'%'", "'>'", "'>='", "'<'", "'<='",
- "'=='", "'!='", "'&&'", "'||'", "'>>'", "'<<'", "'&'", "'|'", "'!'",
- "'|>'", "'{'", "'}'", "'('", "')'", "'['", "']'", "':'", "','", "';'",
- "'->'", "'~'", "'='", "'let'", "'function'", "'when'", "'import'", "'is'",
- "'if'", "'else'", "'module'", "'do'", null, null, "'.'"
- };
- }
- private static final String[] _LITERAL_NAMES = makeLiteralNames();
- private static String[] makeSymbolicNames() {
- return new String[] {
- null, "ADD", "SUB", "MUL", "DIV", "MOD", "GT", "GE", "LT", "LE", "EQ",
- "NE", "AND", "OR", "SHL", "SHR", "BAND", "BOR", "EXCLAIM", "PIPE", "LBRACE",
- "RBRACE", "LPAREN", "RPAREN", "LBRACKET", "RBRACKET", "COLON", "COMMA",
- "SEMI", "ARROW", "TILDE", "ASSIGN", "LET", "FUNCTION", "WHEN", "IMPORT",
- "IS", "IF", "ELSE", "MODULE", "DO", "NUMBER", "STRING", "DOT", "LINE_COMMENT",
- "BLOCK_COMMENT", "ID", "WS"
- };
- }
- private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames();
- public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
-
- /**
- * @deprecated Use {@link #VOCABULARY} instead.
- */
- @Deprecated
- public static final String[] tokenNames;
- static {
- tokenNames = new String[_SYMBOLIC_NAMES.length];
- for (int i = 0; i < tokenNames.length; i++) {
- tokenNames[i] = VOCABULARY.getLiteralName(i);
- if (tokenNames[i] == null) {
- tokenNames[i] = VOCABULARY.getSymbolicName(i);
- }
-
- if (tokenNames[i] == null) {
- tokenNames[i] = "";
- }
- }
- }
-
- @Override
- @Deprecated
- public String[] getTokenNames() {
- return tokenNames;
- }
-
- @Override
-
- public Vocabulary getVocabulary() {
- return VOCABULARY;
- }
-
- @Override
- public String getGrammarFileName() { return "PiccodeScript.g4"; }
-
- @Override
- public String[] getRuleNames() { return ruleNames; }
-
- @Override
- public String getSerializedATN() { return _serializedATN; }
-
- @Override
- public ATN getATN() { return _ATN; }
-
- public PiccodeScriptParser(TokenStream input) {
- super(input);
- _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
- }
-
- public static class StmtsContext extends ParserRuleContext {
- public List stmt() {
- return getRuleContexts(StmtContext.class);
- }
- public StmtContext stmt(int i) {
- return getRuleContext(StmtContext.class,i);
- }
- public TerminalNode EOF() { return getToken(PiccodeScriptParser.EOF, 0); }
- public StmtsContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_stmts; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterStmts(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitStmts(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitStmts(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final StmtsContext stmts() throws RecognitionException {
- StmtsContext _localctx = new StmtsContext(_ctx, getState());
- enterRule(_localctx, 0, RULE_stmts);
- int _la;
- try {
- setState(67);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,1,_ctx) ) {
- case 1:
- enterOuterAlt(_localctx, 1);
- {
- setState(63);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << FUNCTION) | (1L << WHEN) | (1L << IMPORT) | (1L << IF) | (1L << MODULE) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
- {
- {
- setState(60);
- stmt();
- }
- }
- setState(65);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- break;
- case 2:
- enterOuterAlt(_localctx, 2);
- {
- setState(66);
- match(EOF);
- }
- break;
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class StmtContext extends ParserRuleContext {
- public Import_moduleContext import_module() {
- return getRuleContext(Import_moduleContext.class,0);
- }
- public FuncContext func() {
- return getRuleContext(FuncContext.class,0);
- }
- public ModuleContext module() {
- return getRuleContext(ModuleContext.class,0);
- }
- public Expr_stmtContext expr_stmt() {
- return getRuleContext(Expr_stmtContext.class,0);
- }
- public StmtContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_stmt; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterStmt(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitStmt(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitStmt(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final StmtContext stmt() throws RecognitionException {
- StmtContext _localctx = new StmtContext(_ctx, getState());
- enterRule(_localctx, 2, RULE_stmt);
- try {
- setState(73);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case IMPORT:
- enterOuterAlt(_localctx, 1);
- {
- setState(69);
- import_module();
- }
- break;
- case FUNCTION:
- enterOuterAlt(_localctx, 2);
- {
- setState(70);
- func();
- }
- break;
- case MODULE:
- enterOuterAlt(_localctx, 3);
- {
- setState(71);
- module();
- }
- break;
- case SUB:
- case BAND:
- case BOR:
- case EXCLAIM:
- case LBRACE:
- case LPAREN:
- case LBRACKET:
- case TILDE:
- case LET:
- case WHEN:
- case IF:
- case DO:
- case NUMBER:
- case STRING:
- case ID:
- enterOuterAlt(_localctx, 4);
- {
- setState(72);
- expr_stmt();
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Import_moduleContext extends ParserRuleContext {
- public TerminalNode IMPORT() { return getToken(PiccodeScriptParser.IMPORT, 0); }
- public List ID() { return getTokens(PiccodeScriptParser.ID); }
- public TerminalNode ID(int i) {
- return getToken(PiccodeScriptParser.ID, i);
- }
- public TerminalNode COLON() { return getToken(PiccodeScriptParser.COLON, 0); }
- public Import_moduleContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_import_module; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterImport_module(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitImport_module(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitImport_module(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Import_moduleContext import_module() throws RecognitionException {
- Import_moduleContext _localctx = new Import_moduleContext(_ctx, getState());
- enterRule(_localctx, 4, RULE_import_module);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(75);
- match(IMPORT);
- setState(76);
- match(ID);
- setState(77);
- match(COLON);
- setState(78);
- match(ID);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class ModuleContext extends ParserRuleContext {
- public TerminalNode MODULE() { return getToken(PiccodeScriptParser.MODULE, 0); }
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode LBRACE() { return getToken(PiccodeScriptParser.LBRACE, 0); }
- public Module_stmtsContext module_stmts() {
- return getRuleContext(Module_stmtsContext.class,0);
- }
- public TerminalNode RBRACE() { return getToken(PiccodeScriptParser.RBRACE, 0); }
- public ModuleContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_module; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterModule(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitModule(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitModule(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ModuleContext module() throws RecognitionException {
- ModuleContext _localctx = new ModuleContext(_ctx, getState());
- enterRule(_localctx, 6, RULE_module);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(80);
- match(MODULE);
- setState(81);
- match(ID);
- setState(82);
- match(LBRACE);
- setState(83);
- module_stmts();
- setState(84);
- match(RBRACE);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Module_stmtsContext extends ParserRuleContext {
- public List module_stmt() {
- return getRuleContexts(Module_stmtContext.class);
- }
- public Module_stmtContext module_stmt(int i) {
- return getRuleContext(Module_stmtContext.class,i);
- }
- public Module_stmtsContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_module_stmts; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterModule_stmts(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitModule_stmts(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitModule_stmts(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Module_stmtsContext module_stmts() throws RecognitionException {
- Module_stmtsContext _localctx = new Module_stmtsContext(_ctx, getState());
- enterRule(_localctx, 8, RULE_module_stmts);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(89);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LET) | (1L << FUNCTION) | (1L << MODULE))) != 0)) {
- {
- {
- setState(86);
- module_stmt();
- }
- }
- setState(91);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Module_stmtContext extends ParserRuleContext {
- public FuncContext func() {
- return getRuleContext(FuncContext.class,0);
- }
- public Var_declContext var_decl() {
- return getRuleContext(Var_declContext.class,0);
- }
- public ModuleContext module() {
- return getRuleContext(ModuleContext.class,0);
- }
- public Module_stmtContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_module_stmt; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterModule_stmt(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitModule_stmt(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitModule_stmt(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Module_stmtContext module_stmt() throws RecognitionException {
- Module_stmtContext _localctx = new Module_stmtContext(_ctx, getState());
- enterRule(_localctx, 10, RULE_module_stmt);
- try {
- setState(95);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case FUNCTION:
- enterOuterAlt(_localctx, 1);
- {
- setState(92);
- func();
- }
- break;
- case LET:
- enterOuterAlt(_localctx, 2);
- {
- setState(93);
- var_decl();
- }
- break;
- case MODULE:
- enterOuterAlt(_localctx, 3);
- {
- setState(94);
- module();
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class FuncContext extends ParserRuleContext {
- public TerminalNode FUNCTION() { return getToken(PiccodeScriptParser.FUNCTION, 0); }
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public Func_argsContext func_args() {
- return getRuleContext(Func_argsContext.class,0);
- }
- public TerminalNode ASSIGN() { return getToken(PiccodeScriptParser.ASSIGN, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public FuncContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_func; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterFunc(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitFunc(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitFunc(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final FuncContext func() throws RecognitionException {
- FuncContext _localctx = new FuncContext(_ctx, getState());
- enterRule(_localctx, 12, RULE_func);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(97);
- match(FUNCTION);
- setState(98);
- match(ID);
- setState(99);
- func_args();
- setState(100);
- match(ASSIGN);
- setState(101);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Func_argsContext extends ParserRuleContext {
- public TerminalNode LPAREN() { return getToken(PiccodeScriptParser.LPAREN, 0); }
- public TerminalNode RPAREN() { return getToken(PiccodeScriptParser.RPAREN, 0); }
- public Arg_listContext arg_list() {
- return getRuleContext(Arg_listContext.class,0);
- }
- public Func_argsContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_func_args; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterFunc_args(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitFunc_args(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitFunc_args(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Func_argsContext func_args() throws RecognitionException {
- Func_argsContext _localctx = new Func_argsContext(_ctx, getState());
- enterRule(_localctx, 14, RULE_func_args);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(103);
- match(LPAREN);
- setState(105);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==ID) {
- {
- setState(104);
- arg_list();
- }
- }
-
- setState(107);
- match(RPAREN);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Arg_listContext extends ParserRuleContext {
- public List arg() {
- return getRuleContexts(ArgContext.class);
- }
- public ArgContext arg(int i) {
- return getRuleContext(ArgContext.class,i);
- }
- public List COMMA() { return getTokens(PiccodeScriptParser.COMMA); }
- public TerminalNode COMMA(int i) {
- return getToken(PiccodeScriptParser.COMMA, i);
- }
- public Arg_listContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_arg_list; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterArg_list(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitArg_list(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitArg_list(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Arg_listContext arg_list() throws RecognitionException {
- Arg_listContext _localctx = new Arg_listContext(_ctx, getState());
- enterRule(_localctx, 16, RULE_arg_list);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(109);
- arg();
- setState(114);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==COMMA) {
- {
- {
- setState(110);
- match(COMMA);
- setState(111);
- arg();
- }
- }
- setState(116);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class ArgContext extends ParserRuleContext {
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode ASSIGN() { return getToken(PiccodeScriptParser.ASSIGN, 0); }
- public Literal_exprContext literal_expr() {
- return getRuleContext(Literal_exprContext.class,0);
- }
- public ArgContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_arg; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterArg(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitArg(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitArg(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ArgContext arg() throws RecognitionException {
- ArgContext _localctx = new ArgContext(_ctx, getState());
- enterRule(_localctx, 18, RULE_arg);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(117);
- match(ID);
- setState(120);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==ASSIGN) {
- {
- setState(118);
- match(ASSIGN);
- setState(119);
- literal_expr();
- }
- }
-
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Literal_exprContext extends ParserRuleContext {
- public TerminalNode NUMBER() { return getToken(PiccodeScriptParser.NUMBER, 0); }
- public TerminalNode STRING() { return getToken(PiccodeScriptParser.STRING, 0); }
- public ArrayContext array() {
- return getRuleContext(ArrayContext.class,0);
- }
- public TupleContext tuple() {
- return getRuleContext(TupleContext.class,0);
- }
- public ObjectContext object() {
- return getRuleContext(ObjectContext.class,0);
- }
- public Literal_exprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_literal_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterLiteral_expr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitLiteral_expr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitLiteral_expr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Literal_exprContext literal_expr() throws RecognitionException {
- Literal_exprContext _localctx = new Literal_exprContext(_ctx, getState());
- enterRule(_localctx, 20, RULE_literal_expr);
- try {
- setState(127);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case NUMBER:
- enterOuterAlt(_localctx, 1);
- {
- setState(122);
- match(NUMBER);
- }
- break;
- case STRING:
- enterOuterAlt(_localctx, 2);
- {
- setState(123);
- match(STRING);
- }
- break;
- case LBRACKET:
- enterOuterAlt(_localctx, 3);
- {
- setState(124);
- array();
- }
- break;
- case LPAREN:
- enterOuterAlt(_localctx, 4);
- {
- setState(125);
- tuple();
- }
- break;
- case LBRACE:
- enterOuterAlt(_localctx, 5);
- {
- setState(126);
- object();
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Expr_stmtContext extends ParserRuleContext {
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Expr_stmtContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_expr_stmt; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterExpr_stmt(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitExpr_stmt(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitExpr_stmt(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Expr_stmtContext expr_stmt() throws RecognitionException {
- Expr_stmtContext _localctx = new Expr_stmtContext(_ctx, getState());
- enterRule(_localctx, 22, RULE_expr_stmt);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(129);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class ExprContext extends ParserRuleContext {
- public Var_declContext var_decl() {
- return getRuleContext(Var_declContext.class,0);
- }
- public Closure_declContext closure_decl() {
- return getRuleContext(Closure_declContext.class,0);
- }
- public TerminalNode LPAREN() { return getToken(PiccodeScriptParser.LPAREN, 0); }
- public TerminalNode RPAREN() { return getToken(PiccodeScriptParser.RPAREN, 0); }
- public List expr() {
- return getRuleContexts(ExprContext.class);
- }
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
- }
- public UnaryContext unary() {
- return getRuleContext(UnaryContext.class,0);
- }
- public If_exprContext if_expr() {
- return getRuleContext(If_exprContext.class,0);
- }
- public When_exprContext when_expr() {
- return getRuleContext(When_exprContext.class,0);
- }
- public Do_exprContext do_expr() {
- return getRuleContext(Do_exprContext.class,0);
- }
- public ArrayContext array() {
- return getRuleContext(ArrayContext.class,0);
- }
- public TupleContext tuple() {
- return getRuleContext(TupleContext.class,0);
- }
- public ObjectContext object() {
- return getRuleContext(ObjectContext.class,0);
- }
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode NUMBER() { return getToken(PiccodeScriptParser.NUMBER, 0); }
- public TerminalNode STRING() { return getToken(PiccodeScriptParser.STRING, 0); }
- public TerminalNode DOT() { return getToken(PiccodeScriptParser.DOT, 0); }
- public TerminalNode PIPE() { return getToken(PiccodeScriptParser.PIPE, 0); }
- public TerminalNode OR() { return getToken(PiccodeScriptParser.OR, 0); }
- public TerminalNode AND() { return getToken(PiccodeScriptParser.AND, 0); }
- public TerminalNode EQ() { return getToken(PiccodeScriptParser.EQ, 0); }
- public TerminalNode NE() { return getToken(PiccodeScriptParser.NE, 0); }
- public TerminalNode LT() { return getToken(PiccodeScriptParser.LT, 0); }
- public TerminalNode LE() { return getToken(PiccodeScriptParser.LE, 0); }
- public TerminalNode GT() { return getToken(PiccodeScriptParser.GT, 0); }
- public TerminalNode GE() { return getToken(PiccodeScriptParser.GE, 0); }
- public TerminalNode SHL() { return getToken(PiccodeScriptParser.SHL, 0); }
- public TerminalNode SHR() { return getToken(PiccodeScriptParser.SHR, 0); }
- public TerminalNode BOR() { return getToken(PiccodeScriptParser.BOR, 0); }
- public TerminalNode BAND() { return getToken(PiccodeScriptParser.BAND, 0); }
- public TerminalNode MUL() { return getToken(PiccodeScriptParser.MUL, 0); }
- public TerminalNode DIV() { return getToken(PiccodeScriptParser.DIV, 0); }
- public TerminalNode MOD() { return getToken(PiccodeScriptParser.MOD, 0); }
- public TerminalNode ADD() { return getToken(PiccodeScriptParser.ADD, 0); }
- public TerminalNode SUB() { return getToken(PiccodeScriptParser.SUB, 0); }
- public TerminalNode COLON() { return getToken(PiccodeScriptParser.COLON, 0); }
- public Call_expr_listContext call_expr_list() {
- return getRuleContext(Call_expr_listContext.class,0);
- }
- public ExprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterExpr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitExpr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitExpr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ExprContext expr() throws RecognitionException {
- return expr(0);
- }
-
- private ExprContext expr(int _p) throws RecognitionException {
- ParserRuleContext _parentctx = _ctx;
- int _parentState = getState();
- ExprContext _localctx = new ExprContext(_ctx, _parentState);
- ExprContext _prevctx = _localctx;
- int _startState = 24;
- enterRecursionRule(_localctx, 24, RULE_expr, _p);
- int _la;
- try {
- int _alt;
- enterOuterAlt(_localctx, 1);
- {
- setState(149);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
- case 1:
- {
- setState(132);
- var_decl();
- }
- break;
- case 2:
- {
- setState(133);
- closure_decl();
- }
- break;
- case 3:
- {
- setState(134);
- match(LPAREN);
- setState(136);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
- {
- setState(135);
- expr(0);
- }
- }
-
- setState(138);
- match(RPAREN);
- }
- break;
- case 4:
- {
- setState(139);
- unary();
- }
- break;
- case 5:
- {
- setState(140);
- if_expr();
- }
- break;
- case 6:
- {
- setState(141);
- when_expr();
- }
- break;
- case 7:
- {
- setState(142);
- do_expr();
- }
- break;
- case 8:
- {
- setState(143);
- array();
- }
- break;
- case 9:
- {
- setState(144);
- tuple();
- }
- break;
- case 10:
- {
- setState(145);
- object();
- }
- break;
- case 11:
- {
- setState(146);
- match(ID);
- }
- break;
- case 12:
- {
- setState(147);
- match(NUMBER);
- }
- break;
- case 13:
- {
- setState(148);
- match(STRING);
- }
- break;
- }
- _ctx.stop = _input.LT(-1);
- setState(222);
- _errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
- while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
- if ( _alt==1 ) {
- if ( _parseListeners!=null ) triggerExitRuleEvent();
- _prevctx = _localctx;
- {
- setState(220);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) {
- case 1:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(151);
- if (!(precpred(_ctx, 32))) throw new FailedPredicateException(this, "precpred(_ctx, 32)");
- setState(152);
- match(DOT);
- setState(153);
- expr(33);
- }
- break;
- case 2:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(154);
- if (!(precpred(_ctx, 31))) throw new FailedPredicateException(this, "precpred(_ctx, 31)");
- setState(155);
- match(PIPE);
- setState(156);
- expr(32);
- }
- break;
- case 3:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(157);
- if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)");
- setState(158);
- match(OR);
- setState(159);
- expr(31);
- }
- break;
- case 4:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(160);
- if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)");
- setState(161);
- match(AND);
- setState(162);
- expr(30);
- }
- break;
- case 5:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(163);
- if (!(precpred(_ctx, 28))) throw new FailedPredicateException(this, "precpred(_ctx, 28)");
- setState(164);
- match(EQ);
- setState(165);
- expr(29);
- }
- break;
- case 6:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(166);
- if (!(precpred(_ctx, 27))) throw new FailedPredicateException(this, "precpred(_ctx, 27)");
- setState(167);
- match(NE);
- setState(168);
- expr(28);
- }
- break;
- case 7:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(169);
- if (!(precpred(_ctx, 26))) throw new FailedPredicateException(this, "precpred(_ctx, 26)");
- setState(170);
- match(LT);
- setState(171);
- expr(27);
- }
- break;
- case 8:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(172);
- if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)");
- setState(173);
- match(LE);
- setState(174);
- expr(26);
- }
- break;
- case 9:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(175);
- if (!(precpred(_ctx, 24))) throw new FailedPredicateException(this, "precpred(_ctx, 24)");
- setState(176);
- match(GT);
- setState(177);
- expr(25);
- }
- break;
- case 10:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(178);
- if (!(precpred(_ctx, 23))) throw new FailedPredicateException(this, "precpred(_ctx, 23)");
- setState(179);
- match(GE);
- setState(180);
- expr(24);
- }
- break;
- case 11:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(181);
- if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)");
- setState(182);
- match(SHL);
- setState(183);
- expr(23);
- }
- break;
- case 12:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(184);
- if (!(precpred(_ctx, 21))) throw new FailedPredicateException(this, "precpred(_ctx, 21)");
- setState(185);
- match(SHR);
- setState(186);
- expr(22);
- }
- break;
- case 13:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(187);
- if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
- setState(188);
- match(BOR);
- setState(189);
- expr(21);
- }
- break;
- case 14:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(190);
- if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
- setState(191);
- match(BAND);
- setState(192);
- expr(20);
- }
- break;
- case 15:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(193);
- if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
- setState(194);
- match(MUL);
- setState(195);
- expr(19);
- }
- break;
- case 16:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(196);
- if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
- setState(197);
- match(DIV);
- setState(198);
- expr(18);
- }
- break;
- case 17:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(199);
- if (!(precpred(_ctx, 16))) throw new FailedPredicateException(this, "precpred(_ctx, 16)");
- setState(200);
- match(MOD);
- setState(201);
- expr(17);
- }
- break;
- case 18:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(202);
- if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)");
- setState(203);
- match(ADD);
- setState(204);
- expr(16);
- }
- break;
- case 19:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(205);
- if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)");
- setState(206);
- match(SUB);
- setState(207);
- expr(15);
- }
- break;
- case 20:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(208);
- if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
- setState(209);
- match(DOT);
- setState(210);
- expr(14);
- }
- break;
- case 21:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(211);
- if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
- setState(212);
- match(COLON);
- setState(213);
- expr(13);
- }
- break;
- case 22:
- {
- _localctx = new ExprContext(_parentctx, _parentState);
- pushNewRecursionContext(_localctx, _startState, RULE_expr);
- setState(214);
- if (!(precpred(_ctx, 35))) throw new FailedPredicateException(this, "precpred(_ctx, 35)");
- setState(215);
- match(LPAREN);
- setState(217);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
- {
- setState(216);
- call_expr_list();
- }
- }
-
- setState(219);
- match(RPAREN);
- }
- break;
- }
- }
- }
- setState(224);
- _errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,13,_ctx);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- unrollRecursionContexts(_parentctx);
- }
- return _localctx;
- }
-
- public static class Closure_declContext extends ParserRuleContext {
- public List BOR() { return getTokens(PiccodeScriptParser.BOR); }
- public TerminalNode BOR(int i) {
- return getToken(PiccodeScriptParser.BOR, i);
- }
- public TerminalNode ARROW() { return getToken(PiccodeScriptParser.ARROW, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Arg_listContext arg_list() {
- return getRuleContext(Arg_listContext.class,0);
- }
- public Closure_declContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_closure_decl; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterClosure_decl(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitClosure_decl(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitClosure_decl(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Closure_declContext closure_decl() throws RecognitionException {
- Closure_declContext _localctx = new Closure_declContext(_ctx, getState());
- enterRule(_localctx, 26, RULE_closure_decl);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(225);
- match(BOR);
- setState(227);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==ID) {
- {
- setState(226);
- arg_list();
- }
- }
-
- setState(229);
- match(BOR);
- setState(230);
- match(ARROW);
- setState(231);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class UnaryContext extends ParserRuleContext {
- public TerminalNode EXCLAIM() { return getToken(PiccodeScriptParser.EXCLAIM, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public TerminalNode SUB() { return getToken(PiccodeScriptParser.SUB, 0); }
- public TerminalNode TILDE() { return getToken(PiccodeScriptParser.TILDE, 0); }
- public TerminalNode BAND() { return getToken(PiccodeScriptParser.BAND, 0); }
- public UnaryContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_unary; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterUnary(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitUnary(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitUnary(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final UnaryContext unary() throws RecognitionException {
- UnaryContext _localctx = new UnaryContext(_ctx, getState());
- enterRule(_localctx, 28, RULE_unary);
- try {
- setState(241);
- _errHandler.sync(this);
- switch (_input.LA(1)) {
- case EXCLAIM:
- enterOuterAlt(_localctx, 1);
- {
- setState(233);
- match(EXCLAIM);
- setState(234);
- expr(0);
- }
- break;
- case SUB:
- enterOuterAlt(_localctx, 2);
- {
- setState(235);
- match(SUB);
- setState(236);
- expr(0);
- }
- break;
- case TILDE:
- enterOuterAlt(_localctx, 3);
- {
- setState(237);
- match(TILDE);
- setState(238);
- expr(0);
- }
- break;
- case BAND:
- enterOuterAlt(_localctx, 4);
- {
- setState(239);
- match(BAND);
- setState(240);
- expr(0);
- }
- break;
- default:
- throw new NoViableAltException(this);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class If_exprContext extends ParserRuleContext {
- public TerminalNode IF() { return getToken(PiccodeScriptParser.IF, 0); }
- public List expr() {
- return getRuleContexts(ExprContext.class);
- }
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
- }
- public List LBRACE() { return getTokens(PiccodeScriptParser.LBRACE); }
- public TerminalNode LBRACE(int i) {
- return getToken(PiccodeScriptParser.LBRACE, i);
- }
- public List RBRACE() { return getTokens(PiccodeScriptParser.RBRACE); }
- public TerminalNode RBRACE(int i) {
- return getToken(PiccodeScriptParser.RBRACE, i);
- }
- public TerminalNode ELSE() { return getToken(PiccodeScriptParser.ELSE, 0); }
- public If_exprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_if_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterIf_expr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitIf_expr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitIf_expr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final If_exprContext if_expr() throws RecognitionException {
- If_exprContext _localctx = new If_exprContext(_ctx, getState());
- enterRule(_localctx, 30, RULE_if_expr);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(243);
- match(IF);
- setState(244);
- expr(0);
- setState(245);
- match(LBRACE);
- setState(246);
- expr(0);
- setState(247);
- match(RBRACE);
- setState(248);
- match(ELSE);
- setState(249);
- match(LBRACE);
- setState(250);
- expr(0);
- setState(251);
- match(RBRACE);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class When_exprContext extends ParserRuleContext {
- public TerminalNode WHEN() { return getToken(PiccodeScriptParser.WHEN, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public TerminalNode LBRACE() { return getToken(PiccodeScriptParser.LBRACE, 0); }
- public When_casesContext when_cases() {
- return getRuleContext(When_casesContext.class,0);
- }
- public TerminalNode RBRACE() { return getToken(PiccodeScriptParser.RBRACE, 0); }
- public Else_caseContext else_case() {
- return getRuleContext(Else_caseContext.class,0);
- }
- public When_exprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_when_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterWhen_expr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitWhen_expr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitWhen_expr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final When_exprContext when_expr() throws RecognitionException {
- When_exprContext _localctx = new When_exprContext(_ctx, getState());
- enterRule(_localctx, 32, RULE_when_expr);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(253);
- match(WHEN);
- setState(254);
- expr(0);
- setState(255);
- match(LBRACE);
- setState(256);
- when_cases();
- setState(258);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==ELSE) {
- {
- setState(257);
- else_case();
- }
- }
-
- setState(260);
- match(RBRACE);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class When_casesContext extends ParserRuleContext {
- public List when_case() {
- return getRuleContexts(When_caseContext.class);
- }
- public When_caseContext when_case(int i) {
- return getRuleContext(When_caseContext.class,i);
- }
- public When_casesContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_when_cases; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterWhen_cases(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitWhen_cases(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitWhen_cases(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final When_casesContext when_cases() throws RecognitionException {
- When_casesContext _localctx = new When_casesContext(_ctx, getState());
- enterRule(_localctx, 34, RULE_when_cases);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(265);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==IS) {
- {
- {
- setState(262);
- when_case();
- }
- }
- setState(267);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class When_caseContext extends ParserRuleContext {
- public TerminalNode IS() { return getToken(PiccodeScriptParser.IS, 0); }
- public Expr_listContext expr_list() {
- return getRuleContext(Expr_listContext.class,0);
- }
- public TerminalNode ARROW() { return getToken(PiccodeScriptParser.ARROW, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public When_caseContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_when_case; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterWhen_case(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitWhen_case(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitWhen_case(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final When_caseContext when_case() throws RecognitionException {
- When_caseContext _localctx = new When_caseContext(_ctx, getState());
- enterRule(_localctx, 36, RULE_when_case);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(268);
- match(IS);
- setState(269);
- expr_list();
- setState(270);
- match(ARROW);
- setState(271);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Else_caseContext extends ParserRuleContext {
- public TerminalNode ELSE() { return getToken(PiccodeScriptParser.ELSE, 0); }
- public TerminalNode ARROW() { return getToken(PiccodeScriptParser.ARROW, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Else_caseContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_else_case; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterElse_case(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitElse_case(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitElse_case(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Else_caseContext else_case() throws RecognitionException {
- Else_caseContext _localctx = new Else_caseContext(_ctx, getState());
- enterRule(_localctx, 38, RULE_else_case);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(273);
- match(ELSE);
- setState(274);
- match(ARROW);
- setState(275);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Var_declContext extends ParserRuleContext {
- public TerminalNode LET() { return getToken(PiccodeScriptParser.LET, 0); }
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode ASSIGN() { return getToken(PiccodeScriptParser.ASSIGN, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Var_declContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_var_decl; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterVar_decl(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitVar_decl(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitVar_decl(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Var_declContext var_decl() throws RecognitionException {
- Var_declContext _localctx = new Var_declContext(_ctx, getState());
- enterRule(_localctx, 40, RULE_var_decl);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(277);
- match(LET);
- setState(278);
- match(ID);
- setState(279);
- match(ASSIGN);
- setState(280);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class TupleContext extends ParserRuleContext {
- public TerminalNode LPAREN() { return getToken(PiccodeScriptParser.LPAREN, 0); }
- public Expr_listContext expr_list() {
- return getRuleContext(Expr_listContext.class,0);
- }
- public TerminalNode RPAREN() { return getToken(PiccodeScriptParser.RPAREN, 0); }
- public TupleContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_tuple; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterTuple(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitTuple(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitTuple(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final TupleContext tuple() throws RecognitionException {
- TupleContext _localctx = new TupleContext(_ctx, getState());
- enterRule(_localctx, 42, RULE_tuple);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(282);
- match(LPAREN);
- setState(283);
- expr_list();
- setState(284);
- match(RPAREN);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class ArrayContext extends ParserRuleContext {
- public TerminalNode LBRACKET() { return getToken(PiccodeScriptParser.LBRACKET, 0); }
- public TerminalNode RBRACKET() { return getToken(PiccodeScriptParser.RBRACKET, 0); }
- public Expr_listContext expr_list() {
- return getRuleContext(Expr_listContext.class,0);
- }
- public ArrayContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_array; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterArray(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitArray(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitArray(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ArrayContext array() throws RecognitionException {
- ArrayContext _localctx = new ArrayContext(_ctx, getState());
- enterRule(_localctx, 44, RULE_array);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(286);
- match(LBRACKET);
- setState(288);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
- {
- setState(287);
- expr_list();
- }
- }
-
- setState(290);
- match(RBRACKET);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class ObjectContext extends ParserRuleContext {
- public TerminalNode LBRACE() { return getToken(PiccodeScriptParser.LBRACE, 0); }
- public Key_val_pairsContext key_val_pairs() {
- return getRuleContext(Key_val_pairsContext.class,0);
- }
- public TerminalNode RBRACE() { return getToken(PiccodeScriptParser.RBRACE, 0); }
- public ObjectContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_object; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterObject(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitObject(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitObject(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final ObjectContext object() throws RecognitionException {
- ObjectContext _localctx = new ObjectContext(_ctx, getState());
- enterRule(_localctx, 46, RULE_object);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(292);
- match(LBRACE);
- setState(293);
- key_val_pairs();
- setState(294);
- match(RBRACE);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Expr_listContext extends ParserRuleContext {
- public List expr() {
- return getRuleContexts(ExprContext.class);
- }
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
- }
- public List COMMA() { return getTokens(PiccodeScriptParser.COMMA); }
- public TerminalNode COMMA(int i) {
- return getToken(PiccodeScriptParser.COMMA, i);
- }
- public Expr_listContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_expr_list; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterExpr_list(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitExpr_list(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitExpr_list(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Expr_listContext expr_list() throws RecognitionException {
- Expr_listContext _localctx = new Expr_listContext(_ctx, getState());
- enterRule(_localctx, 48, RULE_expr_list);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(296);
- expr(0);
- setState(301);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==COMMA) {
- {
- {
- setState(297);
- match(COMMA);
- setState(298);
- expr(0);
- }
- }
- setState(303);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Call_expr_listContext extends ParserRuleContext {
- public List call_expr() {
- return getRuleContexts(Call_exprContext.class);
- }
- public Call_exprContext call_expr(int i) {
- return getRuleContext(Call_exprContext.class,i);
- }
- public List COMMA() { return getTokens(PiccodeScriptParser.COMMA); }
- public TerminalNode COMMA(int i) {
- return getToken(PiccodeScriptParser.COMMA, i);
- }
- public Call_expr_listContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_call_expr_list; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterCall_expr_list(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitCall_expr_list(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitCall_expr_list(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Call_expr_listContext call_expr_list() throws RecognitionException {
- Call_expr_listContext _localctx = new Call_expr_listContext(_ctx, getState());
- enterRule(_localctx, 50, RULE_call_expr_list);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(304);
- call_expr();
- setState(309);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==COMMA) {
- {
- {
- setState(305);
- match(COMMA);
- setState(306);
- call_expr();
- }
- }
- setState(311);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Call_exprContext extends ParserRuleContext {
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode ASSIGN() { return getToken(PiccodeScriptParser.ASSIGN, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Call_exprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_call_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterCall_expr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitCall_expr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitCall_expr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Call_exprContext call_expr() throws RecognitionException {
- Call_exprContext _localctx = new Call_exprContext(_ctx, getState());
- enterRule(_localctx, 52, RULE_call_expr);
- int _la;
- try {
- setState(318);
- _errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,22,_ctx) ) {
- case 1:
- enterOuterAlt(_localctx, 1);
- {
- setState(312);
- match(ID);
- setState(315);
- _errHandler.sync(this);
- _la = _input.LA(1);
- if (_la==ASSIGN) {
- {
- setState(313);
- match(ASSIGN);
- setState(314);
- expr(0);
- }
- }
-
- }
- break;
- case 2:
- enterOuterAlt(_localctx, 2);
- {
- setState(317);
- expr(0);
- }
- break;
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Key_val_pairContext extends ParserRuleContext {
- public TerminalNode ID() { return getToken(PiccodeScriptParser.ID, 0); }
- public TerminalNode COLON() { return getToken(PiccodeScriptParser.COLON, 0); }
- public ExprContext expr() {
- return getRuleContext(ExprContext.class,0);
- }
- public Key_val_pairContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_key_val_pair; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterKey_val_pair(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitKey_val_pair(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitKey_val_pair(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Key_val_pairContext key_val_pair() throws RecognitionException {
- Key_val_pairContext _localctx = new Key_val_pairContext(_ctx, getState());
- enterRule(_localctx, 54, RULE_key_val_pair);
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(320);
- match(ID);
- setState(321);
- match(COLON);
- setState(322);
- expr(0);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Key_val_pairsContext extends ParserRuleContext {
- public List key_val_pair() {
- return getRuleContexts(Key_val_pairContext.class);
- }
- public Key_val_pairContext key_val_pair(int i) {
- return getRuleContext(Key_val_pairContext.class,i);
- }
- public List COMMA() { return getTokens(PiccodeScriptParser.COMMA); }
- public TerminalNode COMMA(int i) {
- return getToken(PiccodeScriptParser.COMMA, i);
- }
- public Key_val_pairsContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_key_val_pairs; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterKey_val_pairs(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitKey_val_pairs(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitKey_val_pairs(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Key_val_pairsContext key_val_pairs() throws RecognitionException {
- Key_val_pairsContext _localctx = new Key_val_pairsContext(_ctx, getState());
- enterRule(_localctx, 56, RULE_key_val_pairs);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(324);
- key_val_pair();
- setState(329);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while (_la==COMMA) {
- {
- {
- setState(325);
- match(COMMA);
- setState(326);
- key_val_pair();
- }
- }
- setState(331);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public static class Do_exprContext extends ParserRuleContext {
- public TerminalNode DO() { return getToken(PiccodeScriptParser.DO, 0); }
- public TerminalNode LBRACE() { return getToken(PiccodeScriptParser.LBRACE, 0); }
- public TerminalNode RBRACE() { return getToken(PiccodeScriptParser.RBRACE, 0); }
- public List expr() {
- return getRuleContexts(ExprContext.class);
- }
- public ExprContext expr(int i) {
- return getRuleContext(ExprContext.class,i);
- }
- public Do_exprContext(ParserRuleContext parent, int invokingState) {
- super(parent, invokingState);
- }
- @Override public int getRuleIndex() { return RULE_do_expr; }
- @Override
- public void enterRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).enterDo_expr(this);
- }
- @Override
- public void exitRule(ParseTreeListener listener) {
- if ( listener instanceof PiccodeScriptListener ) ((PiccodeScriptListener)listener).exitDo_expr(this);
- }
- @Override
- public T accept(ParseTreeVisitor extends T> visitor) {
- if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor extends T>)visitor).visitDo_expr(this);
- else return visitor.visitChildren(this);
- }
- }
-
- public final Do_exprContext do_expr() throws RecognitionException {
- Do_exprContext _localctx = new Do_exprContext(_ctx, getState());
- enterRule(_localctx, 58, RULE_do_expr);
- int _la;
- try {
- enterOuterAlt(_localctx, 1);
- {
- setState(332);
- match(DO);
- setState(333);
- match(LBRACE);
- setState(337);
- _errHandler.sync(this);
- _la = _input.LA(1);
- while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SUB) | (1L << BAND) | (1L << BOR) | (1L << EXCLAIM) | (1L << LBRACE) | (1L << LPAREN) | (1L << LBRACKET) | (1L << TILDE) | (1L << LET) | (1L << WHEN) | (1L << IF) | (1L << DO) | (1L << NUMBER) | (1L << STRING) | (1L << ID))) != 0)) {
- {
- {
- setState(334);
- expr(0);
- }
- }
- setState(339);
- _errHandler.sync(this);
- _la = _input.LA(1);
- }
- setState(340);
- match(RBRACE);
- }
- }
- catch (RecognitionException re) {
- _localctx.exception = re;
- _errHandler.reportError(this, re);
- _errHandler.recover(this, re);
- }
- finally {
- exitRule();
- }
- return _localctx;
- }
-
- public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
- switch (ruleIndex) {
- case 12:
- return expr_sempred((ExprContext)_localctx, predIndex);
- }
- return true;
- }
- private boolean expr_sempred(ExprContext _localctx, int predIndex) {
- switch (predIndex) {
- case 0:
- return precpred(_ctx, 32);
- case 1:
- return precpred(_ctx, 31);
- case 2:
- return precpred(_ctx, 30);
- case 3:
- return precpred(_ctx, 29);
- case 4:
- return precpred(_ctx, 28);
- case 5:
- return precpred(_ctx, 27);
- case 6:
- return precpred(_ctx, 26);
- case 7:
- return precpred(_ctx, 25);
- case 8:
- return precpred(_ctx, 24);
- case 9:
- return precpred(_ctx, 23);
- case 10:
- return precpred(_ctx, 22);
- case 11:
- return precpred(_ctx, 21);
- case 12:
- return precpred(_ctx, 20);
- case 13:
- return precpred(_ctx, 19);
- case 14:
- return precpred(_ctx, 18);
- case 15:
- return precpred(_ctx, 17);
- case 16:
- return precpred(_ctx, 16);
- case 17:
- return precpred(_ctx, 15);
- case 18:
- return precpred(_ctx, 14);
- case 19:
- return precpred(_ctx, 13);
- case 20:
- return precpred(_ctx, 12);
- case 21:
- return precpred(_ctx, 35);
- }
- return true;
- }
-
- public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\61\u0159\4\2\t\2"+
- "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
- "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
- "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
- "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\3\2\7\2@"+
- "\n\2\f\2\16\2C\13\2\3\2\5\2F\n\2\3\3\3\3\3\3\3\3\5\3L\n\3\3\4\3\4\3\4"+
- "\3\4\3\4\3\5\3\5\3\5\3\5\3\5\3\5\3\6\7\6Z\n\6\f\6\16\6]\13\6\3\7\3\7\3"+
- "\7\5\7b\n\7\3\b\3\b\3\b\3\b\3\b\3\b\3\t\3\t\5\tl\n\t\3\t\3\t\3\n\3\n\3"+
- "\n\7\ns\n\n\f\n\16\nv\13\n\3\13\3\13\3\13\5\13{\n\13\3\f\3\f\3\f\3\f\3"+
- "\f\5\f\u0082\n\f\3\r\3\r\3\16\3\16\3\16\3\16\3\16\5\16\u008b\n\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u0098\n\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16"+
- "\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\3\16\5\16\u00dc\n\16\3\16\7\16"+
- "\u00df\n\16\f\16\16\16\u00e2\13\16\3\17\3\17\5\17\u00e6\n\17\3\17\3\17"+
- "\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\20\3\20\5\20\u00f4\n\20\3\21"+
- "\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22"+
- "\5\22\u0105\n\22\3\22\3\22\3\23\7\23\u010a\n\23\f\23\16\23\u010d\13\23"+
- "\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26"+
- "\3\27\3\27\3\27\3\27\3\30\3\30\5\30\u0123\n\30\3\30\3\30\3\31\3\31\3\31"+
- "\3\31\3\32\3\32\3\32\7\32\u012e\n\32\f\32\16\32\u0131\13\32\3\33\3\33"+
- "\3\33\7\33\u0136\n\33\f\33\16\33\u0139\13\33\3\34\3\34\3\34\5\34\u013e"+
- "\n\34\3\34\5\34\u0141\n\34\3\35\3\35\3\35\3\35\3\36\3\36\3\36\7\36\u014a"+
- "\n\36\f\36\16\36\u014d\13\36\3\37\3\37\3\37\7\37\u0152\n\37\f\37\16\37"+
- "\u0155\13\37\3\37\3\37\3\37\2\3\32 \2\4\6\b\n\f\16\20\22\24\26\30\32\34"+
- "\36 \"$&(*,.\60\62\64\668:<\2\2\2\u017a\2E\3\2\2\2\4K\3\2\2\2\6M\3\2\2"+
- "\2\bR\3\2\2\2\n[\3\2\2\2\fa\3\2\2\2\16c\3\2\2\2\20i\3\2\2\2\22o\3\2\2"+
- "\2\24w\3\2\2\2\26\u0081\3\2\2\2\30\u0083\3\2\2\2\32\u0097\3\2\2\2\34\u00e3"+
- "\3\2\2\2\36\u00f3\3\2\2\2 \u00f5\3\2\2\2\"\u00ff\3\2\2\2$\u010b\3\2\2"+
- "\2&\u010e\3\2\2\2(\u0113\3\2\2\2*\u0117\3\2\2\2,\u011c\3\2\2\2.\u0120"+
- "\3\2\2\2\60\u0126\3\2\2\2\62\u012a\3\2\2\2\64\u0132\3\2\2\2\66\u0140\3"+
- "\2\2\28\u0142\3\2\2\2:\u0146\3\2\2\2<\u014e\3\2\2\2>@\5\4\3\2?>\3\2\2"+
- "\2@C\3\2\2\2A?\3\2\2\2AB\3\2\2\2BF\3\2\2\2CA\3\2\2\2DF\7\2\2\3EA\3\2\2"+
- "\2ED\3\2\2\2F\3\3\2\2\2GL\5\6\4\2HL\5\16\b\2IL\5\b\5\2JL\5\30\r\2KG\3"+
- "\2\2\2KH\3\2\2\2KI\3\2\2\2KJ\3\2\2\2L\5\3\2\2\2MN\7%\2\2NO\7\60\2\2OP"+
- "\7\34\2\2PQ\7\60\2\2Q\7\3\2\2\2RS\7)\2\2ST\7\60\2\2TU\7\26\2\2UV\5\n\6"+
- "\2VW\7\27\2\2W\t\3\2\2\2XZ\5\f\7\2YX\3\2\2\2Z]\3\2\2\2[Y\3\2\2\2[\\\3"+
- "\2\2\2\\\13\3\2\2\2][\3\2\2\2^b\5\16\b\2_b\5*\26\2`b\5\b\5\2a^\3\2\2\2"+
- "a_\3\2\2\2a`\3\2\2\2b\r\3\2\2\2cd\7#\2\2de\7\60\2\2ef\5\20\t\2fg\7!\2"+
- "\2gh\5\32\16\2h\17\3\2\2\2ik\7\30\2\2jl\5\22\n\2kj\3\2\2\2kl\3\2\2\2l"+
- "m\3\2\2\2mn\7\31\2\2n\21\3\2\2\2ot\5\24\13\2pq\7\35\2\2qs\5\24\13\2rp"+
- "\3\2\2\2sv\3\2\2\2tr\3\2\2\2tu\3\2\2\2u\23\3\2\2\2vt\3\2\2\2wz\7\60\2"+
- "\2xy\7!\2\2y{\5\26\f\2zx\3\2\2\2z{\3\2\2\2{\25\3\2\2\2|\u0082\7+\2\2}"+
- "\u0082\7,\2\2~\u0082\5.\30\2\177\u0082\5,\27\2\u0080\u0082\5\60\31\2\u0081"+
- "|\3\2\2\2\u0081}\3\2\2\2\u0081~\3\2\2\2\u0081\177\3\2\2\2\u0081\u0080"+
- "\3\2\2\2\u0082\27\3\2\2\2\u0083\u0084\5\32\16\2\u0084\31\3\2\2\2\u0085"+
- "\u0086\b\16\1\2\u0086\u0098\5*\26\2\u0087\u0098\5\34\17\2\u0088\u008a"+
- "\7\30\2\2\u0089\u008b\5\32\16\2\u008a\u0089\3\2\2\2\u008a\u008b\3\2\2"+
- "\2\u008b\u008c\3\2\2\2\u008c\u0098\7\31\2\2\u008d\u0098\5\36\20\2\u008e"+
- "\u0098\5 \21\2\u008f\u0098\5\"\22\2\u0090\u0098\5<\37\2\u0091\u0098\5"+
- ".\30\2\u0092\u0098\5,\27\2\u0093\u0098\5\60\31\2\u0094\u0098\7\60\2\2"+
- "\u0095\u0098\7+\2\2\u0096\u0098\7,\2\2\u0097\u0085\3\2\2\2\u0097\u0087"+
- "\3\2\2\2\u0097\u0088\3\2\2\2\u0097\u008d\3\2\2\2\u0097\u008e\3\2\2\2\u0097"+
- "\u008f\3\2\2\2\u0097\u0090\3\2\2\2\u0097\u0091\3\2\2\2\u0097\u0092\3\2"+
- "\2\2\u0097\u0093\3\2\2\2\u0097\u0094\3\2\2\2\u0097\u0095\3\2\2\2\u0097"+
- "\u0096\3\2\2\2\u0098\u00e0\3\2\2\2\u0099\u009a\f\"\2\2\u009a\u009b\7-"+
- "\2\2\u009b\u00df\5\32\16#\u009c\u009d\f!\2\2\u009d\u009e\7\25\2\2\u009e"+
- "\u00df\5\32\16\"\u009f\u00a0\f \2\2\u00a0\u00a1\7\17\2\2\u00a1\u00df\5"+
- "\32\16!\u00a2\u00a3\f\37\2\2\u00a3\u00a4\7\16\2\2\u00a4\u00df\5\32\16"+
- " \u00a5\u00a6\f\36\2\2\u00a6\u00a7\7\f\2\2\u00a7\u00df\5\32\16\37\u00a8"+
- "\u00a9\f\35\2\2\u00a9\u00aa\7\r\2\2\u00aa\u00df\5\32\16\36\u00ab\u00ac"+
- "\f\34\2\2\u00ac\u00ad\7\n\2\2\u00ad\u00df\5\32\16\35\u00ae\u00af\f\33"+
- "\2\2\u00af\u00b0\7\13\2\2\u00b0\u00df\5\32\16\34\u00b1\u00b2\f\32\2\2"+
- "\u00b2\u00b3\7\b\2\2\u00b3\u00df\5\32\16\33\u00b4\u00b5\f\31\2\2\u00b5"+
- "\u00b6\7\t\2\2\u00b6\u00df\5\32\16\32\u00b7\u00b8\f\30\2\2\u00b8\u00b9"+
- "\7\20\2\2\u00b9\u00df\5\32\16\31\u00ba\u00bb\f\27\2\2\u00bb\u00bc\7\21"+
- "\2\2\u00bc\u00df\5\32\16\30\u00bd\u00be\f\26\2\2\u00be\u00bf\7\23\2\2"+
- "\u00bf\u00df\5\32\16\27\u00c0\u00c1\f\25\2\2\u00c1\u00c2\7\22\2\2\u00c2"+
- "\u00df\5\32\16\26\u00c3\u00c4\f\24\2\2\u00c4\u00c5\7\5\2\2\u00c5\u00df"+
- "\5\32\16\25\u00c6\u00c7\f\23\2\2\u00c7\u00c8\7\6\2\2\u00c8\u00df\5\32"+
- "\16\24\u00c9\u00ca\f\22\2\2\u00ca\u00cb\7\7\2\2\u00cb\u00df\5\32\16\23"+
- "\u00cc\u00cd\f\21\2\2\u00cd\u00ce\7\3\2\2\u00ce\u00df\5\32\16\22\u00cf"+
- "\u00d0\f\20\2\2\u00d0\u00d1\7\4\2\2\u00d1\u00df\5\32\16\21\u00d2\u00d3"+
- "\f\17\2\2\u00d3\u00d4\7-\2\2\u00d4\u00df\5\32\16\20\u00d5\u00d6\f\16\2"+
- "\2\u00d6\u00d7\7\34\2\2\u00d7\u00df\5\32\16\17\u00d8\u00d9\f%\2\2\u00d9"+
- "\u00db\7\30\2\2\u00da\u00dc\5\64\33\2\u00db\u00da\3\2\2\2\u00db\u00dc"+
- "\3\2\2\2\u00dc\u00dd\3\2\2\2\u00dd\u00df\7\31\2\2\u00de\u0099\3\2\2\2"+
- "\u00de\u009c\3\2\2\2\u00de\u009f\3\2\2\2\u00de\u00a2\3\2\2\2\u00de\u00a5"+
- "\3\2\2\2\u00de\u00a8\3\2\2\2\u00de\u00ab\3\2\2\2\u00de\u00ae\3\2\2\2\u00de"+
- "\u00b1\3\2\2\2\u00de\u00b4\3\2\2\2\u00de\u00b7\3\2\2\2\u00de\u00ba\3\2"+
- "\2\2\u00de\u00bd\3\2\2\2\u00de\u00c0\3\2\2\2\u00de\u00c3\3\2\2\2\u00de"+
- "\u00c6\3\2\2\2\u00de\u00c9\3\2\2\2\u00de\u00cc\3\2\2\2\u00de\u00cf\3\2"+
- "\2\2\u00de\u00d2\3\2\2\2\u00de\u00d5\3\2\2\2\u00de\u00d8\3\2\2\2\u00df"+
- "\u00e2\3\2\2\2\u00e0\u00de\3\2\2\2\u00e0\u00e1\3\2\2\2\u00e1\33\3\2\2"+
- "\2\u00e2\u00e0\3\2\2\2\u00e3\u00e5\7\23\2\2\u00e4\u00e6\5\22\n\2\u00e5"+
- "\u00e4\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00e8\7\23"+
- "\2\2\u00e8\u00e9\7\37\2\2\u00e9\u00ea\5\32\16\2\u00ea\35\3\2\2\2\u00eb"+
- "\u00ec\7\24\2\2\u00ec\u00f4\5\32\16\2\u00ed\u00ee\7\4\2\2\u00ee\u00f4"+
- "\5\32\16\2\u00ef\u00f0\7 \2\2\u00f0\u00f4\5\32\16\2\u00f1\u00f2\7\22\2"+
- "\2\u00f2\u00f4\5\32\16\2\u00f3\u00eb\3\2\2\2\u00f3\u00ed\3\2\2\2\u00f3"+
- "\u00ef\3\2\2\2\u00f3\u00f1\3\2\2\2\u00f4\37\3\2\2\2\u00f5\u00f6\7\'\2"+
- "\2\u00f6\u00f7\5\32\16\2\u00f7\u00f8\7\26\2\2\u00f8\u00f9\5\32\16\2\u00f9"+
- "\u00fa\7\27\2\2\u00fa\u00fb\7(\2\2\u00fb\u00fc\7\26\2\2\u00fc\u00fd\5"+
- "\32\16\2\u00fd\u00fe\7\27\2\2\u00fe!\3\2\2\2\u00ff\u0100\7$\2\2\u0100"+
- "\u0101\5\32\16\2\u0101\u0102\7\26\2\2\u0102\u0104\5$\23\2\u0103\u0105"+
- "\5(\25\2\u0104\u0103\3\2\2\2\u0104\u0105\3\2\2\2\u0105\u0106\3\2\2\2\u0106"+
- "\u0107\7\27\2\2\u0107#\3\2\2\2\u0108\u010a\5&\24\2\u0109\u0108\3\2\2\2"+
- "\u010a\u010d\3\2\2\2\u010b\u0109\3\2\2\2\u010b\u010c\3\2\2\2\u010c%\3"+
- "\2\2\2\u010d\u010b\3\2\2\2\u010e\u010f\7&\2\2\u010f\u0110\5\62\32\2\u0110"+
- "\u0111\7\37\2\2\u0111\u0112\5\32\16\2\u0112\'\3\2\2\2\u0113\u0114\7(\2"+
- "\2\u0114\u0115\7\37\2\2\u0115\u0116\5\32\16\2\u0116)\3\2\2\2\u0117\u0118"+
- "\7\"\2\2\u0118\u0119\7\60\2\2\u0119\u011a\7!\2\2\u011a\u011b\5\32\16\2"+
- "\u011b+\3\2\2\2\u011c\u011d\7\30\2\2\u011d\u011e\5\62\32\2\u011e\u011f"+
- "\7\31\2\2\u011f-\3\2\2\2\u0120\u0122\7\32\2\2\u0121\u0123\5\62\32\2\u0122"+
- "\u0121\3\2\2\2\u0122\u0123\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0125\7\33"+
- "\2\2\u0125/\3\2\2\2\u0126\u0127\7\26\2\2\u0127\u0128\5:\36\2\u0128\u0129"+
- "\7\27\2\2\u0129\61\3\2\2\2\u012a\u012f\5\32\16\2\u012b\u012c\7\35\2\2"+
- "\u012c\u012e\5\32\16\2\u012d\u012b\3\2\2\2\u012e\u0131\3\2\2\2\u012f\u012d"+
- "\3\2\2\2\u012f\u0130\3\2\2\2\u0130\63\3\2\2\2\u0131\u012f\3\2\2\2\u0132"+
- "\u0137\5\66\34\2\u0133\u0134\7\35\2\2\u0134\u0136\5\66\34\2\u0135\u0133"+
- "\3\2\2\2\u0136\u0139\3\2\2\2\u0137\u0135\3\2\2\2\u0137\u0138\3\2\2\2\u0138"+
- "\65\3\2\2\2\u0139\u0137\3\2\2\2\u013a\u013d\7\60\2\2\u013b\u013c\7!\2"+
- "\2\u013c\u013e\5\32\16\2\u013d\u013b\3\2\2\2\u013d\u013e\3\2\2\2\u013e"+
- "\u0141\3\2\2\2\u013f\u0141\5\32\16\2\u0140\u013a\3\2\2\2\u0140\u013f\3"+
- "\2\2\2\u0141\67\3\2\2\2\u0142\u0143\7\60\2\2\u0143\u0144\7\34\2\2\u0144"+
- "\u0145\5\32\16\2\u01459\3\2\2\2\u0146\u014b\58\35\2\u0147\u0148\7\35\2"+
- "\2\u0148\u014a\58\35\2\u0149\u0147\3\2\2\2\u014a\u014d\3\2\2\2\u014b\u0149"+
- "\3\2\2\2\u014b\u014c\3\2\2\2\u014c;\3\2\2\2\u014d\u014b\3\2\2\2\u014e"+
- "\u014f\7*\2\2\u014f\u0153\7\26\2\2\u0150\u0152\5\32\16\2\u0151\u0150\3"+
- "\2\2\2\u0152\u0155\3\2\2\2\u0153\u0151\3\2\2\2\u0153\u0154\3\2\2\2\u0154"+
- "\u0156\3\2\2\2\u0155\u0153\3\2\2\2\u0156\u0157\7\27\2\2\u0157=\3\2\2\2"+
- "\33AEK[aktz\u0081\u008a\u0097\u00db\u00de\u00e0\u00e5\u00f3\u0104\u010b"+
- "\u0122\u012f\u0137\u013d\u0140\u014b\u0153";
- public static final ATN _ATN =
- new ATNDeserializer().deserialize(_serializedATN.toCharArray());
- static {
- _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
- for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
- _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java b/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
deleted file mode 100644
index d2bf9a4..0000000
--- a/src/main/java/org/piccode/antlr4/PiccodeScriptVisitor.java
+++ /dev/null
@@ -1,195 +0,0 @@
-// Generated from PiccodeScript.g4 by ANTLR 4.9.3
-
- package org.piccode.antlr4;
-
-import org.antlr.v4.runtime.tree.ParseTreeVisitor;
-
-/**
- * This interface defines a complete generic visitor for a parse tree produced
- * by {@link PiccodeScriptParser}.
- *
- * @param The return type of the visit operation. Use {@link Void} for
- * operations with no return type.
- */
-public interface PiccodeScriptVisitor extends ParseTreeVisitor {
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#stmts}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitStmts(PiccodeScriptParser.StmtsContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#stmt}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitStmt(PiccodeScriptParser.StmtContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#import_module}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitImport_module(PiccodeScriptParser.Import_moduleContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#module}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitModule(PiccodeScriptParser.ModuleContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#module_stmts}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitModule_stmts(PiccodeScriptParser.Module_stmtsContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#module_stmt}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitModule_stmt(PiccodeScriptParser.Module_stmtContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#func}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFunc(PiccodeScriptParser.FuncContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#func_args}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitFunc_args(PiccodeScriptParser.Func_argsContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#arg_list}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitArg_list(PiccodeScriptParser.Arg_listContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#arg}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitArg(PiccodeScriptParser.ArgContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#literal_expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitLiteral_expr(PiccodeScriptParser.Literal_exprContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#expr_stmt}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitExpr_stmt(PiccodeScriptParser.Expr_stmtContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitExpr(PiccodeScriptParser.ExprContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#closure_decl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitClosure_decl(PiccodeScriptParser.Closure_declContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#unary}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitUnary(PiccodeScriptParser.UnaryContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#if_expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitIf_expr(PiccodeScriptParser.If_exprContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#when_expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitWhen_expr(PiccodeScriptParser.When_exprContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#when_cases}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitWhen_cases(PiccodeScriptParser.When_casesContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#when_case}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitWhen_case(PiccodeScriptParser.When_caseContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#else_case}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitElse_case(PiccodeScriptParser.Else_caseContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#var_decl}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitVar_decl(PiccodeScriptParser.Var_declContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#tuple}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitTuple(PiccodeScriptParser.TupleContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#array}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitArray(PiccodeScriptParser.ArrayContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#object}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitObject(PiccodeScriptParser.ObjectContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#expr_list}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitExpr_list(PiccodeScriptParser.Expr_listContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#call_expr_list}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitCall_expr_list(PiccodeScriptParser.Call_expr_listContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#call_expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitCall_expr(PiccodeScriptParser.Call_exprContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#key_val_pair}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitKey_val_pair(PiccodeScriptParser.Key_val_pairContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#key_val_pairs}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitKey_val_pairs(PiccodeScriptParser.Key_val_pairsContext ctx);
- /**
- * Visit a parse tree produced by {@link PiccodeScriptParser#do_expr}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitDo_expr(PiccodeScriptParser.Do_exprContext ctx);
-}
\ No newline at end of file
diff --git a/src/main/java/org/piccode/ast/Arg.java b/src/main/java/org/piccode/ast/Arg.java
deleted file mode 100644
index 704ee48..0000000
--- a/src/main/java/org/piccode/ast/Arg.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class Arg implements Ast {
- public String name;
- public Ast def_val;
-
- public Arg(String name, Ast def_val) {
- this.name = name;
- this.def_val = def_val;
- }
-
- public Arg(String name) {
- this.name = name;
- this.def_val = null;
- }
-
- @Override
- public String toString() {
- if (def_val == null) {
- return name;
- }
- return name + "=" + def_val;
- }
-
- @Override
- public PiccodeValue execute() {
- throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/ArrayAst.java b/src/main/java/org/piccode/ast/ArrayAst.java
deleted file mode 100644
index 37aabc5..0000000
--- a/src/main/java/org/piccode/ast/ArrayAst.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.piccode.ast;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ArrayAst implements Ast {
- public List nodes;
-
- public ArrayAst(List nodes) {
- this.nodes = nodes;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("[");
-
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- if (i < nodes.size() - 1) {
- sb.append(", ");
- }
- }
- sb.append("]");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- var list = new ArrayList();
- for (var node: nodes) {
- list.add(node.execute());
- }
- return new PiccodeArray(list);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/Ast.java b/src/main/java/org/piccode/ast/Ast.java
deleted file mode 100644
index 747d50b..0000000
--- a/src/main/java/org/piccode/ast/Ast.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public interface Ast {
- PiccodeValue execute();
-}
diff --git a/src/main/java/org/piccode/ast/BinOpAst.java b/src/main/java/org/piccode/ast/BinOpAst.java
deleted file mode 100644
index 0c26bd5..0000000
--- a/src/main/java/org/piccode/ast/BinOpAst.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.piccode.Piccode;
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeString;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class BinOpAst implements Ast {
-
- public Ast lhs;
- public String op;
- public Ast rhs;
-
- public BinOpAst(Ast lhs, String op, Ast rhs) {
- this.lhs = lhs;
- this.op = op;
- this.rhs = rhs;
- }
-
- @Override
- public String toString() {
- return lhs + " " + op + " " + rhs;
- }
-
- @Override
- public PiccodeValue execute() {
- var left = lhs.execute();
- var right = rhs.execute();
-
- if (left instanceof PiccodeNumber lf && right instanceof PiccodeNumber rh) {
- double result = 0;
- if (op.equals("+")) {
- result = (double) lf.raw() + (double) rh.raw();
- return new PiccodeNumber(String.valueOf(result));
- }
- if (op.equals("-")) {
- result = (double) lf.raw() - (double) rh.raw();
- return new PiccodeNumber(String.valueOf(result));
- }
- if (op.equals("*")) {
- result = (double) lf.raw() * (double) rh.raw();
- return new PiccodeNumber(String.valueOf(result));
- }
- if (op.equals("/")) {
- result = (double) lf.raw() / (double) rh.raw();
- return new PiccodeNumber(String.valueOf(result));
- }
- if (op.equals("%")) {
- result = (double) lf.raw() % (double) rh.raw();
- return new PiccodeNumber(String.valueOf(result));
- }
-
- if (op.equals(">")) {
- return new PiccodeBoolean((double) lf.raw() > (double) rh.raw() ? "true" : "false");
- }
-
- if (op.equals("<")) {
- return new PiccodeBoolean((double) lf.raw() < (double) rh.raw() ? "true" : "false");
- }
-
- if (op.equals(">=")) {
- return new PiccodeBoolean((double) lf.raw() >= (double) rh.raw() ? "true" : "false");
- }
-
- if (op.equals("<=")) {
- return new PiccodeBoolean((double) lf.raw() <= (double) rh.raw() ? "true" : "false");
- }
-
- if (op.equals("<<")) {
- result = ((int) (double)lf.raw()) << ((int) (double)rh.raw());
- return new PiccodeNumber(String.valueOf(result));
- }
- if (op.equals(">>")) {
- result = ((int) (double)lf.raw()) >> ((int) (double)rh.raw());
- return new PiccodeNumber(String.valueOf(result));
- }
-
- if (op.equals("|")) {
- result = ((int) (double)lf.raw()) | ((int) (double)rh.raw());
- return new PiccodeNumber(String.valueOf(result));
- }
-
- if (op.equals("&")) {
- result = ((int) (double)lf.raw()) & ((int) (double)rh.raw());
- return new PiccodeNumber(String.valueOf(result));
- }
- }
-
- if (op.equals("+")) {
- var result = String.format("%s%s", left.raw(), right.raw());
- return new PiccodeString(result);
- }
-
- if (op.equals("==")) {
- return new PiccodeBoolean(left.equals(right) ? "true" : "false");
- }
-
- if (op.equals("!=")) {
- return new PiccodeBoolean(left.equals(right) ? "true" : "false");
- }
-
- throw new PiccodeException("Invalid operator: " + op + " " + left.getClass() + " vs " + right.getClass());
- }
-}
diff --git a/src/main/java/org/piccode/ast/CallAst.java b/src/main/java/org/piccode/ast/CallAst.java
deleted file mode 100644
index f030e84..0000000
--- a/src/main/java/org/piccode/ast/CallAst.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-import org.piccode.piccode.Piccode;
-import org.piccode.rt.NativeFunction;
-import org.piccode.rt.PiccodeClosure;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class CallAst implements Ast {
-
- public Ast expr;
- public List nodes;
-
- public CallAst(Ast expr, List nodes) {
- this.expr = expr;
- this.nodes = nodes;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append(expr);
- sb.append(" (");
-
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- if (i < nodes.size() - 1) {
- sb.append(", ");
- }
- }
- sb.append(")");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- var expr_val = expr.execute();
- if (!(expr_val instanceof PiccodeClosure) && !(expr_val instanceof NativeFunction)) {
- throw new PiccodeException("Attempt to call a non-callable expression");
- }
-
- if (expr_val instanceof NativeFunction nat) {
- for (var node : nodes) {
- if (node instanceof NamedCallArg named) {
- nat = (NativeFunction) nat.callNamed(named.name, named.value.execute());
- } else {
- nat = (NativeFunction) nat.call(node.execute());
- }
- }
-
- var result = nat.evaluateIfReady();
- return result;
- }
-
- var closure = (PiccodeClosure) expr_val;
- for (var node : nodes) {
- if (node instanceof NamedCallArg named) {
- closure = (PiccodeClosure) closure.callNamed(named.name, named.value.execute());
- } else {
- closure = (PiccodeClosure) closure.call(node.execute());
- }
- }
-
- // Evaluate only if fully applied
- var result = closure.evaluateIfReady();
- return result;
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/ClosureAst.java b/src/main/java/org/piccode/ast/ClosureAst.java
deleted file mode 100644
index 9c86493..0000000
--- a/src/main/java/org/piccode/ast/ClosureAst.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.piccode.ast;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeClosure;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ClosureAst implements Ast {
- public List args;
- public Ast body;
-
- public ClosureAst(List args, Ast body) {
- this.args = args;
- this.body = body;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb
- .append("")
- .append("(");
- if (args != null) {
- sb.append(args);
- }
- sb.append(") => ");
- sb.append(body);
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- Map newArgs = new HashMap<>();
- return new PiccodeClosure(args, newArgs, 0, body);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/DoExprAst.java b/src/main/java/org/piccode/ast/DoExprAst.java
deleted file mode 100644
index 227d3f6..0000000
--- a/src/main/java/org/piccode/ast/DoExprAst.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class DoExprAst implements Ast {
- public List nodes;
-
- public DoExprAst(List nodes) {
- this.nodes = nodes;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- sb.append("\n");
- }
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- PiccodeValue result = null;
- Context.top.pushStack();
- for (var stmt: nodes) {
- result = stmt.execute();
- }
- Context.top.dropStackFrame();
- return result;
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/DotOperationAst.java b/src/main/java/org/piccode/ast/DotOperationAst.java
deleted file mode 100644
index a22ec32..0000000
--- a/src/main/java/org/piccode/ast/DotOperationAst.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeModule;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeObject;
-import org.piccode.rt.PiccodeString;
-import org.piccode.rt.PiccodeTuple;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class DotOperationAst implements Ast {
-
- public Ast lhs;
- public Ast rhs;
-
- public DotOperationAst(Ast lhs, Ast rhs) {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- @Override
- public String toString() {
- return lhs + "." + rhs;
- }
-
- @Override
- public PiccodeValue execute() {
-
- if (lhs instanceof IdentifierAst id && Context.modules.containsKey(id.text)) {
- var mod = Context.modules.get(id.text);
-
- if (!(rhs instanceof CallAst) && !(rhs instanceof IdentifierAst)) {
- throw new PiccodeException("No node " + rhs + " found in module " + id.text);
- }
-
- return process(id, mod);
- }
-
- var left = lhs.execute();
-
- if (left instanceof PiccodeArray arr && rhs instanceof IdentifierAst id && id.text.equals("len")) {
- return new PiccodeNumber("" + arr.array().length);
- }
-
- if (left instanceof PiccodeString str && rhs instanceof IdentifierAst id && id.text.equals("len")) {
- return new PiccodeNumber("" + str.toString().length());
- }
-
- else if (left instanceof PiccodeArray arr){
- return processArrayIndexing(arr.array(), rhs.execute());
- }
- else if (left instanceof PiccodeTuple tupl){
- return processArrayIndexing(tupl.array(), rhs.execute());
- }
-
- if (left instanceof PiccodeModule mod) {
- return process(new IdentifierAst(mod.name), mod);
- }
-
- if (!(left instanceof PiccodeObject)) {
- throw new PiccodeException("Invalid expression on the left side of `.` : " + lhs);
- }
-
- var obj = (PiccodeObject) left;
-
- String key = null;
- if (rhs instanceof IdentifierAst id) {
- key = id.text;
- } else {
- key = rhs.execute().raw().toString();
- }
-
- var value = obj.getValue(key);
- if (value == null) {
- throw new PiccodeException("Field `" + key + "` is not part of " + obj.raw());
- }
-
- return value;
- }
-
- private PiccodeValue process(IdentifierAst id, PiccodeModule mod) {
- if (rhs instanceof IdentifierAst _id) {
- for (var node : mod.nodes) {
- if (node instanceof VarDecl vd && vd.name.equals(_id.text)) {
- return node.execute();
- }
- if (node instanceof FunctionAst func && func.name.equals(_id.text)) {
- node.execute();
- return Context.top.getValue(_id.text);
- }
- if (node instanceof ModuleAst _mod && _mod.name.equals(_id.text)) {
- node.execute();
- return Context.modules.get(_id.text);
- }
- }
-
- throw new PiccodeException("No function or identifier " + _id.text + " found in module " + id.text);
- }
-
- var call = (CallAst) rhs;
-
- if (!(call.expr instanceof IdentifierAst)) {
- throw new PiccodeException("Invalid function reference in module access module " + id.text + ": " + call.expr);
- }
-
- var _id = (IdentifierAst) call.expr;
- for (var node : mod.nodes) {
- if (node instanceof VarDecl vd && vd.name.equals(_id.text)) {
- return node.execute();
- }
- if (node instanceof FunctionAst func && func.name.equals(_id.text)) {
- node.execute();
- //return Context.top.getValue(_id.text);
- return call.execute();
- }
- if (node instanceof ModuleAst _mod && _mod.name.equals(_id.text)) {
- node.execute();
- return Context.modules.get(_id.text);
- }
- }
-
- throw new PiccodeException("No function or identifier " + _id.text + " found in module " + id.text);
- }
-
- private PiccodeValue processArrayIndexing(PiccodeValue[] arr, PiccodeValue execute) {
- if (!(execute instanceof PiccodeNumber)) {
- throw new PiccodeException("Attempt to index array value with non numeric index: " + rhs + " which evaluates to " + execute + " is used as an index");
- }
-
- int index = (int) ((double) execute.raw());
- if (index < 0 || index >= arr.length) {
- throw new PiccodeException("Array index out of bounds: "+ lhs + " evaluates to an array with size" + arr.length + " which is indexed with " + execute);
- }
-
- return arr[index];
- }
- private PiccodeValue processTupleIndexing(PiccodeValue[] arr, PiccodeValue execute) {
- if (!(execute instanceof PiccodeNumber)) {
- throw new PiccodeException("Attempt to index a tuple value with non numeric index: " + rhs + " which evaluates to " + execute + " is used as an index");
- }
-
- int index = (int) ((double) execute.raw());
- if (index < 0 || index >= arr.length) {
- throw new PiccodeException("Array index out of bounds: "+ lhs + " evaluates to a tuple with size" + arr.length + " which is indexed with " + execute);
- }
-
- return arr[index];
- }
-}
diff --git a/src/main/java/org/piccode/ast/FunctionAst.java b/src/main/java/org/piccode/ast/FunctionAst.java
deleted file mode 100644
index a12b005..0000000
--- a/src/main/java/org/piccode/ast/FunctionAst.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.piccode.ast;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeClosure;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class FunctionAst implements Ast {
-
- public String name;
- public List arg;
- public Ast body;
-
- public FunctionAst(String name, List arg, Ast body) {
- this.name = name;
- this.arg = arg;
- this.body = body;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb
- .append("function ")
- .append(name)
- .append("(");
- if (arg != null) {
- sb.append(arg);
- }
- sb.append(") = ");
- sb.append(body);
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- Map newArgs = new HashMap<>();
- var cl = new PiccodeClosure(arg, newArgs, 0, body);
- Context.addGlobal(name, cl);
- return cl;
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/IdentifierAst.java b/src/main/java/org/piccode/ast/IdentifierAst.java
deleted file mode 100644
index b860c37..0000000
--- a/src/main/java/org/piccode/ast/IdentifierAst.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class IdentifierAst implements Ast {
- public String text;
-
- public IdentifierAst(String text) {
- this.text = text;
- }
-
- @Override
- public String toString() {
- return text;
- }
-
- @Override
- public PiccodeValue execute() {
- var value = Context.top.getValue(text);
- if (value == null) {
- throw new PiccodeException("Unknown variable `" + text + "`");
- }
-
- return value;
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/IfExpression.java b/src/main/java/org/piccode/ast/IfExpression.java
deleted file mode 100644
index 8df23bd..0000000
--- a/src/main/java/org/piccode/ast/IfExpression.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class IfExpression implements Ast{
- public Ast cond, then, elze;
-
- public IfExpression(Ast cond, Ast then, Ast elze) {
- this.cond = cond;
- this.then = then;
- this.elze = elze;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
-
- sb.append("if ").append(cond).append(" {\n");
- sb.append(then.toString().indent(4));
- sb.append(" else {\n");
- sb.append(elze.toString().indent(4));
- sb.append("}");
-
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- var _cond = cond.execute().raw().toString();
- if (_cond.equals("true")) {
- return then.execute();
- }
-
- return elze.execute();
- }
-
- /*
-import pkg:io
-
-function fact(x=1) =
- if x <= 1 { 1 }
- else x * fact(x - 1)
-
-IO.println(1 + 2 * 2)
- */
-}
diff --git a/src/main/java/org/piccode/ast/ImportAst.java b/src/main/java/org/piccode/ast/ImportAst.java
deleted file mode 100644
index 8ac4443..0000000
--- a/src/main/java/org/piccode/ast/ImportAst.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.piccode.ast;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.net.URISyntaxException;
-import java.util.Scanner;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.editor.errors.IDEErrorListener;
-import org.piccode.antlr4.PiccodeScriptLexer;
-import org.piccode.antlr4.PiccodeScriptParser;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ImportAst implements Ast {
-
- public String pkg;
- public String module;
-
- public ImportAst(String pkg, String module) {
- this.pkg = pkg;
- this.module = module;
- }
-
- @Override
- public String toString() {
- return "import " + pkg + ":" + module;
- }
-
- @Override
- public PiccodeValue execute() {
- if (pkg.equals("pkg")) {
- loadModuleFromStdLib(module);
- }
-
- return new PiccodeBoolean("true");
- }
-
- private void loadModuleFromStdLib(String module) {
- var file = new File("pkg/" + module);
- if (file.isFile()) {
- throw new PiccodeException("Invalid module " + module + " in pkg");
- }
- for (var fp : file.listFiles()) {
- if (fp.getName().endsWith(".pics")) {
- var code = readFile(fp);
- if (code == null) {
- throw new PiccodeException("Invalid module " + module + " in pkg");
- }
- _import(code);
- }
- }
- }
-
- private void _import(String code) {
- var lexer = new PiccodeScriptLexer(CharStreams.fromString(code));
- var parser = new PiccodeScriptParser(new CommonTokenStream(lexer));
- lexer.removeErrorListeners();
- parser.removeErrorListeners();
-
- IDEErrorListener errorListener = new IDEErrorListener();
- lexer.addErrorListener(errorListener);
- parser.addErrorListener(errorListener);
-
- var visitor = new PiccodeVisitor();
-
- var result = visitor.visit(parser.stmts());
- Context.top.pushStack();
- Context.top.putLocal("true", new PiccodeBoolean("true"));
- Context.top.putLocal("false", new PiccodeBoolean("false"));
- result.execute();
- }
-
- private String readFile(File fp) {
- StringBuilder sb = new StringBuilder();
- Scanner sc;
- try {
- sc = new Scanner(fp);
- while (sc.hasNext()) {
- sb.append(sc.nextLine()).append("\n");
- }
- return sb.toString();
- } catch (FileNotFoundException ex) {
- return null;
- }
- }
-}
diff --git a/src/main/java/org/piccode/ast/ListConstAst.java b/src/main/java/org/piccode/ast/ListConstAst.java
deleted file mode 100644
index 991382e..0000000
--- a/src/main/java/org/piccode/ast/ListConstAst.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.piccode.ast;
-
-import java.util.ArrayList;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeModule;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeObject;
-import org.piccode.rt.PiccodeTuple;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ListConstAst implements Ast {
-
- public Ast lhs;
- public Ast rhs;
-
- public ListConstAst(Ast lhs, Ast rhs) {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- @Override
- public String toString() {
- return lhs + ":" + rhs;
- }
-
- @Override
- public PiccodeValue execute() {
- var left = lhs.execute();
- var right = rhs.execute();
-
- if (left instanceof PiccodeArray larr && right instanceof PiccodeArray rarr) {
- var nodes = new ArrayList();
- nodes.addAll(larr.getList());
- nodes.addAll(rarr.getList());
- return new PiccodeArray(nodes);
- }
-
- if (left instanceof PiccodeArray larr) {
- var nodes = new ArrayList();
- nodes.addAll(larr.getList());
- nodes.addFirst(right);
- return new PiccodeArray(nodes);
- }
- if (right instanceof PiccodeArray rarr) {
- var nodes = new ArrayList();
- nodes.addAll(rarr.getList());
- nodes.addFirst(left);
- return new PiccodeArray(nodes);
- }
- var nodes = new ArrayList();
- nodes.addFirst(left);
- nodes.addFirst(right);
- return new PiccodeArray(nodes);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/ModuleAst.java b/src/main/java/org/piccode/ast/ModuleAst.java
deleted file mode 100644
index 4519ef2..0000000
--- a/src/main/java/org/piccode/ast/ModuleAst.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeModule;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ModuleAst implements Ast {
- public String name;
- public List nodes;
-
- public ModuleAst(String name, List nodes) {
- this.name = name;
- this.nodes = nodes;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("module ");
- sb.append(name).append(" {\n");
- for (var node: nodes) {
- sb.append(node.toString().indent(4));
- }
- sb.append("}");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- if (Context.modules.containsKey(name)) {
- var mod = Context.modules.get(name);
- mod.nodes.addAll(nodes);
- return mod;
- } else {
- var module = new PiccodeModule(name, nodes);
- Context.modules.put(name, module);
- return module;
- }
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/NamedCallArg.java b/src/main/java/org/piccode/ast/NamedCallArg.java
deleted file mode 100644
index 19d40ad..0000000
--- a/src/main/java/org/piccode/ast/NamedCallArg.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class NamedCallArg implements Ast {
- public String name;
- public Ast value;
-
- public NamedCallArg(String name, Ast def_val) {
- this.name = name;
- this.value = def_val;
- }
-
- @Override
- public String toString() {
- if (value == null) {
- return name;
- }
- return name + "=" + value;
- }
-
- @Override
- public PiccodeValue execute() {
- throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/NumberAst.java b/src/main/java/org/piccode/ast/NumberAst.java
deleted file mode 100644
index 1c84784..0000000
--- a/src/main/java/org/piccode/ast/NumberAst.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class NumberAst implements Ast {
- public String text;
-
- public NumberAst(String text) {
- this.text = text;
- }
-
- @Override
- public String toString() {
- return text;
- }
-
- @Override
- public PiccodeValue execute() {
- return new PiccodeNumber(text);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/ObjectAst.java b/src/main/java/org/piccode/ast/ObjectAst.java
deleted file mode 100644
index 0fce860..0000000
--- a/src/main/java/org/piccode/ast/ObjectAst.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.piccode.ast;
-
-import java.util.HashMap;
-import java.util.List;
-import org.piccode.rt.PiccodeObject;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class ObjectAst implements Ast {
- public HashMap objs;
-
- public ObjectAst(HashMap objs) {
- this.objs = objs;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{");
-
- var nodes = objs.entrySet();
- var size = nodes.size();
- int i = 0;
- for (var kv: nodes) {
- var key = kv.getKey();
- var val = kv.getValue();
- sb.append(String.format("%s:%s", key, val));
- if (i < size - 1) {
- sb.append(", ");
- }
- i++;
- }
- sb.append("}");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- HashMap obj = new HashMap<>();
-
- for (var kv: objs.entrySet()) {
- obj.put(kv.getKey(), kv.getValue().execute());
- }
-
- return new PiccodeObject(obj);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/PiccodeVisitor.java b/src/main/java/org/piccode/ast/PiccodeVisitor.java
deleted file mode 100644
index b110072..0000000
--- a/src/main/java/org/piccode/ast/PiccodeVisitor.java
+++ /dev/null
@@ -1,518 +0,0 @@
-package org.piccode.ast;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.piccode.antlr4.PiccodeScriptBaseVisitor;
-import org.piccode.antlr4.PiccodeScriptParser.*;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeVisitor extends PiccodeScriptBaseVisitor {
-
- @Override
- public Ast visitVar_decl(Var_declContext var_decl) {
- var tok = var_decl.ID().getSymbol();
- var name = tok.getText();
- var expr = visitExpr(var_decl.expr());
- var result = new VarDecl(name, expr);
- return result;
- }
-
- @Override
- public Ast visitStmts(StmtsContext ctx) {
- var stmts = new ArrayList();
- for (var stmt : ctx.stmt()) {
- stmts.add(visitStmt(stmt));
- }
- return new StatementList(stmts);
- }
-
- @Override
- public Ast visitClosure_decl(Closure_declContext ctx) {
-
- var args = visitArgs(ctx.arg_list());
- var body = visitExpr(ctx.expr());
-
- if (args.isEmpty()) {
- return new ClosureAst(null, body);
- }
-
- return new ClosureAst(args, body);
- }
-
- @Override
- public Ast visitFunc(FuncContext ctx) {
- var tok = ctx.ID().getSymbol();
- var name = tok.getText();
- var args = visitFuncArgs(ctx.func_args());
- var body = visitExpr(ctx.expr());
-
- if (args.isEmpty()) {
- return new FunctionAst(name, null, body);
- }
-
- int i = args.size();
- return new FunctionAst(name, args, body);
- }
-
- public List visitFuncArgs(Func_argsContext ctx) {
- var args = new ArrayList();
- if (ctx.arg_list() == null) {
- return args;
- }
-
- return visitArgs(ctx.arg_list());
- }
-
- public List visitArgs(Arg_listContext ctx) {
- var args = new ArrayList();
- for (var arg : ctx.arg()) {
- var _arg = (Arg) visitArg(arg);
- args.add(_arg);
- }
- return args;
- }
-
-
- @Override
- public Ast visitArg(ArgContext ctx) {
- var name = ctx.ID().getText();
- if (ctx.ASSIGN() != null) {
- var value = visitLiteral_expr(ctx.literal_expr());
- return new Arg(name, value);
- }
-
- return new Arg(name);
- }
-
- @Override
- public Ast visitLiteral_expr(Literal_exprContext ctx) {
- if (ctx.NUMBER() != null) {
- return visitNumber(ctx.NUMBER());
- }
-
- if (ctx.STRING() != null) {
- return visitString(ctx.STRING());
- }
-
- if (ctx.array() != null) {
- return visitArray(ctx.array());
- }
- if (ctx.tuple() != null) {
- return visitTuple(ctx.tuple());
- }
- if (ctx.object() != null) {
- return visitObject(ctx.object());
- }
-
- return null;
- }
-
- @Override
- public Ast visitStmt(StmtContext ctx) {
- if (ctx.expr_stmt() != null) {
- return visitExpr(ctx.expr_stmt().expr());
- }
-
- if (ctx.func() != null) {
- return visitFunc(ctx.func());
- }
-
- if (ctx.module() != null) {
- return visitModule(ctx.module());
- }
-
- if (ctx.import_module() != null) {
- return visitImport_module(ctx.import_module());
- }
-
- return null;
- }
-
- @Override
- public Ast visitImport_module(Import_moduleContext ctx) {
- var pkg = ctx.ID().getFirst().getText();
- var module = ctx.ID().getLast().getText();
-
- return new ImportAst(pkg, module);
- }
-
- @Override
- public Ast visitModule(ModuleContext ctx) {
- var name = ctx.ID().getText();
- if (ctx.module_stmts() != null) {
- var nodes = visitModuleStmts(ctx.module_stmts());
- return new ModuleAst(name, nodes);
- }
- return new ModuleAst(name, List.of());
- }
-
- public List visitModuleStmts(Module_stmtsContext ctx) {
- var list = new ArrayList();
- for (var stmt : ctx.module_stmt()) {
- list.add(visitModuleStmt(stmt));
- }
- return list;
- }
-
- private Ast visitModuleStmt(Module_stmtContext stmt) {
- if (stmt.func() != null) {
- return visitFunc(stmt.func());
- }
-
- if (stmt.var_decl() != null) {
- return visitVar_decl(stmt.var_decl());
- }
-
- if (stmt.module() != null) {
- return visitModule(stmt.module());
- }
- return null;
- }
-
- @Override
- public Ast visitWhen_expr(When_exprContext ctx) {
- var expr = visitExpr(ctx.expr());
- var cases = visitWhenCases(ctx.when_cases());
- if (ctx.else_case() != null) {
- var elze = visitExpr(ctx.else_case().expr());
- return new WhenAst(expr, cases, elze);
- }
- return new WhenAst(expr, cases, null);
- }
-
- private List visitWhenCases(When_casesContext whens) {
- var cases = new ArrayList();
- for (var _case : whens.when_case()) {
- var match = visitExprlist(_case.expr_list());
- var value = visitExpr(_case.expr());
- cases.add(new WhenCase(match, value));
- }
- return cases;
- }
-
- @Override
- public Ast visitExpr(ExprContext expr) {
- if (expr.var_decl() != null) {
- return visitVar_decl(expr.var_decl());
- }
-
- if (expr.closure_decl() != null) {
- return visitClosure_decl(expr.closure_decl());
- }
-
- if (expr.when_expr() != null) {
- return visitWhen_expr(expr.when_expr());
- }
-
- if (expr.NUMBER() != null) {
- return visitNumber(expr.NUMBER());
- }
-
- if (expr.STRING() != null) {
- return visitString(expr.STRING());
- }
-
- if (expr.ADD() != null) {
- return visitBinOp("+", expr);
- }
-
- if (expr.SUB() != null) {
- return visitBinOp("-", expr);
- }
-
- if (expr.MUL() != null) {
- return visitBinOp("*", expr);
- }
-
- if (expr.DIV() != null) {
- return visitBinOp("/", expr);
- }
-
- if (expr.MOD() != null) {
- return visitBinOp("%", expr);
- }
-
- if (expr.GT() != null) {
- return visitBinOp(">", expr);
- }
-
- if (expr.GE() != null) {
- return visitBinOp(">=", expr);
- }
-
- if (expr.LT() != null) {
- return visitBinOp("<", expr);
- }
-
- if (expr.LE() != null) {
- return visitBinOp("<=", expr);
- }
-
- if (expr.EQ() != null) {
- return visitBinOp("==", expr);
- }
-
- if (expr.NE() != null) {
- return visitBinOp("!=", expr);
- }
-
- if (expr.AND() != null) {
- return visitBinOp("&&", expr);
- }
-
- if (expr.OR() != null) {
- return visitBinOp("||", expr);
- }
-
- if (expr.SHL() != null) {
- return visitBinOp("<<", expr);
- }
-
- if (expr.SHR() != null) {
- return visitBinOp(">>", expr);
- }
-
- if (expr.BAND() != null) {
- return visitBinOp("&", expr);
- }
-
- if (expr.BOR() != null) {
- return visitBinOp("|", expr);
- }
-
- if (expr.unary() != null) {
- return visitUnaryExpr(expr.unary());
- }
-
- if (expr.DOT() != null) {
- return visitDotOperation(expr);
- }
-
- if (expr.COLON() != null) {
- return visitConsOperation(expr);
- }
-
- if (expr.if_expr() != null) {
- return visitIf_expr(expr.if_expr());
- }
-
- if (expr.PIPE() != null) {
- return visitPipeOp(expr);
- }
-
- if (expr.array() != null) {
- return visitArray(expr.array());
- }
-
- if (expr.tuple() != null) {
- return visitTuple(expr.tuple());
- }
-
- if (expr.object() != null) {
- return visitObject(expr.object());
- }
-
- if (expr.ID() != null) {
- return visitId(expr.ID());
- }
-
- if (expr.do_expr() != null) {
- return visitDo_expr(expr.do_expr());
- }
-
- if (expr.LPAREN() != null && expr.RPAREN() != null && expr.expr() == null) {
- return new UnitAst();
- }
-
- if (expr.LPAREN() != null && expr.RPAREN() != null && expr.expr() != null && !expr.expr().isEmpty() && expr.expr().size() == 1 && expr.call_expr_list() == null) {
- var lp = expr.getChild(0).getText();
- var rp = expr.getChild(expr.getChildCount() - 1).getText();
-
- if (lp.equals("(") && rp.equals(")")) {
- return visitExpr(expr.expr().getFirst());
- }
- return visitCall(expr.expr().getFirst(), null);
- }
-
-
- if (!expr.expr().isEmpty() && expr.call_expr_list() == null) {
- return visitCall(expr, expr.call_expr_list());
- }
-
- if (!expr.expr().isEmpty() && expr.call_expr_list() != null) {
- return visitCall(expr.expr().getFirst(), expr.call_expr_list());
- }
-
- //TODO: Remove this dirty hack and actually figure out the bug
- if (expr.getText().equals("()")) {
- return new UnitAst();
- }
-
- System.out.println("Failing at: " + expr.getText());
- return null;
- }
-
- @Override
- public Ast visitDo_expr(Do_exprContext ctx) {
- var nodes = new ArrayList();
- var exprs = ctx.expr();
-
- if (exprs.isEmpty()) return new UnitAst();
-
- for (var e: exprs) {
- var expr = visitExpr(e);
- nodes.add(expr);
- }
-
- return new DoExprAst(nodes);
- }
-
- @Override
- public Ast visitIf_expr(If_exprContext ctx) {
- var cond = visitExpr(ctx.expr(0));
- var t = visitExpr(ctx.expr(1));
- var f = visitExpr(ctx.expr(2));
-
- return new IfExpression(cond, t, f);
- }
-
- private Ast visitUnaryExpr(UnaryContext ctx) {
- if (ctx.EXCLAIM() != null) {
- return new UnaryAst("!", visitExpr(ctx.expr()));
- }
-
- if (ctx.BAND() != null) {
- return new UnaryAst("&", visitExpr(ctx.expr()));
- }
-
- if (ctx.SUB() != null) {
- return new UnaryAst("-", visitExpr(ctx.expr()));
- }
- if (ctx.TILDE()!= null) {
- return new UnaryAst("~", visitExpr(ctx.expr()));
- }
-
- return null;
- }
-
- public Ast visitCall(ExprContext expr, Call_expr_listContext exprList) {
- var value = visitExpr(expr);
- if (exprList == null) {
- return new CallAst(value, List.of());
- }
-
- var args = visitCallExprList(exprList);
- return new CallAst(value, args);
- }
-
- private List visitCallExprList(Call_expr_listContext ctx) {
- var nodes = new ArrayList();
- for (var call_expr : ctx.call_expr()) {
- nodes.add(visitCallExpr(call_expr));
- }
- return nodes;
- }
-
- public Ast visitCallExpr(Call_exprContext ctx) {
- if (ctx.ASSIGN() != null) {
- var id = ctx.ID().getText();
- var value = visitExpr(ctx.expr());
- return new NamedCallArg(id, value);
- }
-
- if (ctx.ASSIGN() == null && ctx.ID() != null) {
- return new IdentifierAst(ctx.ID().getText());
- }
-
- return visitExpr(ctx.expr());
- }
-
- @Override
- public Ast visitObject(ObjectContext ctx) {
- var kvs = visitKeyValuePairs(ctx.key_val_pairs());
- return new ObjectAst(kvs);
- }
-
- private HashMap visitKeyValuePairs(Key_val_pairsContext key_val_pairs) {
- var obj = new HashMap();
- for (var kv : key_val_pairs.key_val_pair()) {
- obj.put(kv.ID().getText(), visitExpr(kv.expr()));
- }
- return obj;
- }
-
- @Override
- public Ast visitTuple(TupleContext ctx) {
- var exprs = visitExprlist(ctx.expr_list());
- if (exprs.size() == 1) {
- return exprs.getFirst();
- }
-
- return new TupleAst(exprs);
- }
-
- @Override
- public Ast visitArray(ArrayContext ctx) {
- if (ctx.expr_list() != null) {
- return new ArrayAst(visitExprlist(ctx.expr_list()));
- }
- return new ArrayAst(List.of());
- }
-
- private List visitExprlist(Expr_listContext ctx) {
- return ctx
- .expr()
- .stream()
- .map(this::visitExpr)
- .toList();
- }
-
- private Ast visitNumber(TerminalNode NUMBER) {
- var number = new NumberAst(NUMBER.getText());
- var line = NUMBER.getSymbol().getLine();
- var col = NUMBER.getSymbol().getStartIndex();
- return number;
- }
-
- private Ast visitString(TerminalNode STRING) {
- var string = new StringAst(STRING.getText());
- var line = STRING.getSymbol().getLine();
- var col = STRING.getSymbol().getStartIndex();
- return string;
- }
-
- private Ast visitBinOp(String op, ExprContext expr) {
- var lhs = visitExpr(expr.expr().getFirst());
- var rhs = visitExpr(expr.expr().getLast());
- return new BinOpAst(lhs, op, rhs);
- }
-
- private Ast visitDotOperation(ExprContext expr) {
- var lhs = visitExpr(expr.expr().getFirst());
- var rhs = visitExpr(expr.expr().getLast());
- return new DotOperationAst(lhs, rhs);
- }
-
- private Ast visitId(TerminalNode ID) {
- String id = ID.getText();
- return new IdentifierAst(id);
- }
-
- private Ast visitPipeOp(ExprContext expr) {
- var lhs = visitExpr(expr.expr().getFirst());
- var rhs = visitExpr(expr.expr().getLast());
- return new PipeAst(lhs, rhs);
- }
-
- private Ast visitConsOperation(ExprContext expr) {
- var lhs = visitExpr(expr.expr().getFirst());
- var rhs = visitExpr(expr.expr().getLast());
- return new ListConstAst(lhs, rhs);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/PipeAst.java b/src/main/java/org/piccode/ast/PipeAst.java
deleted file mode 100644
index 47ece31..0000000
--- a/src/main/java/org/piccode/ast/PipeAst.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeClosure;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PipeAst implements Ast {
- public Ast lhs;
- public Ast rhs;
-
- public PipeAst(Ast lhs,Ast rhs) {
- this.lhs = lhs;
- this.rhs = rhs;
- }
-
- @Override
- public String toString() {
- return lhs + " |> " + rhs;
- }
-
- @Override
- public PiccodeValue execute() {
- if (!(rhs instanceof CallAst) && !(rhs instanceof IdentifierAst)) {
- throw new PiccodeException("Invalid expression at the right side of |> " + rhs.toString());
- }
-
- if (rhs instanceof IdentifierAst id) {
- var res = id.execute();
- if (res instanceof PiccodeClosure closure) {
- var left = lhs.execute();
- return closure.call(left);
- } else {
- throw new PiccodeException("Invalid expression at the right side of |> : " + id.text);
- }
- }
-
- var call = (CallAst) rhs;
- call.nodes.addFirst(lhs);
- return call.execute();
- }
-}
diff --git a/src/main/java/org/piccode/ast/StatementList.java b/src/main/java/org/piccode/ast/StatementList.java
deleted file mode 100644
index 767ebb1..0000000
--- a/src/main/java/org/piccode/ast/StatementList.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class StatementList implements Ast {
- public List nodes;
-
- public StatementList(List nodes) {
- this.nodes = nodes;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- sb.append("\n");
- }
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- for (var stmt: nodes) {
- stmt.execute();
- }
- return new PiccodeBoolean("true");
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/StringAst.java b/src/main/java/org/piccode/ast/StringAst.java
deleted file mode 100644
index 9394770..0000000
--- a/src/main/java/org/piccode/ast/StringAst.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeString;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class StringAst implements Ast {
- public String text;
-
- public StringAst(String text) {
- this.text = text.substring(1, text.length() - 1);
- }
-
- @Override
- public String toString() {
- return text;
- }
-
- @Override
- public PiccodeValue execute() {
- return new PiccodeString(unescapeString(text));
- }
- public String unescapeString(String str) {
- StringBuilder sb = new StringBuilder();
- boolean isEscaping = false;
-
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (isEscaping) {
- switch (c) {
- case 'n':
- sb.append('\n');
- break;
- case 't':
- sb.append('\t');
- break;
- case 'b':
- sb.append('\b');
- break;
- case 'r':
- sb.append('\r');
- break;
- case 'f':
- sb.append('\f');
- break;
- case '\'':
- sb.append('\'');
- break;
- case '\"':
- sb.append('\"');
- break;
- case '\\':
- sb.append('\\');
- break;
- default:
- sb.append(c);
- break; // treat unknown escape as literal
- }
- isEscaping = false;
- } else if (c == '\\') {
- isEscaping = true;
- } else {
- sb.append(c);
- }
- }
-
- // In case string ends with single backslash
- if (isEscaping) {
- sb.append('\\');
- }
-
- return sb.toString();
- }
-}
diff --git a/src/main/java/org/piccode/ast/TupleAst.java b/src/main/java/org/piccode/ast/TupleAst.java
deleted file mode 100644
index d4a0bb6..0000000
--- a/src/main/java/org/piccode/ast/TupleAst.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.piccode.ast;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.piccode.rt.PiccodeTuple;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class TupleAst implements Ast {
- public List nodes;
-
- public TupleAst(List nodes) {
- this.nodes = nodes;
- }
-
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("(");
-
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- if (i < nodes.size() - 1) {
- sb.append(", ");
- }
- }
- sb.append(")");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- var list = new ArrayList();
- for (var node: nodes) {
- list.add(node.execute());
- }
- return new PiccodeTuple(list);
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/UnaryAst.java b/src/main/java/org/piccode/ast/UnaryAst.java
deleted file mode 100644
index 88dff66..0000000
--- a/src/main/java/org/piccode/ast/UnaryAst.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class UnaryAst implements Ast{
- public String op;
- public Ast expr;
-
- public UnaryAst(String op, Ast expr) {
- this.op = op;
- this.expr = expr;
- }
-
- @Override
- public String toString() {
- return String.format("%s %s", op, expr);
- }
-
- @Override
- public PiccodeValue execute() {
- var result = expr.execute();
-
- if (op.equals("-")) {
- if (!(result instanceof PiccodeNumber)) {
- throw new PiccodeException("Cannot use `-` with a value that is not a number. expression: " + expr + " results to value " + result);
- }
- return new PiccodeNumber("-" + result.toString());
- }
-
- if (op.equals("~")) {
- if (!(result instanceof PiccodeNumber)) {
- throw new PiccodeException("Cannot use `~` with a value that is not a number. expression: " + expr + " results to value " + result);
- }
- var num = (int) (double) result.raw();
- return new PiccodeNumber("" + (~num));
- }
-
- if (op.equals("!")) {
- if (!(result instanceof PiccodeBoolean)) {
- throw new PiccodeException("Cannot use `~` with a value that is not a boolean. expression: " + expr + " results to value " + result);
- }
- var bool = (boolean) result.raw();
- return new PiccodeBoolean(String.valueOf(!bool));
- }
-
- throw new PiccodeException("Not supported yet: " + op);
- }
-
-
-}
diff --git a/src/main/java/org/piccode/ast/UnitAst.java b/src/main/java/org/piccode/ast/UnitAst.java
deleted file mode 100644
index 8d0e55e..0000000
--- a/src/main/java/org/piccode/ast/UnitAst.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.PiccodeUnit;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class UnitAst implements Ast {
- @Override
- public String toString() {
- return "()";
- }
-
- @Override
- public PiccodeValue execute() {
- return new PiccodeUnit();
- }
-
-}
diff --git a/src/main/java/org/piccode/ast/VarDecl.java b/src/main/java/org/piccode/ast/VarDecl.java
deleted file mode 100644
index 03a6352..0000000
--- a/src/main/java/org/piccode/ast/VarDecl.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.piccode.ast;
-
-import org.piccode.rt.Context;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class VarDecl implements Ast {
- public String name;
- public Ast value;
-
- public VarDecl(String name, Ast value) {
- this.name = name;
- this.value = value;
- }
-
-
- @Override
- public String toString() {
- return "let " + name + " = " + value;
- }
-
- @Override
- public PiccodeValue execute() {
- var _value = value.execute();
- Context.top.putLocal(name, _value);
- return _value;
- }
-}
diff --git a/src/main/java/org/piccode/ast/WhenAst.java b/src/main/java/org/piccode/ast/WhenAst.java
deleted file mode 100644
index 8990cb6..0000000
--- a/src/main/java/org/piccode/ast/WhenAst.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-
-import org.piccode.rt.*;
-import java.util.*;
-
-/**
- *
- * @author hexaredecimal
- */
-public class WhenAst implements Ast {
-
- public Ast cond;
- public List cases;
- public Ast else_case;
-
- public WhenAst(Ast cond, List cases, Ast else_case) {
- this.cond = cond;
- this.cases = cases;
- this.else_case = else_case;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("when ").append(cond).append(" {\n");
- for (var when_c : cases) {
- sb.append(when_c.toString().indent(4));
- }
- if (else_case != null) {
- sb.append(String.format("else %s", else_case).indent(4));
- }
- sb.append("}");
- return sb.toString();
- }
-
- @Override
- public PiccodeValue execute() {
- var cond_value = cond.execute();
-
- for (var match_case : cases) {
- var tempSymtable = new HashMap();
- if (isMatching(match_case.match, cond_value, tempSymtable)) {
- if (!tempSymtable.isEmpty()) {
- Context.top.pushStack();
- for (var entry : tempSymtable.entrySet()) {
- Context.top.putLocal(entry.getKey(), entry.getValue());
- }
- }
- var result = match_case.value.execute();
- if (!tempSymtable.isEmpty()) {
- Context.top.dropStackFrame();
- }
- return result;
- }
- }
-
- if (else_case == null) {
- throw new PiccodeException("Inexhaustive when expression: no pattern matched: when " + cond + " { ... }");
- }
-
- return else_case.execute();
- }
-
- private boolean isMatching(List patterns, PiccodeValue cond_value, Map temp) {
- for (Ast pattern : patterns) {
- if (matchPattern(pattern, cond_value, temp)) {
- return true;
- }
- }
- return false;
- }
-
- private boolean matchPattern(Ast pattern, PiccodeValue value, Map temp) {
- if (pattern instanceof IdentifierAst id) {
- if (!id.text.equals("_")) {
- temp.put(id.text, value);
- }
- return true;
- }
-
- if (pattern instanceof NumberAst lit) {
- var litVal = lit.execute();
- return litVal.equals(value);
- }
-
- if (pattern instanceof StringAst lit) {
- var litVal = lit.execute();
- return Objects.equals(litVal, value);
- }
-
- if (pattern instanceof TupleAst tup && value instanceof PiccodeTuple vTup) {
- var items = tup.nodes;
- var vItems = vTup.nodes;
- if (items.size() != vItems.size()) {
- return false;
- }
-
- for (int i = 0; i < items.size(); i++) {
- if (!matchPattern(items.get(i), vItems.get(i), temp)) {
- return false;
- }
- }
- return true;
- }
- if (pattern instanceof ArrayAst listPat && value instanceof PiccodeArray listVal) {
- var patItems = listPat.nodes;
- var valItems = listVal.nodes;
- if (patItems.size() != valItems.size()) {
- return false;
- }
-
- for (int i = 0; i < patItems.size(); i++) {
- if (!matchPattern(patItems.get(i), valItems.get(i), temp)) {
- return false;
- }
- }
- return true;
- }
- if (pattern instanceof ListConstAst cons && value instanceof PiccodeArray listVal2) {
- if (listVal2.nodes.isEmpty()) {
- return false;
- }
- var head = listVal2.nodes.getFirst();
- var tail = new PiccodeArray(listVal2.nodes.subList(1, listVal2.nodes.size()));
-
- return matchPattern(cons.lhs, head, temp) && matchPattern(cons.rhs, tail, temp);
- }
- if (pattern instanceof ObjectAst objPat && value instanceof PiccodeObject objVal) {
- for (var entry : objPat.objs.entrySet()) {
- if (!objVal.obj.containsKey(entry.getKey())) {
- return false;
- }
- if (!matchPattern(entry.getValue(), objVal.obj.get(entry.getKey()), temp)) {
- return false;
- }
- }
- return true;
- }
-
- if (pattern instanceof ArrayAst && value instanceof PiccodeArray vList && vList.nodes.isEmpty()) {
- return true;
- }
- return false;
- }
-}
diff --git a/src/main/java/org/piccode/ast/WhenCase.java b/src/main/java/org/piccode/ast/WhenCase.java
deleted file mode 100644
index fb7e3ff..0000000
--- a/src/main/java/org/piccode/ast/WhenCase.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.piccode.ast;
-
-import java.util.List;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class WhenCase implements Ast{
- public List match;
- public Ast value;
-
- public WhenCase(List match, Ast value) {
- this.match = match;
- this.value = value;
- }
-
- @Override
- public String toString() {
- var m = match.toString();
- m = m.substring(1, m.length() - 1);
- return "is " + m + " -> " + value;
- }
-
- @Override
- public PiccodeValue execute() {
- throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
- }
-
-}
diff --git a/src/main/java/org/piccode/backend/Compiler.java b/src/main/java/org/piccode/backend/Compiler.java
deleted file mode 100644
index 8db9c02..0000000
--- a/src/main/java/org/piccode/backend/Compiler.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.piccode.backend;
-
-import java.awt.Color;
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import javax.swing.JTextArea;
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.editor.AccessFrame;
-import org.editor.errors.IDEErrorListener;
-import org.piccode.antlr4.PiccodeScriptLexer;
-import org.piccode.antlr4.PiccodeScriptParser;
-import org.piccode.ast.Ast;
-import org.piccode.ast.FunctionAst;
-import org.piccode.ast.ImportAst;
-import org.piccode.ast.ModuleAst;
-import org.piccode.ast.PiccodeVisitor;
-import org.piccode.ast.StatementList;
-import org.piccode.rt.Context;
-import org.piccode.rt.NativeFunction;
-import org.piccode.rt.PiccodeBoolean;
-import org.piccode.rt.PiccodeException;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeValue;
-import org.piccode.rt.modules.PiccodeArrayModule;
-import org.piccode.rt.modules.PiccodeColorModule;
-import org.piccode.rt.modules.PiccodeGfxModule;
-import org.piccode.rt.modules.PiccodeIOModule;
-import org.piccode.rt.modules.PiccodeMathModule;
-import org.piccode.rt.modules.PiccodeResourceModule;
-import org.piccode.rt.modules.PiccodeStringModule;
-import org.piccode.rt.modules.PiccodeTupleModule;
-
-/**
- *
- * @author hexaredecimal
- */
-public class Compiler {
-
- public static List main_loop = new ArrayList<>();
-
- public static void compile(String code, boolean render) {
-
- var lexer = new PiccodeScriptLexer(CharStreams.fromString(code));
- var parser = new PiccodeScriptParser(new CommonTokenStream(lexer));
- lexer.removeErrorListeners();
- parser.removeErrorListeners();
-
- IDEErrorListener errorListener = new IDEErrorListener();
- lexer.addErrorListener(errorListener);
- parser.addErrorListener(errorListener);
-
- var visitor = new PiccodeVisitor();
-
- AccessFrame.writeWarning("Starting Parsing");
- var result = (StatementList) visitor.visit(parser.stmts());
- Context.top.pushStack();
- Context.top.putLocal("true", new PiccodeBoolean("true"));
- Context.top.putLocal("false", new PiccodeBoolean("false"));
- addGlobalFunctions();
- AccessFrame.writeWarning("Staring execution");
- try {
- main_loop.clear();
- for (var stmt : result.nodes) {
- if (stmt instanceof FunctionAst || stmt instanceof ImportAst || stmt instanceof ModuleAst) {
- stmt.execute();
- continue;
- }
- if (render) {
- main_loop.add(stmt);
- }else {
- stmt.execute();
- }
- }
- AccessFrame.writeSuccess("Compilation successful: ");
- } catch (Exception rte) {
- rte.printStackTrace();
- AccessFrame.writeError(rte.getMessage());
- } finally {
- Context.top.dropStackFrame();
- }
- }
-
- private static void addGlobalFunctions() {
- PiccodeIOModule.addFunctions();
- PiccodeArrayModule.addFunctions();
- PiccodeStringModule.addFunctions();
- PiccodeTupleModule.addFunctions();
- PiccodeMathModule.addFunctions();
- PiccodeGfxModule.addFunctions();
- PiccodeResourceModule.addFunctions();
- PiccodeColorModule.addFunctions();
- }
-}
diff --git a/src/main/java/org/piccode/rt/Context.java b/src/main/java/org/piccode/rt/Context.java
deleted file mode 100644
index 81ec5e9..0000000
--- a/src/main/java/org/piccode/rt/Context.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.piccode.rt;
-
-import java.util.HashMap;
-import java.util.Stack;
-
-/**
- *
- * @author hexaredecimal
- */
-public class Context {
- private static HashMap global_scope = new HashMap<>();
- private Stack> scope_stack;
-
- public static Context top = new Context();
- public static HashMap modules = new HashMap<>();
-
- public Context() {
- scope_stack = new Stack<>();
- }
-
- public static void addGlobal(String name, PiccodeValue value) {
- global_scope.put(name, value);
- }
-
- public void pushStack() {
- if (!scope_stack.isEmpty()) {
- var _top = scope_stack.peek();
- var new_stack = new HashMap<>(_top);
- scope_stack.push(new_stack);
- return;
- }
- scope_stack.push(new HashMap<>());
- }
-
- public void dropStackFrame() {
- scope_stack.pop();
- }
-
- public void putLocal(String name, PiccodeValue value) {
- var frame = scope_stack.peek();
- frame.put(name, value);
- }
-
- public PiccodeValue getValue(String name) {
- if (scope_stack.isEmpty()) {
- return global_scope.get(name);
- }
- var frame = scope_stack.peek();
- var value = frame.get(name);
- if (value == null) {
- return global_scope.get(name);
- }
- return value;
- }
-}
diff --git a/src/main/java/org/piccode/rt/Evaluator.java b/src/main/java/org/piccode/rt/Evaluator.java
deleted file mode 100644
index 5bb61bc..0000000
--- a/src/main/java/org/piccode/rt/Evaluator.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.piccode.rt;
-
-import org.piccode.ast.Ast;
-import org.piccode.ast.ClosureAst;
-import org.piccode.ast.FunctionAst;
-import org.piccode.ast.StatementList;
-
-/**
- *
- * @author hexaredecimal
- */
-public class Evaluator {
-}
diff --git a/src/main/java/org/piccode/rt/NativeFunction.java b/src/main/java/org/piccode/rt/NativeFunction.java
deleted file mode 100644
index 4d56d7b..0000000
--- a/src/main/java/org/piccode/rt/NativeFunction.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.piccode.rt;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- *
- * @author hexaredecimal
- */
-
-public abstract class NativeFunction implements PiccodeValue {
-
- private final String name;
- private final List params;
- private final Map defaultArgs;
- private final Map boundArgs;
-
- public NativeFunction(String name, List params, Map defaultArgs) {
- this.name = name;
- this.params = params;
- this.defaultArgs = defaultArgs != null ? defaultArgs : new HashMap<>();
- this.boundArgs = new HashMap<>();
- }
-
- public NativeFunction(String name, List params, Map defaultArgs, Map boundArgs) {
- this.name = name;
- this.params = params;
- this.defaultArgs = defaultArgs != null ? defaultArgs : new HashMap<>();
- this.boundArgs = boundArgs != null ? new HashMap<>(boundArgs) : new HashMap<>();
- }
-
- // Curry-style apply
- public PiccodeValue call(PiccodeValue value) {
- if (boundArgs.size() >= params.size()) {
- throw new PiccodeException("Too many arguments applied");
- }
-
- String nextParam = params.get(boundArgs.size());
- Map newBound = new HashMap<>(boundArgs);
- newBound.put(nextParam, value);
- return new CurriedNativeFunction(name, params, defaultArgs, newBound, this);
- }
-
- public PiccodeValue callNamed(String name, PiccodeValue value) {
- if (!params.contains(name)) {
- throw new PiccodeException("Unknown argument: " + name);
- }
-
- Map newBound = new HashMap<>(boundArgs);
- newBound.put(name, value);
- return new CurriedNativeFunction(name, params, defaultArgs, newBound, this);
- }
-
- public PiccodeValue evaluateIfReady() {
- if (boundArgs.size() < params.size()) {
- return this; // Not enough args yet
- }
- List orderedArgs = new ArrayList<>();
- for (String param : params) {
- if (boundArgs.containsKey(param)) {
- orderedArgs.add(boundArgs.get(param));
- } else if (defaultArgs.containsKey(param)) {
- orderedArgs.add(defaultArgs.get(param));
- } else {
- throw new PiccodeException("Missing argument: " + param);
- }
- }
-
- return invoke(orderedArgs, boundArgs);
- }
-
- public class CurriedNativeFunction extends NativeFunction {
-
- private final NativeFunction target;
- public CurriedNativeFunction(String name, List params, Map defaultArgs,
- Map boundArgs, NativeFunction target) {
- super(name, params, defaultArgs, boundArgs);
- this.target = target;
- }
-
- @Override
- public PiccodeValue invoke(List args, Map namedArgs) {
- return target.invoke(args, namedArgs);
- }
-
- @Override
- public Object raw() {
- return target;
- }
- }
-
-
- @Override
- public String toString() {
- return "";
- }
-
- public abstract PiccodeValue invoke(List args, Map namedArgs);
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeArray.java b/src/main/java/org/piccode/rt/PiccodeArray.java
deleted file mode 100644
index f934e38..0000000
--- a/src/main/java/org/piccode/rt/PiccodeArray.java
+++ /dev/null
@@ -1,67 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeArray implements PiccodeValue {
- public List nodes;
-
- public PiccodeArray(List nodes) {
- this.nodes = nodes;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("[");
-
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- if (i < nodes.size() - 1) {
- sb.append(", ");
- }
- }
- sb.append("]");
- return sb.toString();
- }
-
- public List getList() {
- return nodes;
- }
-
- public PiccodeValue[] array() {
- return nodes.toArray(PiccodeValue[]::new);
- }
-
- @Override
- public Object raw() {
- return nodes.toArray();
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 23 * hash + Objects.hashCode(this.nodes);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeArray other = (PiccodeArray) obj;
- return Objects.equals(this.nodes, other.nodes);
- }
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeBoolean.java b/src/main/java/org/piccode/rt/PiccodeBoolean.java
deleted file mode 100644
index c42692c..0000000
--- a/src/main/java/org/piccode/rt/PiccodeBoolean.java
+++ /dev/null
@@ -1,50 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeBoolean implements PiccodeValue {
- private String value;
-
- public PiccodeBoolean(String number) {
- this.value = number;
- }
-
- @Override
- public Object raw() {
- return (value.equals("true"));
- }
-
- @Override
- public String toString() {
- return value;
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 23 * hash + Objects.hashCode(this.value);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeBoolean other = (PiccodeBoolean) obj;
- return Objects.equals(this.value, other.value);
- }
-
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeClosure.java b/src/main/java/org/piccode/rt/PiccodeClosure.java
deleted file mode 100644
index 799a4ad..0000000
--- a/src/main/java/org/piccode/rt/PiccodeClosure.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package org.piccode.rt;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.piccode.ast.Arg;
-import org.piccode.ast.Ast;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeClosure implements PiccodeValue {
-
- List params; // Full list of args (with name and default val)
- Map appliedArgs; // Applied named args
- int positionalIndex; // How many positional args have been applied so far
- Ast body;
-
- public PiccodeClosure(List params, Map appliedArgs, int positionalIndex, Ast body) {
- this.params = params == null ? List.of() : params;
- this.appliedArgs = appliedArgs;
- this.positionalIndex = positionalIndex;
- this.body = body;
- }
-
- public PiccodeValue call(PiccodeValue arg) {
- if (positionalIndex >= params.size()) {
- throw new PiccodeException("Too many arguments");
- }
-
- String paramName = params.get(positionalIndex).name;
- Map newArgs = new HashMap<>(appliedArgs);
- newArgs.put(paramName, arg);
-
- return new PiccodeClosure(params, newArgs, positionalIndex + 1, body);
- }
-
- public PiccodeValue callNamed(String name, PiccodeValue arg) {
- boolean paramExists = params.stream().anyMatch(p -> p.name.equals(name));
- if (!paramExists) {
- throw new PiccodeException("Function does not have a parameter named '" + name + "'");
- }
-
- if (positionalIndex >= params.size()) {
- throw new PiccodeException("Too many arguments");
- }
-
- if (appliedArgs.containsKey(name)) {
- throw new PiccodeException("Duplicate argument: " + name);
- }
-
- Map newArgs = new HashMap<>(appliedArgs);
- newArgs.put(name, arg);
-
- return new PiccodeClosure(params, newArgs, positionalIndex + 1, body);
- }
-
- public PiccodeValue evaluateIfReady() {
- for (Arg param : params) {
- boolean isSet = appliedArgs.containsKey(param.name);
- boolean hasDefault = param.def_val != null;
- if (!isSet && !hasDefault) {
- return this; // Not ready yet — required arg still missing
- }
- }
-
- // All required args satisfied (either by user or by default), run
- Context.top.pushStack();
- for (Arg param : params) {
- PiccodeValue val = appliedArgs.getOrDefault(
- param.name,
- param.def_val != null ? param.def_val.execute() : null
- );
- Context.top.putLocal(param.name, val);
- }
-
- var result = body.execute();
- Context.top.dropStackFrame();
- return result;
- }
-
- @Override
- public Object raw() {
- return body;
- }
-
- @Override
- public String toString() {
- return "Rt.Fn/" + positionalIndex;
- }
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeException.java b/src/main/java/org/piccode/rt/PiccodeException.java
deleted file mode 100644
index 72ebe5e..0000000
--- a/src/main/java/org/piccode/rt/PiccodeException.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.piccode.rt;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeException extends RuntimeException{
-
- public PiccodeException(String message) {
- super(message);
- }
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeModule.java b/src/main/java/org/piccode/rt/PiccodeModule.java
deleted file mode 100644
index 9a98645..0000000
--- a/src/main/java/org/piccode/rt/PiccodeModule.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package org.piccode.rt;
-
-import java.util.List;
-import java.util.Objects;
-import org.piccode.ast.Ast;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeModule implements PiccodeValue{
- public String name;
- public List nodes;
-
- public PiccodeModule(String name, List nodes) {
- this.name = name;
- this.nodes = nodes;
- }
-
- @Override
- public Object raw() {
- return name;
- }
-
- @Override
- public String toString() {
- return "module " + name;
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 37 * hash + Objects.hashCode(this.name);
- hash = 37 * hash + Objects.hashCode(this.nodes);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeModule other = (PiccodeModule) obj;
- if (!Objects.equals(this.name, other.name)) {
- return false;
- }
- return Objects.equals(this.nodes, other.nodes);
- }
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeNumber.java b/src/main/java/org/piccode/rt/PiccodeNumber.java
deleted file mode 100644
index b059fa1..0000000
--- a/src/main/java/org/piccode/rt/PiccodeNumber.java
+++ /dev/null
@@ -1,46 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeNumber implements PiccodeValue {
- private String number;
-
- public PiccodeNumber(String number) {
- this.number = number;
- }
-
- @Override
- public Object raw() {
- return Double.parseDouble(number);
- }
-
- @Override
- public String toString() {
- return number;
- }
-
- @Override
- public int hashCode() {
- int hash = 5;
- hash = 17 * hash + Objects.hashCode(this.number);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) return true;
-
- if (!(obj instanceof PiccodeNumber)) return false;
- var num = (PiccodeNumber) obj;
- var lhs = ((Double) this.raw()).doubleValue();
- var rhs = ((Double) num.raw()).doubleValue();
- return lhs == rhs;
- }
-
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeObject.java b/src/main/java/org/piccode/rt/PiccodeObject.java
deleted file mode 100644
index 2fcee38..0000000
--- a/src/main/java/org/piccode/rt/PiccodeObject.java
+++ /dev/null
@@ -1,69 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeObject implements PiccodeValue {
- public HashMap obj;
-
- public PiccodeObject(HashMap obj) {
- this.obj = obj;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("{");
-
- var nodes = obj.entrySet();
- var size = nodes.size();
-
- int i = 0;
- for (var node: nodes) {
- sb.append(node.getKey()).append(": ").append(node.getValue());
- if (i < size - 1) {
- sb.append(", ");
- }
- i++;
- }
- sb.append("}");
- return sb.toString();
- }
-
- public PiccodeValue getValue(String key) {
- return obj.get(key);
- }
-
- @Override
- public Object raw() {
- return obj;
- }
-
- @Override
- public int hashCode() {
- int hash = 5;
- hash = 17 * hash + Objects.hashCode(this.obj);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeObject other = (PiccodeObject) obj;
- return Objects.equals(this.obj, other.obj);
- }
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeString.java b/src/main/java/org/piccode/rt/PiccodeString.java
deleted file mode 100644
index 1e6c7ab..0000000
--- a/src/main/java/org/piccode/rt/PiccodeString.java
+++ /dev/null
@@ -1,48 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeString implements PiccodeValue {
- private String string;
-
- public PiccodeString(String str) {
- this.string = str;
- }
-
- @Override
- public Object raw() {
- return string;
- }
-
- @Override
- public String toString() {
- return string;
- }
-
- @Override
- public int hashCode() {
- int hash = 5;
- hash = 47 * hash + Objects.hashCode(this.string);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeString other = (PiccodeString) obj;
- return Objects.equals(this.string, other.string);
- }
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeTuple.java b/src/main/java/org/piccode/rt/PiccodeTuple.java
deleted file mode 100644
index 8f779b3..0000000
--- a/src/main/java/org/piccode/rt/PiccodeTuple.java
+++ /dev/null
@@ -1,64 +0,0 @@
-
-package org.piccode.rt;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeTuple implements PiccodeValue {
- public List nodes;
-
- public PiccodeTuple(List nodes) {
- this.nodes = nodes;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("(");
-
- for (int i = 0; i < nodes.size(); i++) {
- sb.append(nodes.get(i));
- if (i < nodes.size() - 1) {
- sb.append(", ");
- }
- }
- sb.append(")");
- return sb.toString();
- }
-
- public PiccodeValue[] array() {
- return nodes.toArray(PiccodeValue[]::new);
- }
-
- @Override
- public Object raw() {
- return nodes.toArray(PiccodeValue[]::new);
- }
-
- @Override
- public int hashCode() {
- int hash = 7;
- hash = 59 * hash + Objects.hashCode(this.nodes);
- return hash;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PiccodeTuple other = (PiccodeTuple) obj;
- return Objects.equals(this.nodes, other.nodes);
- }
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeUnit.java b/src/main/java/org/piccode/rt/PiccodeUnit.java
deleted file mode 100644
index e4eeed1..0000000
--- a/src/main/java/org/piccode/rt/PiccodeUnit.java
+++ /dev/null
@@ -1,20 +0,0 @@
-
-package org.piccode.rt;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeUnit implements PiccodeValue {
- @Override
- public Object raw() {
- return Void.TYPE;
- }
-
- @Override
- public String toString() {
- return "()";
- }
-
-
-}
diff --git a/src/main/java/org/piccode/rt/PiccodeValue.java b/src/main/java/org/piccode/rt/PiccodeValue.java
deleted file mode 100644
index 080f945..0000000
--- a/src/main/java/org/piccode/rt/PiccodeValue.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.piccode.rt;
-
-/**
- *
- * @author hexaredecimal
- */
-public interface PiccodeValue {
- public Object raw();
-}
diff --git a/src/main/java/org/piccode/rt/modules/NativeFunctionFactory.java b/src/main/java/org/piccode/rt/modules/NativeFunctionFactory.java
deleted file mode 100644
index 5993f62..0000000
--- a/src/main/java/org/piccode/rt/modules/NativeFunctionFactory.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.List;
-import java.util.Map;
-import java.util.function.BiConsumer;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-import org.piccode.rt.Context;
-import org.piccode.rt.NativeFunction;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class NativeFunctionFactory {
- public static NativeFunction create(String name, BiFunction, Map, PiccodeValue> fx) {
- return create(name, List.of(), fx);
- }
-
- public static NativeFunction create(String name, List args, BiFunction, Map, PiccodeValue> fx) {
- NativeFunction func= new NativeFunction(name, args, null) {
- @Override
- public PiccodeValue invoke(List args, Map namedArgs) {
- return fx.apply(args, namedArgs);
- }
-
- @Override
- public Object raw() {
- return this;
- }
- };
-
- Context.addGlobal("pic_nat_" + name, func);
- return func;
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeArrayModule.java b/src/main/java/org/piccode/rt/modules/PiccodeArrayModule.java
deleted file mode 100644
index f0f8a44..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeArrayModule.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeString;
-import org.piccode.rt.PiccodeValue;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeArrayModule {
- public static void addFunctions() {
- NativeFunctionFactory.create("array_concat", List.of("l", "r"), (args, namedArgs) -> {
- var l= ((PiccodeArray) namedArgs.get("l")).getList();
- var r= ((PiccodeArray) namedArgs.get("r")).getList();
- var c = new ArrayList();
- l.forEach((a) -> c.add(a));
- r.forEach((a) -> c.add(a));
- return new PiccodeArray(c);
- });
-
- NativeFunctionFactory.create("array_tostring", List.of("arr"), (args, namedArgs) -> {
- var arr = ((PiccodeArray) namedArgs.get("arr")).getList();
- return new PiccodeString(arr.toString());
- });
-
- NativeFunctionFactory.create("array_join", List.of("arr", "sep"), (args, namedArgs) -> {
- var arr = ((PiccodeArray) namedArgs.get("arr")).getList();
- var sep = namedArgs.get("sep").toString();
- var strArr = arr
- .stream()
- .map((a) -> a.toString())
- .toArray(String[]::new);
-
- var join = String.join(sep, strArr);
- return new PiccodeString(join);
- });
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeColorModule.java b/src/main/java/org/piccode/rt/modules/PiccodeColorModule.java
deleted file mode 100644
index c454b56..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeColorModule.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeTuple;
-import org.piccode.rt.PiccodeValue;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeColorModule {
- public static void addFunctions() {
-
- NativeFunctionFactory.create("createcolora", List.of("r", "g", "b", "a"), (args, namedArgs) -> {
- var r = (int) (double)namedArgs.get("r").raw();
- var g = (int) (double)namedArgs.get("g").raw();
- var b = (int) (double)namedArgs.get("b").raw();
- var a = (int) (double)namedArgs.get("a").raw();
- var color = new Color(r, g, b, a).getRGB();
- return new PiccodeNumber("" + color);
- });
-
-
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeGfxModule.java b/src/main/java/org/piccode/rt/modules/PiccodeGfxModule.java
deleted file mode 100644
index a88df24..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeGfxModule.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.awt.Color;
-import java.util.List;
-import org.editor.CanvasFrame;
-import org.editor.icons.ImageLoader;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeUnit;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeGfxModule {
-
- public static void addFunctions() {
- NativeFunctionFactory.create("drawline", List.of("x1", "y1", "x2", "y2"), (args, namedArgs) -> {
- var x1 = (int) (double) namedArgs.get("x1").raw();
- var x2 = (int) (double) namedArgs.get("x2").raw();
- var y1 = (int) (double) namedArgs.get("y1").raw();
- var y2 = (int) (double) namedArgs.get("y2").raw();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
- CanvasFrame.gfx.drawLine(xoff + x1, yoff + y1, xoff + x2, yoff + y2);
- return new PiccodeUnit();
- });
-
- NativeFunctionFactory.create("drawrect", List.of("x", "y", "w", "h"), (args, namedArgs) -> {
- var x = (int) (double) namedArgs.get("x").raw();
- var y = (int) (double) namedArgs.get("y").raw();
- var w = (int) (double) namedArgs.get("w").raw();
- var h = (int) (double) namedArgs.get("h").raw();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
- CanvasFrame.gfx.drawRect(xoff + x, yoff + y, w, h);
- return new PiccodeUnit();
- });
-
- NativeFunctionFactory.create("drawoval", List.of("x", "y", "w", "h"), (args, namedArgs) -> {
- var x = (int) (double) namedArgs.get("x").raw();
- var y = (int) (double) namedArgs.get("y").raw();
- var w = (int) (double) namedArgs.get("w").raw();
- var h = (int) (double) namedArgs.get("h").raw();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
- CanvasFrame.gfx.drawOval(xoff + x, yoff + y, w, h);
- return new PiccodeUnit();
- });
-
- NativeFunctionFactory.create("drawstring", List.of("str", "x", "y"), (args, namedArgs) -> {
- var str = namedArgs.get("str").raw().toString();
- var x = (int) (double) namedArgs.get("x").raw();
- var y = (int) (double) namedArgs.get("y").raw();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
- CanvasFrame.gfx.drawString(str, xoff + x, yoff + y);
- return new PiccodeUnit();
- });
-
- NativeFunctionFactory.create("drawpolygon", List.of("xarrr", "yarrr"), (args, namedArgs) -> {
- var xa = ((PiccodeArray) namedArgs.get("xarrr").raw()).getList();
- var ya = ((PiccodeArray) namedArgs.get("yarrr").raw()).getList();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
-
- int[] xarr = new int[xa.size()];
- int[] yarr = new int[ya.size()];
-
- for (int i = 0; i < xa.size(); i++) {
- xarr[i] = (int) (double) xa.get(i).raw();
- xarr[i] += xoff;
- }
-
- for (int i = 0; i < ya.size(); i++) {
- yarr[i] = (int) (double) ya.get(i).raw();
- yarr[i] += yoff;
- }
- CanvasFrame.gfx.drawPolygon(xarr, yarr, 0);
- return new PiccodeUnit();
- });
- NativeFunctionFactory.create("drawpolyline", List.of("xarrr", "yarrr"), (args, namedArgs) -> {
- var xa = ((PiccodeArray) namedArgs.get("xarrr").raw()).getList();
- var ya = ((PiccodeArray) namedArgs.get("yarrr").raw()).getList();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
-
- int[] xarr = new int[xa.size()];
- int[] yarr = new int[ya.size()];
-
- for (int i = 0; i < xa.size(); i++) {
- xarr[i] = (int) (double) xa.get(i).raw();
- xarr[i] += xoff;
- }
-
- for (int i = 0; i < ya.size(); i++) {
- yarr[i] = (int) (double) ya.get(i).raw();
- yarr[i] += yoff;
- }
- CanvasFrame.gfx.drawPolyline(xarr, yarr, 0);
- return new PiccodeUnit();
- });
-
- NativeFunctionFactory.create("drawimage", List.of("id", "x", "y", "w", "h"), (args, namedArgs) -> {
- var id= (int) (double) namedArgs.get("id").raw();
- var x= (int) (double) namedArgs.get("x").raw();
- var y= (int) (double) namedArgs.get("y").raw();
- var w= (int) (double) namedArgs.get("w").raw();
- var h= (int) (double) namedArgs.get("h").raw();
- var xoff = CanvasFrame.offsetX;
- var yoff = CanvasFrame.offsetY;
-
- var img = ImageLoader.getImage(id);
-
- CanvasFrame.gfx.drawImage(img, x + xoff, y + yoff, w, h, CanvasFrame.the());
- return new PiccodeUnit();
- });
-
-
- NativeFunctionFactory.create("color", List.of("color"), (args, namedArgs) -> {
- var rgb = (int) (double) namedArgs.get("color").raw();
- CanvasFrame.gfx.setColor(new Color(rgb));
- return new PiccodeUnit();
- });
-
-
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeIOModule.java b/src/main/java/org/piccode/rt/modules/PiccodeIOModule.java
deleted file mode 100644
index b59b5e1..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeIOModule.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.List;
-import javax.swing.JOptionPane;
-import org.editor.AccessFrame;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeString;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeIOModule {
-
- public static void addFunctions() {
- NativeFunctionFactory.create("print", List.of("value"), (args, namedArgs) -> {
- var value = namedArgs.get("value").toString();
- AccessFrame.writeString(value);
- return new PiccodeNumber("0");
- });
-
- NativeFunctionFactory.create("read", List.of("msg"), (args, namedArgs) -> {
- var value = namedArgs.get("msg");
- var result = JOptionPane.showInputDialog(value);
- if (result == null) {
- return new PiccodeString("No input provided");
- }
- return new PiccodeString(result);
- });
-
- }
-
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeMathModule.java b/src/main/java/org/piccode/rt/modules/PiccodeMathModule.java
deleted file mode 100644
index 9455198..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeMathModule.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.List;
-import org.piccode.rt.PiccodeNumber;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeMathModule {
- public static void addFunctions() {
-
- NativeFunctionFactory.create("sin", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.sin(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("cos", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.cos(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("tan", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.tan(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("asin", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.asin(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("acos", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.acos(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("atan", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.atan(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
-
- NativeFunctionFactory.create("abs", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.abs(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("floor", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.floor(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("ceil", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.ceil(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
-
- NativeFunctionFactory.create("sinh", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.sin(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("cosh", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.cos(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("tanh", List.of("a"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var result = Math.tan(value);
- return new PiccodeNumber(String.format("%s", result));
- });
-
- NativeFunctionFactory.create("pow", List.of("a", "b"), (args, namedArgs) -> {
- var value = (double) namedArgs.get("a").raw();
- var power = (double) namedArgs.get("b").raw();
- var result = Math.pow(value, power);
- return new PiccodeNumber(String.format("%s", result));
- });
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeResourceModule.java b/src/main/java/org/piccode/rt/modules/PiccodeResourceModule.java
deleted file mode 100644
index 6d0c322..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeResourceModule.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.List;
-import org.editor.icons.ImageLoader;
-import org.piccode.rt.PiccodeNumber;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeResourceModule {
- public static void addFunctions() {
-
- NativeFunctionFactory.create("loadpaint", List.of("src"), (args, namedArgs) -> {
- var path = namedArgs.get("src").toString();
- var index = ImageLoader.loadImage(path);
-
- return new PiccodeNumber("" + index);
- });
-
-
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeStringModule.java b/src/main/java/org/piccode/rt/modules/PiccodeStringModule.java
deleted file mode 100644
index 1e22fef..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeStringModule.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeString;
-import org.piccode.rt.PiccodeValue;
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeStringModule {
-
- public static void addFunctions() {
- NativeFunctionFactory.create("stringformat", List.of("fmt", "args"), (args, namedArgs) -> {
- var fmt = namedArgs.get("fmt").raw().toString();
- var arr = ((PiccodeArray) namedArgs.get("args")).array();
- var result = String.format(fmt, (Object[]) arr);
- return new PiccodeString(result);
- });
-
- NativeFunctionFactory.create("stringtrim", List.of("value"), (args, namedArgs) -> {
- var value = namedArgs.get("value").raw().toString().trim();
- return new PiccodeString(value);
- });
-
- NativeFunctionFactory.create("stringuppercase", List.of("value"), (args, namedArgs) -> {
- var value = namedArgs.get("value").raw().toString().toUpperCase();
- return new PiccodeString(value);
- });
-
- NativeFunctionFactory.create("stringlowercase", List.of("value"), (args, namedArgs) -> {
- var value = namedArgs.get("value").raw().toString().toLowerCase();
- return new PiccodeString(value);
- });
-
- NativeFunctionFactory.create("stringlength", List.of("value"), (args, namedArgs) -> {
- var value = namedArgs.get("value").raw().toString().length();
- return new PiccodeNumber(""+value);
- });
-
-
- NativeFunctionFactory.create("stringsplit", List.of("value", "delim"), (args, namedArgs) -> {
- var value = namedArgs.get("value").raw().toString();
- var delim = namedArgs.get("delim").raw().toString();
- var splits = value.split(delim);
- var nodes = new ArrayList();
- for (var split: splits) {
- nodes.add(new PiccodeString(split));
- }
- return new PiccodeArray(args);
- });
- }
-}
diff --git a/src/main/java/org/piccode/rt/modules/PiccodeTupleModule.java b/src/main/java/org/piccode/rt/modules/PiccodeTupleModule.java
deleted file mode 100644
index f2279d0..0000000
--- a/src/main/java/org/piccode/rt/modules/PiccodeTupleModule.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.piccode.rt.modules;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import org.piccode.rt.PiccodeArray;
-import org.piccode.rt.PiccodeNumber;
-import org.piccode.rt.PiccodeTuple;
-import org.piccode.rt.PiccodeValue;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class PiccodeTupleModule {
- public static void addFunctions() {
-
- NativeFunctionFactory.create("tuplesize", List.of("tuple"), (args, namedArgs) -> {
- var arr = ((PiccodeTuple) namedArgs.get("tuple")).array().length;
- return new PiccodeNumber("" + arr);
- });
-
- NativeFunctionFactory.create("tupletoarray", List.of("tuple"), (args, namedArgs) -> {
- var arr = ((PiccodeTuple) namedArgs.get("tuple")).array();
- var list = new ArrayList();
- list.addAll(Arrays.asList(arr));
- return new PiccodeArray(list);
- });
-
- }
-}
diff --git a/src/test/java/org/piccode/ast/TopLevel.java b/src/test/java/org/piccode/ast/TopLevel.java
deleted file mode 100644
index 43160d2..0000000
--- a/src/test/java/org/piccode/ast/TopLevel.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.piccode.ast;
-
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.editor.AccessFrame;
-import org.editor.errors.IDEErrorListener;
-import org.junit.jupiter.api.Assertions;
-import static org.junit.jupiter.api.Assertions.*;
-import org.junit.jupiter.api.Test;
-import org.piccode.antlr4.PiccodeScriptLexer;
-import org.piccode.antlr4.PiccodeScriptParser;
-
-/**
- *
- * @author hexaredecimal
- */
-public class TopLevel {
- @Test
- public void function() {
- var code = "function add(x, y) = x + y";
- var ast = compile(code);
-
- assertEquals(ast.nodes.size(), 1);
- var func = ast.nodes.getFirst();
-
- assertFalse(!(func instanceof FunctionAst));
- var node = (FunctionAst) func;
- assertEquals(node.name, "add");
- assertEquals(node.arg.size(), 2);
- assertTrue(node.body instanceof BinOpAst);
- }
-
- @Test
- public void variable() {
- var code = "let foo = 1";
- var ast = compile(code);
-
- assertEquals(ast.nodes.size(), 1);
- var let = ast.nodes.getFirst();
-
- assertFalse(!(let instanceof VarDecl));
- var node = (VarDecl) let;
- assertEquals(node.name, "foo");
- assertTrue(node.value instanceof NumberAst num && num.text.equals("1"));
- }
-
- @Test
- public void module() {
- var code =
- """
- module Foo {
- function bar () = ()
- }
- """;
- var ast = compile(code);
-
- assertEquals(ast.nodes.size(), 1);
- var mod = ast.nodes.getFirst();
-
- assertFalse(!(mod instanceof ModuleAst));
- var node = (ModuleAst) mod;
- assertEquals(node.name, "Foo");
- assertEquals(node.nodes.size(), 1);
-
- var inner = node.nodes.getFirst();
- assertTrue(inner instanceof FunctionAst);
- }
-
- @Test
- public void importModule() {
- var code = "import pkg:io";
- var ast = compile(code);
- assertEquals(ast.nodes.size(), 1);
- var import_ = ast.nodes.getFirst();
- assertFalse(!(import_ instanceof ImportAst));
- var node = (ImportAst) import_;
- assertEquals(node.pkg, "pkg");
- assertEquals(node.module, "io");
- }
-
- private static StatementList compile(String code) {
- var lexer = new PiccodeScriptLexer(CharStreams.fromString(code));
- var parser = new PiccodeScriptParser(new CommonTokenStream(lexer));
- lexer.removeErrorListeners();
- parser.removeErrorListeners();
-
- IDEErrorListener errorListener = new IDEErrorListener();
- lexer.addErrorListener(errorListener);
- parser.addErrorListener(errorListener);
-
- var visitor = new PiccodeVisitor();
-
- return (StatementList) visitor.visit(parser.stmts());
- }
-}
diff --git a/src/test/java/org/piccode/rt/Runtime.java b/src/test/java/org/piccode/rt/Runtime.java
deleted file mode 100644
index d922434..0000000
--- a/src/test/java/org/piccode/rt/Runtime.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.piccode.rt;
-
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.editor.AccessFrame;
-import org.editor.errors.IDEErrorListener;
-import org.junit.jupiter.api.Assertions;
-import static org.junit.jupiter.api.Assertions.*;
-import org.junit.jupiter.api.Test;
-import org.piccode.antlr4.PiccodeScriptLexer;
-import org.piccode.antlr4.PiccodeScriptParser;
-import org.piccode.ast.*;
-
-
-/**
- *
- * @author hexaredecimal
- */
-public class Runtime {
- @Test
- public void function() {
- var code = "function add(x, y) = x + y";
- var ast = compile(code);
-
- assertEquals(ast.nodes.size(), 1);
- var func = ast.nodes.getFirst();
-
- assertFalse(!(func instanceof FunctionAst));
- var node = func.execute();
- assertTrue(node instanceof PiccodeClosure);
- }
-
- @Test
- public void variable() {
- var code = "let foo = 1";
- var ast = compile(code);
-
- assertEquals(ast.nodes.size(), 1);
- var let = ast.nodes.getFirst();
-
- assertFalse(!(let instanceof VarDecl));
-
- Context.top.pushStack();
- var node = let.execute();
- Context.top.dropStackFrame();
- assertTrue(node instanceof PiccodeNumber num && num.toString().equals("1"));
- }
-
- @Test
- public void importModule() {
- var code = "import pkg:io";
- var ast = compile(code);
- assertEquals(ast.nodes.size(), 1);
- var import_ = ast.nodes.getFirst();
- assertFalse(!(import_ instanceof ImportAst));
- var node = import_.execute();
- assertTrue(node instanceof PiccodeBoolean bool && bool.toString().equals("true"));
- }
-
- private static StatementList compile(String code) {
- var lexer = new PiccodeScriptLexer(CharStreams.fromString(code));
- var parser = new PiccodeScriptParser(new CommonTokenStream(lexer));
- lexer.removeErrorListeners();
- parser.removeErrorListeners();
-
- IDEErrorListener errorListener = new IDEErrorListener();
- lexer.addErrorListener(errorListener);
- parser.addErrorListener(errorListener);
-
- var visitor = new PiccodeVisitor();
-
- return (StatementList) visitor.visit(parser.stmts());
- }
-
-}
From 51073dafd0b9630036fa9a23f31ef040f8ae751e Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 13:58:37 +0200
Subject: [PATCH 11/17] error: Edit the parser a little bit
---
src/main/java/org/editor/errors/EditorParser.java | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/src/main/java/org/editor/errors/EditorParser.java b/src/main/java/org/editor/errors/EditorParser.java
index 257ed92..4f002ed 100644
--- a/src/main/java/org/editor/errors/EditorParser.java
+++ b/src/main/java/org/editor/errors/EditorParser.java
@@ -2,9 +2,6 @@
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.editor.errors.IDEErrorListener.SyntaxErrorInfo;
import org.fife.ui.rsyntaxtextarea.RSyntaxDocument;
import org.fife.ui.rsyntaxtextarea.parser.AbstractParser;
import org.fife.ui.rsyntaxtextarea.parser.DefaultParseResult;
@@ -13,6 +10,7 @@
import org.piccode.antlr4.PiccodeScriptLexer;
import org.piccode.antlr4.PiccodeScriptParser;
import org.piccode.ast.PiccodeVisitor;
+import org.piccode.backend.Compiler;
/**
*
@@ -26,7 +24,10 @@ public ParseResult parse(RSyntaxDocument doc, String style) {
try {
String code = doc.getText(0, doc.getLength());
-
+ } catch (BadLocationException ex) {
+ System.getLogger(EditorParser.class.getName()).log(System.Logger.Level.ERROR, (String) null, ex);
+ }
+ /*
var lexer = new PiccodeScriptLexer(CharStreams.fromString(code));
var tokens = new CommonTokenStream(lexer);
var parser = new PiccodeScriptParser(tokens);
@@ -38,8 +39,6 @@ public ParseResult parse(RSyntaxDocument doc, String style) {
lexer.addErrorListener(errorListener);
parser.addErrorListener(errorListener);
- var visitor = new PiccodeVisitor();
- visitor.visit(parser.stmts());
// Report any collected syntax errors to the RSyntax framework
for (SyntaxErrorInfo info : errorListener.getSyntaxErrorInfos()) {
@@ -50,7 +49,7 @@ public ParseResult parse(RSyntaxDocument doc, String style) {
} catch (BadLocationException e) {
e.printStackTrace();
}
-
+ */
return result;
}
From f0c1a811ed5d592257c28d346e74b7245be64adb Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 13:59:44 +0200
Subject: [PATCH 12/17] events: Redo compilation using the new compiler API
---
.../java/org/editor/events/AccessEvents.java | 31 ++++++++++++++++---
src/main/java/org/editor/events/Actions.java | 2 +-
.../java/org/editor/events/MenuEvents.java | 5 +++
3 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/src/main/java/org/editor/events/AccessEvents.java b/src/main/java/org/editor/events/AccessEvents.java
index ed7b049..5b2f6da 100644
--- a/src/main/java/org/editor/events/AccessEvents.java
+++ b/src/main/java/org/editor/events/AccessEvents.java
@@ -1,9 +1,14 @@
package org.editor.events;
import java.awt.event.ActionEvent;
+import java.util.List;
import org.editor.AccessFrame;
+import org.editor.CanvasFrame;
import org.editor.EditorWindow;
+import org.piccode.ast.Ast;
import org.piccode.backend.Compiler;
+import org.piccode.piccodescript.ErrorAsciiKind;
+import org.piccode.rt.PiccodeException;
/**
*
@@ -16,18 +21,34 @@ public static void compileAndRender(ActionEvent e) {
if (ed == null) {
return;
}
- var code = ed.textArea.getText();
+
+ if (ed.file == null) {
+ EditorWindow.current_file.setText("Cannot compiler unsaved code");
+ return;
+ }
+
+ var file = ed.file.toString();
+ var code = ed.textArea.getText();
+ CanvasFrame.file = file;
+ CanvasFrame.code = code;
+ CanvasFrame.start = true;
AccessFrame.writeSuccess("Compilation started: ");
- Compiler.compile(code, true);
}
-
+
public static void compile(ActionEvent e) {
var ed = EditorWindow.getSelectedEditor();
if (ed == null) {
return;
}
- var code = ed.textArea.getText();
+
+ if (ed.file == null) {
+ EditorWindow.current_file.setText("Cannot compiler unsaved code");
+ return;
+ }
+
+ var code = ed.textArea.getText();
AccessFrame.writeSuccess("Compilation started: ");
- Compiler.compile(code, false);
+ Compiler.out = AccessFrame.AccessFrameOutputStream.out;
}
+
}
diff --git a/src/main/java/org/editor/events/Actions.java b/src/main/java/org/editor/events/Actions.java
index d521bea..ab726c7 100644
--- a/src/main/java/org/editor/events/Actions.java
+++ b/src/main/java/org/editor/events/Actions.java
@@ -119,7 +119,7 @@ public static void loadActions() {
.icon("add-file")
.tooltip("Create a new file")
.shortcut("control N")
- .handler(e -> It.todo())
+ .handler(MenuEvents::newFile)
.build();
openProjectAction
diff --git a/src/main/java/org/editor/events/MenuEvents.java b/src/main/java/org/editor/events/MenuEvents.java
index 58b96c9..3b04f33 100644
--- a/src/main/java/org/editor/events/MenuEvents.java
+++ b/src/main/java/org/editor/events/MenuEvents.java
@@ -132,4 +132,9 @@ static void quit(ActionEvent e) {
closeAllTabs(e);
System.exit(0);
}
+
+ static void newFile(ActionEvent e) {
+ // TODO: Use a file creator dialog in the future
+ EditorWindow.addTab(e);
+ }
}
From fe113d5a72a5337d59feab1c5e3fed227c571e0d Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 14:01:32 +0200
Subject: [PATCH 13/17] editor: Allow writing into the console from an output
stream and fix a bunch of bugs
---
src/main/java/org/editor/AccessFrame.java | 162 +++++++++++++++++++--
src/main/java/org/editor/CanvasFrame.java | 39 +++--
src/main/java/org/editor/CodeEditor.java | 11 ++
src/main/java/org/editor/EditorWindow.java | 15 +-
4 files changed, 195 insertions(+), 32 deletions(-)
diff --git a/src/main/java/org/editor/AccessFrame.java b/src/main/java/org/editor/AccessFrame.java
index 00177e4..3c41cdd 100644
--- a/src/main/java/org/editor/AccessFrame.java
+++ b/src/main/java/org/editor/AccessFrame.java
@@ -23,6 +23,16 @@
import javax.swing.text.StyleConstants;
import javax.swing.text.StyledDocument;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.swing.SwingUtilities;
+import javax.swing.text.SimpleAttributeSet;
+
/**
*
* @author hexaredecimal
@@ -30,7 +40,7 @@
public class AccessFrame extends JPanel {
public static JTextPane msgs;
-
+
public AccessFrame(int width) {
super(new BorderLayout());
@@ -47,7 +57,7 @@ public static void writeError(String text) {
StyledDocument doc = msgs.getStyledDocument();
Style redStyle = (Style) doc.addStyle("RedStyle", null);
StyleConstants.setForeground((MutableAttributeSet) redStyle, Color.RED);
- StyleConstants.setBackground((MutableAttributeSet) redStyle, new Color(255,0,0, 255/9));
+ StyleConstants.setBackground((MutableAttributeSet) redStyle, new Color(255, 0, 0, 255 / 9));
var line = getPaddedLine(text);
try {
doc.insertString(doc.getLength(), "[ERROR]: " + line, redStyle);
@@ -60,10 +70,10 @@ public static void writeWarning(String text) {
StyledDocument doc = msgs.getStyledDocument();
Style orangeStyle = (Style) doc.addStyle("OrangeStyle", null);
StyleConstants.setForeground((MutableAttributeSet) orangeStyle, Color.ORANGE);
- StyleConstants.setBackground((MutableAttributeSet) orangeStyle, new Color(237,150,52, 255/6));
+ StyleConstants.setBackground((MutableAttributeSet) orangeStyle, new Color(237, 150, 52, 255 / 6));
var line = getPaddedLine(text);
try {
- doc.insertString(doc.getLength(),"[WARNING]: " + line, orangeStyle);
+ doc.insertString(doc.getLength(), "[WARNING]: " + line, orangeStyle);
} catch (BadLocationException ex) {
Logger.getLogger(AccessFrame.class.getName()).log(Level.SEVERE, null, ex);
}
@@ -73,7 +83,7 @@ public static void writeSuccess(String text) {
StyledDocument doc = msgs.getStyledDocument();
Style greenStyle = (Style) doc.addStyle("GreenStyle", null);
StyleConstants.setForeground((MutableAttributeSet) greenStyle, Color.GREEN);
- StyleConstants.setBackground((MutableAttributeSet) greenStyle, new Color(0,255,0, 255/14));
+ StyleConstants.setBackground((MutableAttributeSet) greenStyle, new Color(0, 255, 0, 255 / 14));
var line = getPaddedLine(text);
try {
doc.insertString(doc.getLength(), "[SUCCESS]: " + line, greenStyle);
@@ -86,7 +96,7 @@ public static void writeString(String text) {
StyledDocument doc = msgs.getStyledDocument();
Style greenStyle = (Style) doc.addStyle("GreenStyle", null);
StyleConstants.setForeground((MutableAttributeSet) greenStyle, Color.GREEN);
- StyleConstants.setBackground((MutableAttributeSet) greenStyle, new Color(0,255,0, 255/14));
+ StyleConstants.setBackground((MutableAttributeSet) greenStyle, new Color(0, 255, 0, 255 / 14));
var line = getPaddedLine(text);
try {
doc.insertString(doc.getLength(), "[LOG]: " + line, greenStyle);
@@ -96,7 +106,7 @@ public static void writeString(String text) {
}
public static void writeLines(String... text) {
- for (var line: text){
+ for (var line : text) {
writeString(line);
}
}
@@ -117,17 +127,16 @@ private static String getPaddedLine(String text) {
int paddingLength = Math.max(0, charsPerLine - base.length());
return base + " ".repeat(paddingLength) + "\n";
- */
+ */
return text + "\n";
}
-
private Component getAccessBar() {
JPanel buttonBar = new JPanel(new FlowLayout(FlowLayout.LEFT)); // Horizontal layout
Action[] actions = {Actions.compileAction, Actions.renderAction, Actions.commitAction, Actions.exportAction};
-
- for (var action: actions) {
+
+ for (var action : actions) {
JButton btn = new JButton(action);
btn.setText("");
buttonBar.add(btn);
@@ -136,4 +145,135 @@ private Component getAccessBar() {
return buttonBar;
}
+ public static class AccessFrameOutputStream extends OutputStream {
+
+ public static final PrintStream out = new PrintStream(new AccessFrameOutputStream(), true, StandardCharsets.UTF_8);
+
+ private final StringBuilder buffer = new StringBuilder();
+ private static final Pattern ANSI_PATTERN = Pattern.compile("\u001B\\[([\\d;]*)m");
+
+ private AttributeSet activeStyle = defaultStyle(); // actual style to use
+ private boolean useDefault = true; // if true, keep using defaultStyle
+
+ @Override
+ public void write(int b) {
+ if (b == '\n') {
+ flushBuffer();
+ } else {
+ buffer.append((char) b);
+ }
+ }
+
+ @Override
+ public void write(byte[] b, int off, int len) {
+ buffer.append(new String(b, off, len, StandardCharsets.UTF_8));
+ if (buffer.toString().endsWith("\n")) {
+ flushBuffer();
+ }
+ }
+
+ @Override
+ public void flush() {
+ flushBuffer();
+ }
+
+ private void flushBuffer() {
+ String raw = buffer.toString();
+ buffer.setLength(0);
+
+ SwingUtilities.invokeLater(() -> {
+ Matcher matcher = ANSI_PATTERN.matcher(raw);
+ int last = 0;
+
+ while (matcher.find()) {
+ if (matcher.start() > last) {
+ String text = raw.substring(last, matcher.start());
+ append(text, activeStyle);
+ }
+
+ // Update current style
+ String codeStr = matcher.group(1);
+ if (codeStr.isEmpty() || codeStr.equals("0")) {
+ activeStyle = defaultStyle();
+ useDefault = true;
+ } else {
+ activeStyle = parseAnsiCode(codeStr);
+ useDefault = false;
+ }
+
+ last = matcher.end();
+ }
+
+ if (last < raw.length()) {
+ String text = raw.substring(last);
+ append(text, activeStyle);
+ }
+ });
+ }
+
+ private void append(String text, AttributeSet style) {
+ try {
+ StyledDocument doc = msgs.getStyledDocument();
+ doc.insertString(doc.getLength(), text, style);
+ msgs.setCaretPosition(doc.getLength());
+ } catch (BadLocationException ex) {
+ Logger.getLogger(AccessFrame.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+
+ private AttributeSet parseAnsiCode(String codeStr) {
+ SimpleAttributeSet attrs = new SimpleAttributeSet();
+
+ String[] codes = codeStr.split(";");
+ for (String part : codes) {
+ int code;
+ try {
+ code = Integer.parseInt(part);
+ } catch (NumberFormatException e) {
+ continue;
+ }
+
+ // Reset handled in flushBuffer, we don't return early here
+ if (ansiColorMap.containsKey(code)) {
+ StyleConstants.setForeground(attrs, ansiColorMap.get(code));
+ } else {
+ StyleConstants.setForeground(attrs, Color.WHITE);
+ }
+ }
+
+ // Set default background every time
+ StyleConstants.setBackground(attrs, Color.BLACK);
+
+ return attrs;
+ }
+
+ private static AttributeSet defaultStyle() {
+ SimpleAttributeSet def = new SimpleAttributeSet();
+ StyleConstants.setForeground(def, Color.WHITE);
+ StyleConstants.setBackground(def, Color.BLACK);
+ return def;
+ }
+
+ private static final Map ansiColorMap = new HashMap<>();
+
+ static {
+ ansiColorMap.put(30, Color.BLACK);
+ ansiColorMap.put(31, Color.RED);
+ ansiColorMap.put(32, Color.GREEN);
+ ansiColorMap.put(33, Color.YELLOW);
+ ansiColorMap.put(34, Color.BLUE);
+ ansiColorMap.put(35, Color.MAGENTA);
+ ansiColorMap.put(36, Color.CYAN);
+ ansiColorMap.put(37, Color.LIGHT_GRAY);
+ ansiColorMap.put(90, Color.DARK_GRAY);
+ ansiColorMap.put(91, new Color(255, 85, 85));
+ ansiColorMap.put(92, new Color(80, 255, 80));
+ ansiColorMap.put(93, new Color(255, 255, 85));
+ ansiColorMap.put(94, new Color(85, 85, 255));
+ ansiColorMap.put(95, new Color(255, 85, 255));
+ ansiColorMap.put(96, new Color(85, 255, 255));
+ ansiColorMap.put(97, Color.WHITE);
+ }
+ }
+
}
diff --git a/src/main/java/org/editor/CanvasFrame.java b/src/main/java/org/editor/CanvasFrame.java
index 52b4b9f..7315838 100644
--- a/src/main/java/org/editor/CanvasFrame.java
+++ b/src/main/java/org/editor/CanvasFrame.java
@@ -19,13 +19,20 @@
import java.awt.event.MouseMotionListener;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.List;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.plaf.basic.BasicGraphicsUtils;
+import org.piccode.ast.Ast;
import org.piccode.backend.Compiler;
import org.piccode.rt.Context;
+import org.piccode.rt.PiccodeException;
import org.piccode.rt.PiccodeNumber;
+import org.piccode.rt.PiccodeReturnException;
+import org.piccode.rt.PiccodeUnit;
+import org.piccode.rt.PiccodeValue;
/**
*
@@ -59,6 +66,10 @@ public class CanvasFrame extends JPanel implements MouseListener, MouseMotionLis
private static CanvasFrame _the = null;
private DockKey key = new DockKey("canvas");
+ public static String code = null;
+ public static String file = null;
+ public static boolean start = false;
+
private CanvasFrame() {
super(new BorderLayout());
this.setBackground(new Color(18, 18, 18));
@@ -104,29 +115,24 @@ protected void paintComponent(Graphics g) {
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.BLACK);
gfx = g2;
- if (!Compiler.main_loop.isEmpty()) {
- Context.top.pushStack();
- Context.top.putLocal("dt", new PiccodeNumber(String.format("%s", deltaTime)));
- try {
+ if (start && file != null && code != null) {
+ SwingUtilities.invokeLater(() -> {
AccessFrame.msgs.setText("");
- for (var stmt : Compiler.main_loop) {
- stmt.execute();
- }
- } catch (Exception e) {
- AccessFrame.writeError("ERROR: " + e.getMessage());
- System.out.println("ERROR: " + e.getMessage());
- e.printStackTrace();
- Compiler.main_loop.clear();
- } finally {
- Context.top.dropStackFrame();
- }
+ new Thread(() -> compileFrame())
+ .start();
+ });
+ start = false;
}
drawSelection(g2);
if (showHighlight) {
drawCrosshair(g2);
}
+ }
+ private PiccodeValue compileFrame() {
+ var result = Compiler.compile(file, code);
+ return result;
}
private void drawSelection(Graphics2D g2) {
@@ -316,7 +322,7 @@ private void drawCrosshair(Graphics2D g2) {
mouseX = snap(mouseX);
mouseY = snap(mouseY);
}
-
+
g2.setColor(Color.RED);
g2.drawLine(mouseX, 0, mouseX, getHeight()); // vertical
g2.drawLine(0, mouseY, getWidth(), mouseY); // horizontal
@@ -326,4 +332,5 @@ private void drawCrosshair(Graphics2D g2) {
g2.fillOval(mouseX - radius, mouseY - radius, radius * 2, radius * 2);
}
}
+
}
diff --git a/src/main/java/org/editor/CodeEditor.java b/src/main/java/org/editor/CodeEditor.java
index 035e6e2..d55e319 100644
--- a/src/main/java/org/editor/CodeEditor.java
+++ b/src/main/java/org/editor/CodeEditor.java
@@ -131,6 +131,17 @@ public void focusLost(FocusEvent e) {
this.add(sp, BorderLayout.CENTER);
}
+
+
+ public void setKey(String name) {
+ String tip = "Source code editor";
+ var icon = Icons.getIcon("code-file");
+ key = new DockKey(name, name, tip, icon);
+ key.setCloseEnabled(true);
+ key.setAutoHideEnabled(true);
+ this.putClientProperty("dockKey", key);
+ }
+
public boolean saveFile() {
if (isTmp) {
return saveFileAs();
diff --git a/src/main/java/org/editor/EditorWindow.java b/src/main/java/org/editor/EditorWindow.java
index f5e5fd8..be507e1 100644
--- a/src/main/java/org/editor/EditorWindow.java
+++ b/src/main/java/org/editor/EditorWindow.java
@@ -60,7 +60,6 @@
*/
public final class EditorWindow extends JFrame implements SearchListener {
- private static JTabbedPane tabs = new JTabbedPane();
private static HashMap tabEditors;
public static EditorWindow win = null;
public static JLabel current_file = new JLabel();
@@ -279,7 +278,11 @@ public static void addTab(Path path, Void e) {
} else {
// Add to same container as first editor
CodeEditor firstEditor = tabEditors.get(0);
- win.desk.createTab(firstEditor, editor, 1);
+ try {
+ win.desk.createTab(firstEditor, editor, 1);
+ } catch (NullPointerException npe) {
+ win.desk.createTab(win.dashboard, editor, 2);
+ }
}
}
@@ -297,7 +300,9 @@ public static CodeEditor getSelectedEditor() {
return editor;
}
}
- return tabEditors.values().toArray(CodeEditor[]::new)[0]; // fallback if nothing has focus
+ var values = tabEditors.values();
+ if (values.isEmpty()) return null;
+ return values.toArray(CodeEditor[]::new)[0]; // fallback if nothing has focus
}
private static void addPlusTab(JTabbedPane tabs) {
@@ -423,8 +428,8 @@ public static void saveAll() {
}
public static void setSeletedTabTitle(String title) {
- int index = tabs.getSelectedIndex();
- tabs.setTitleAt(index, title);
+ var ed = getSelectedEditor();
+ ed.setKey(title);
}
private JPanel makeCoolbar(int height, Action... actions) {
From 54613daa4854c55cd39637d63a40ae55d931f384 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 14:02:41 +0200
Subject: [PATCH 14/17] piccode: Setup the compiler
---
src/main/java/org/piccode/piccode/Piccode.java | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/piccode/piccode/Piccode.java b/src/main/java/org/piccode/piccode/Piccode.java
index 07dd3c7..9f2b0c1 100644
--- a/src/main/java/org/piccode/piccode/Piccode.java
+++ b/src/main/java/org/piccode/piccode/Piccode.java
@@ -1,8 +1,9 @@
package org.piccode.piccode;
+import org.editor.AccessFrame;
import org.editor.EditorWindow;
import org.piccode.backend.Compiler;
-
+import org.piccode.piccodescript.ErrorAsciiKind;
/**
*
@@ -10,8 +11,11 @@
*/
public class Piccode {
- public static void main(String[] args) {
- // Compiler.compile();
- EditorWindow.the();
- }
+ public static void main(String[] args) {
+ Compiler.exitOnError = false;
+ Compiler.errorKind = ErrorAsciiKind.EMACS_COMP_STYLE;
+ Compiler.out = AccessFrame.AccessFrameOutputStream.out;
+
+ EditorWindow.the();
+ }
}
From 20b8eccb695a407290673365d8ce4d7c95f58fc3 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 14:03:19 +0200
Subject: [PATCH 15/17] tokenmaker: Add missing tokens and remove old ones
---
.../piccode/tokenmaker/PiccodeScriptTokenMaker.java | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/main/java/org/piccode/tokenmaker/PiccodeScriptTokenMaker.java b/src/main/java/org/piccode/tokenmaker/PiccodeScriptTokenMaker.java
index edf5226..9a7e270 100644
--- a/src/main/java/org/piccode/tokenmaker/PiccodeScriptTokenMaker.java
+++ b/src/main/java/org/piccode/tokenmaker/PiccodeScriptTokenMaker.java
@@ -10,18 +10,18 @@
import org.fife.ui.rsyntaxtextarea.AbstractTokenMaker;
import org.fife.ui.rsyntaxtextarea.TokenMap;
+
/**
*
* @author hexaredecimal
*/
public class PiccodeScriptTokenMaker extends AbstractTokenMaker {
- private static List importants = List.of("pkg", "remote", "super", "true", "false");
+ private static List importants = List.of("true", "false", "await");
@Override
public Token getTokenList(Segment text, int initialTokenType, int startOffset) {
resetTokenList();
-
// Correct way to extract the exact text from the segment
String lineText = new String(text.array, text.offset, text.count);
CharStream input = CharStreams.fromString(lineText);
@@ -42,14 +42,13 @@ public Token getTokenList(Segment text, int initialTokenType, int startOffset) {
antlrToken = lexer.nextToken();
}
-
addNullToken(); // Always end the token chain
+
return firstToken;
}
private int mapAntlrToRSyntaxType(int antlrType, String text) {
switch (antlrType) {
- case PiccodeScriptLexer.FUNCTION:
case PiccodeScriptLexer.IF:
case PiccodeScriptLexer.ELSE:
case PiccodeScriptLexer.WHEN:
@@ -58,6 +57,8 @@ private int mapAntlrToRSyntaxType(int antlrType, String text) {
case PiccodeScriptLexer.IS:
case PiccodeScriptLexer.MODULE:
case PiccodeScriptLexer.DO:
+ case PiccodeScriptLexer.USE:
+ case PiccodeScriptLexer.IN:
return Token.RESERVED_WORD;
case PiccodeScriptLexer.STRING:
return Token.LITERAL_STRING_DOUBLE_QUOTE;
@@ -89,7 +90,7 @@ private int mapAntlrToRSyntaxType(int antlrType, String text) {
@Override
public TokenMap getWordsToHighlight() {
TokenMap tokenMap = new TokenMap();
- var keywords = List.of("function", "import", "let", "when", "is", "if", "else", "module", "do");
+ var keywords = List.of("import", "let", "in", "when", "is", "if", "else", "module", "do", "use");
for (var kw : keywords) {
tokenMap.put(kw, Token.RESERVED_WORD);
}
From c8ab299a69457bbe57b8ebf36be8d774129455c7 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 14:04:36 +0200
Subject: [PATCH 16/17] pom.xml: Add the compiler as a dependency
---
pom.xml | 40 +++++++++++++++++++---------------------
1 file changed, 19 insertions(+), 21 deletions(-)
diff --git a/pom.xml b/pom.xml
index 135d92b..79a9f33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,14 +11,22 @@
org.piccode.piccode.Piccode
+
+
+ jitpack.io
+ https://jitpack.io
+
+
-
- org.antlr
- antlr4-runtime
- 4.9.3
-
+
+ org.antlr
+ antlr4-runtime
+ 4.9.3
+
+
+
com.formdev
flatlaf
@@ -55,6 +63,12 @@
test
+
+ com.github.Glimmr-Lang
+ PiccodeScript
+ -SNAPSHOT
+
+
@@ -73,22 +87,6 @@
-
- org.antlr
- antlr4-maven-plugin
- 4.9.3
-
-
-
- antlr4
-
-
-
-
- src/main/java/org/piccode/antlr4
- true
-
-
org.apache.maven.plugins
From 4ff1a3babd945060fc912a2818727c16a1f08282 Mon Sep 17 00:00:00 2001
From: hexaredecimal
Date: Thu, 31 Jul 2025 14:10:17 +0200
Subject: [PATCH 17/17] Piccode: Remove the old stdlib and examples
---
examples/arrays.pics | 17 --------
examples/factorial.pics | 13 ------
examples/hello.pics | 5 ---
examples/showcase.pics | 43 --------------------
pkg/array/array.pics | 87 -----------------------------------------
pkg/color/color.pics | 11 ------
pkg/gfx/color.pics | 4 --
pkg/gfx/image.pics | 2 -
pkg/gfx/shapes.pics | 20 ----------
pkg/io/io.pics | 7 ----
pkg/math/math.pics | 46 ----------------------
pkg/number/number.pics | 28 -------------
pkg/res/resource.pics | 5 ---
pkg/string/string.pics | 30 --------------
pkg/tuple/tuple.pics | 33 ----------------
15 files changed, 351 deletions(-)
delete mode 100644 examples/arrays.pics
delete mode 100644 examples/factorial.pics
delete mode 100644 examples/hello.pics
delete mode 100644 examples/showcase.pics
delete mode 100644 pkg/array/array.pics
delete mode 100644 pkg/color/color.pics
delete mode 100644 pkg/gfx/color.pics
delete mode 100644 pkg/gfx/image.pics
delete mode 100644 pkg/gfx/shapes.pics
delete mode 100644 pkg/io/io.pics
delete mode 100644 pkg/math/math.pics
delete mode 100644 pkg/number/number.pics
delete mode 100644 pkg/res/resource.pics
delete mode 100644 pkg/string/string.pics
delete mode 100644 pkg/tuple/tuple.pics
diff --git a/examples/arrays.pics b/examples/arrays.pics
deleted file mode 100644
index 59eab0e..0000000
--- a/examples/arrays.pics
+++ /dev/null
@@ -1,17 +0,0 @@
-
-import pkg:array
-
-let numbers = [1,2,3]
-let strings = ["A", "B", "C"]
-
-let concat = Array.concat(numbers, strings)
-
-IO.println(concat)
-IO.println(concat.len)
-
-let collon_sep = Array.join(strings, ":")
-
-IO.println(collon_sep)
-
-let new = collon_sep:concat
-IO.println(new)
diff --git a/examples/factorial.pics b/examples/factorial.pics
deleted file mode 100644
index b82e222..0000000
--- a/examples/factorial.pics
+++ /dev/null
@@ -1,13 +0,0 @@
-
-import pkg:io
-
-function factorial(x=1) =
- if x <= 1 { 1 }
- else { x * factorial(x - 1) }
-
-let result = factorial(5)
-IO.println(result)
-
-let result = factorial(100)
-IO.println(result)
-
diff --git a/examples/hello.pics b/examples/hello.pics
deleted file mode 100644
index fec801c..0000000
--- a/examples/hello.pics
+++ /dev/null
@@ -1,5 +0,0 @@
-
-import pkg:io
-
-IO.println("Hello, world")
-
diff --git a/examples/showcase.pics b/examples/showcase.pics
deleted file mode 100644
index 51ce3f0..0000000
--- a/examples/showcase.pics
+++ /dev/null
@@ -1,43 +0,0 @@
-
-// Syntax showcase
-
-import pkg:io
-
-// TODO: import pkg:io { println }
-
-// Variable declaration
-let n = 5 * 2
-let song = "Feel good Inc"
-
-// The language supports the normal set of operators as in c.
-
-// Arrays
-let numbers = [1,2,3]
-let first = numbers.0
-let joined = first:numbers
-
-// Tuples
-let numbers = (1,2,3)
-let first = numbers.0
-
-
-// If-Else
-if 1 > 1 { numbers } else { joined }
-
-// When
-when numbers {
- is (a, b, c) -> a + " " + b + " " + c
- else -> "Not a match""
-}
-
-// Functions
-function add(x=1, y=1) = x + y
-
-let result = add(y=2)
-IO.println(result)
-
-let answer = 10 |> add(10) |> add(10)
-
-IO.println(answer)
-
-
diff --git a/pkg/array/array.pics b/pkg/array/array.pics
deleted file mode 100644
index 18bde83..0000000
--- a/pkg/array/array.pics
+++ /dev/null
@@ -1,87 +0,0 @@
-
-module Array {
-
- function concat(a=[], b=[]) =
- when a {
- is [] -> b
- is x:rest -> x : concat(rest, b)
- }
-
- function toString(arr=[]) = pic_nat_array_tostring(arr)
-
- function join(xs=[], sep=",") =
- when xs {
- is [] -> ""
- is [x] -> x
- is x:rest -> x + sep + join(rest, sep)
- }
-
- function zip(xs=[], ys=[]) =
- when [xs, ys] {
- is [[], _] -> []
- is [_, []] -> []
- is [x:xs1, y:ys1] -> [ [x, y] ] : zip(xs1, ys1)
- }
-
- function map(xs=[], f) =
- when xs{
- is [] -> []
- is x:rest -> f(x) : map(rest, f)
- }
-
- function filter(xs=[], pred) =
- when xs {
- is [] -> []
- is x:rest ->
- if pred(x) {
- x : filter(rest, pred)
- } else {
- filter(rest, pred)
- }
- }
-
- function reduce(xs=[], f, acc) =
- when xs {
- is [] -> acc
- is x:rest -> reduce(rest, f, f(acc, x))
- }
-
- function length(xs=[]) = xs.len
-
- function reverse(xs=[]) = Array.reduce(xs, |acc, x| -> x : acc, [])
-
- function flatMap(xs=[], f) = Array.reduce(xs, |acc, x| -> concat(acc, f(x)), [])
-
- function take(xs=[], n=0) =
- if n <= 0 {
- []
- } else {
- when xs {
- is [] -> []
- is x:rest -> x : take(rest, n - 1)
- }
- }
-
- function drop(xs=[], n=0) =
- if n <= 0 {
- xs
- } else {
- when xs {
- is [] -> []
- is _:rest -> drop(rest, n - 1)
- }
- }
-
- function contains(xs=[], value) =
- when xs {
- is [] -> false
- is x:rest -> if x == value { true } else { contains(rest, value) }
- }
-
- function indexOf(xs=[], value, i=0) =
- when xs {
- is [] -> -1
- is x:rest -> if x == value { i } else { indexOf(rest, value, i + 1) }
- }
-
-}
diff --git a/pkg/color/color.pics b/pkg/color/color.pics
deleted file mode 100644
index 6975ab0..0000000
--- a/pkg/color/color.pics
+++ /dev/null
@@ -1,11 +0,0 @@
-
-module Color {
-
- function new_a(r=255, g=255, b=255, a=255) = pic_nat_createcolora(r, g, b, a)
- function new(r=255, g=255, b=255) = pic_nat_createcolora(r, g, b, 255)
-
- let RED = pic_nat_createcolora(255, 0, 0, 255)
- let GREEN = pic_nat_createcolora(0, 255, 0, 255)
- let BLUE = pic_nat_createcolora(0, 0, 255, 255)
-
-}
diff --git a/pkg/gfx/color.pics b/pkg/gfx/color.pics
deleted file mode 100644
index db68475..0000000
--- a/pkg/gfx/color.pics
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-function color(rgb=0) = pic_nat_color(rgb)
-
diff --git a/pkg/gfx/image.pics b/pkg/gfx/image.pics
deleted file mode 100644
index 5204dcb..0000000
--- a/pkg/gfx/image.pics
+++ /dev/null
@@ -1,2 +0,0 @@
-
-function drawImage(id=0, x=0, y=0, w=10, h=10) = pic_nat_drawimage(id, x, y, w, h)
diff --git a/pkg/gfx/shapes.pics b/pkg/gfx/shapes.pics
deleted file mode 100644
index 2882496..0000000
--- a/pkg/gfx/shapes.pics
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-function drawLine(x1=0,y1=0,x2=1,y2=1) = pic_nat_drawline(x1, y1, x2, y2)
-
-function drawRect(x=0, y=0, w=1, h=1) = pic_nat_drawrect(x, y, w, h)
-function drawRectA(pos=[0,0], size=[0,0]) = pic_nat_drawrect(pos.0, pos.1, size.0, size.1)
-
-function drawSquare(x=0, y=0, side=0) = pic_nat_drawrect(x, y, side)
-function drawSquareA(pos=[0,0], side=0) = pic_nat_drawrect(pos.0, pos.1, side)
-
-function drawOval(x=0, y=0, w=1, h=1) = pic_nat_drawoval(x, y, w, h)
-
-function drawString(str="", x=0, y=0) = pic_nat_drawstring(str, x,y)
-
-function drawPolygon(xarr=[], yarr=[]) = pic_nat_drawpolygon(xarr, yarr)
-
-function drawPolyline(xarr=[], yarr=[]) = pic_nat_drawpolyline(xarr, yarr)
-
-
-
diff --git a/pkg/io/io.pics b/pkg/io/io.pics
deleted file mode 100644
index 2fc1d1f..0000000
--- a/pkg/io/io.pics
+++ /dev/null
@@ -1,7 +0,0 @@
-
-module IO {
- function print(msg="") = pic_nat_print(msg)
- function println(msg="") = pic_nat_print(msg)
- function read(msg="Enter text") = pic_nat_read(msg)
-}
-
diff --git a/pkg/math/math.pics b/pkg/math/math.pics
deleted file mode 100644
index e704b6c..0000000
--- a/pkg/math/math.pics
+++ /dev/null
@@ -1,46 +0,0 @@
-
-module Math {
-
- function sin(a=0) = pic_nat_sin(a)
- function cos(a=0) = pic_nat_cos(a)
- function tan(a=0) = pic_nat_tan(a)
-
- function sinh(a=0) = pic_nat_sinh(a)
- function cosh(a=0) = pic_nat_cosh(a)
- function tanh(a=0) = pic_nat_tanh(a)
-
- function asin(a=0) = pic_nat_asin(a)
- function acos(a=0) = pic_nat_acos(a)
- function atan(a=0) = pic_nat_atan(a)
-
- function abs(a=0) = pic_nat_abs(a)
- function floor(a=0) = pic_nat_floor(a)
- function ceil(a=0) = pic_nat_ceil(a)
-
- function pow(a=0, b=0) = pic_nat_pow(a, b)
-
- function clamp(a=0, low=-1, high=1) =
- if a < low { low }
- else {
- if a > high { high }
- else { a }
- }
-
- function max(a=0, b=0) = if a > b { a } else { b }
- function min(a=0, b=0) = if a < b { a } else { b }
-
- function degToRad(deg=0) = deg * (3.141592653589793 / 180)
- function radToDeg(rad=0) = rad * (180 / 3.141592653589793)
-
- function isEven(n=0) = (n % 2) == 0
- function isOdd(n=0) = (n % 2) != 0
-
- function factorial(n=0) =
- if n <= 1 { 1 }
- else { n * factorial(n - 1) }
-
-}
-
-
-
-
diff --git a/pkg/number/number.pics b/pkg/number/number.pics
deleted file mode 100644
index 633dcb2..0000000
--- a/pkg/number/number.pics
+++ /dev/null
@@ -1,28 +0,0 @@
-module Number {
-
- function isZero(n=0) = n == 0
- function isPositive(n=0) = n > 0
- function isNegative(n=0) = n < 0
- function isEven(n=0) = (n % 2) == 0
- function isOdd(n=0) = (n % 2) != 0
-
- function toString(n=0) = n + ""
-
- function add(a=0, b=0) = a + b
- function sub(a=0, b=0) = a - b
- function mul(a=0, b=0) = a * b
- function div(a=0, b=1) = a / b
- function mod(a=0, b=1) = a % b
- function pow(a=0, b=0) = pic_nat_pow(a, b)
-
- function inc(n=0) = n + 1
- function dec(n=0) = n - 1
-
- function and(a=0, b=0) = a & b
- function or(a=0, b=0) = a | b
-
- function shl(a=0, b=0) = a << b
- function shr(a=0, b=0) = a >> b
-
-
-}
diff --git a/pkg/res/resource.pics b/pkg/res/resource.pics
deleted file mode 100644
index d7f5d06..0000000
--- a/pkg/res/resource.pics
+++ /dev/null
@@ -1,5 +0,0 @@
-
-module Resources {
- function loadPaintResource(src="") = pic_nat_loadpaint(src)
-}
-
diff --git a/pkg/string/string.pics b/pkg/string/string.pics
deleted file mode 100644
index 4efaa07..0000000
--- a/pkg/string/string.pics
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-module String {
- function format(fmt="", args=[]) = pic_nat_stringformat(fmt, args)
- function trim(value="") = pic_nat_stringtrim(value)
- function uppercase(value="") = pic_nat_stringuppercase(value)
- function lowercase(value="") = pic_nat_stringlowercase(value)
- function length(xs="")= xs.len
- function split(value="", delim="") = pic_nat_stringsplit(value, delim)
-
- function repeat(str="", n=0) =
- if n <= 0 { "" }
- else { str + repeat(str, n - 1) }
-
- function padLeft(str="", total=0, char=" ") = do {
- let padCount = total - String.length(str)
- if padCount <= 0 { str }
- else { repeat(char, padCount) + str }
- }
-
- function padRight(str="", total=0, char=" ") = do {
- let padCount = total - String.length(str)
- if padCount <= 0 { str }
- else { str + repeat(char, padCount) }
- }
-
-
-}
-
-
diff --git a/pkg/tuple/tuple.pics b/pkg/tuple/tuple.pics
deleted file mode 100644
index 3d82add..0000000
--- a/pkg/tuple/tuple.pics
+++ /dev/null
@@ -1,33 +0,0 @@
-
-module Tuple {
-
- function size(tup=(0, 0)) = pic_nat_tuplesize(tup)
-
- function toArray(tup=(0, 0)) = pic_nat_tupletoarray(tup)
-
- function map(tup=(0, 0), f) =
- when tup {
- is (a, b) -> (f(a), f(b))
- }
-
- function zipWith(t1=(0, 0), t2=(0, 0), f) =
- when [t1, t2] {
- is [(a1, b1), (a2, b2)] -> (f(a1, a2), f(b1, b2))
- }
-
- function swap(tup=(0, 0)) =
- when tup {
- is (a, b) -> (b, a)
- }
-
- function equals(t1=(0, 0), t2=(0, 0)) =
- when [t1, t2] {
- is [(a1, b1), (a2, b2)] -> (a1 == a2 and b1 == b2)
- }
-
- function toString(tup=(0, 0)) =
- when tup {
- is (a, b) -> "(" + a + ", " + b + ")"
- }
-
-}
\ No newline at end of file