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 visitor) { + if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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 visitor) { - if ( visitor instanceof PiccodeScriptVisitor ) return ((PiccodeScriptVisitor)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