Browse Source

bugfixes with mostly wrong function names

Kajetan Johannes Hammerle 7 years ago
parent
commit
7e799958b1

+ 1 - 7
nbproject/private/private.xml

@@ -2,12 +2,6 @@
 <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
 <project-private xmlns="http://www.netbeans.org/ns/project-private/1">
     <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
     <editor-bookmarks xmlns="http://www.netbeans.org/ns/editor-bookmarks/2" lastBookmarkId="0"/>
     <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
     <open-files xmlns="http://www.netbeans.org/ns/projectui-open-files/2">
-        <group>
-            <file>file:/home/kajetan/Dropbox/Projekte/Informatik/SnuviScript/src/me/hammerle/code/LineCompiler.java</file>
-            <file>file:/home/kajetan/Dropbox/Projekte/Informatik/SnuviScript/src/me/hammerle/code/Code.java</file>
-            <file>file:/home/kajetan/Dropbox/Projekte/Informatik/SnuviScript/src/me/hammerle/code/Syntax.java</file>
-            <file>file:/home/kajetan/Dropbox/Projekte/Informatik/SnuviScript/src/me/hammerle/code/SnuviParser.java</file>
-            <file>file:/home/kajetan/Dropbox/Projekte/Informatik/SnuviScript/src/me/hammerle/snuviscript/SnuviScript.java</file>
-        </group>
+        <group/>
     </open-files>
     </open-files>
 </project-private>
 </project-private>

+ 25 - 7
src/me/hammerle/code/Code.java

@@ -183,22 +183,26 @@ public class Code
         return -1;
         return -1;
     }
     }
 
 
-    public static int countChar(char find, int end, StringBuilder code)
+    public static int countChar(char find, int start, int end, StringBuilder code)
     {
     {
         int counter = 0;
         int counter = 0;
-        int pos = 0;
         end = Math.min(end, code.length());
         end = Math.min(end, code.length());
-        while(pos < end)
+        while(start < end)
         {
         {
-            if(code.charAt(pos) == find)
+            if(code.charAt(start) == find)
             {
             {
                 counter++;
                 counter++;
             }
             }
-            pos++;
+            start++;
         }
         }
         return counter;
         return counter;
     }
     }
     
     
+    public static int countChar(char find, int end, StringBuilder code)
+    {
+        return countChar(find, 0, end, code);
+    }
+    
     @SuppressWarnings("")
     @SuppressWarnings("")
     private static String removeNonSyntax(String s)
     private static String removeNonSyntax(String s)
     {
     {
@@ -219,10 +223,22 @@ public class Code
         return sb.toString();
         return sb.toString();
     }
     }
     
     
+    private static String getCommentString(int start, int end, StringBuilder code)
+    {
+        int i = countChar('\n', start, end, code);
+        StringBuilder sb = new StringBuilder();
+        for(; i > 0; i--)
+        {
+            sb.append('\n');
+        }
+        return sb.toString();
+    }
+    
     private static void removeComments(StringBuilder sb)
     private static void removeComments(StringBuilder sb)
     {
     {
         int old = 0;
         int old = 0;
         int pos;
         int pos;
+        String replace;
         while(true)
         while(true)
         {
         {
             old = findSyntaxIgnoreString("/*", sb, old);
             old = findSyntaxIgnoreString("/*", sb, old);
@@ -235,7 +251,8 @@ public class Code
             {
             {
                 throw new PreScriptException(scriptName, countChar('\n', old, sb), "/* without */");
                 throw new PreScriptException(scriptName, countChar('\n', old, sb), "/* without */");
             }
             }
-            sb.delete(old, pos + 2);
+            replace = getCommentString(old, pos + 2, sb);
+            sb.replace(old, pos + 2, replace);
         }
         }
         old = 0;
         old = 0;
         while(true)
         while(true)
@@ -251,7 +268,8 @@ public class Code
                 sb.delete(old, sb.length());
                 sb.delete(old, sb.length());
                 break;
                 break;
             }
             }
-            sb.delete(old, pos + 1);
+            replace = getCommentString(old, pos + 1, sb);
+            sb.replace(old, pos + 1, replace);
         }
         }
     }
     }
     
     

+ 5 - 5
src/me/hammerle/code/LineCompiler.java

@@ -35,7 +35,7 @@ public class LineCompiler
     
     
     private boolean isAllowedChar(char c)
     private boolean isAllowedChar(char c)
     {
     {
-        return Character.isLetterOrDigit(c) || c == '.' || c == '_' || c == '#';
+        return Character.isLetterOrDigit(c) || c == '.' || c == '_' || c == '#' || c == '$';
     }
     }
     
     
     public void compile(ArrayList<Code> co, HashMap<String, String> strings)
     public void compile(ArrayList<Code> co, HashMap<String, String> strings)
@@ -56,7 +56,7 @@ public class LineCompiler
                 syntax = getSyntax(line, i);
                 syntax = getSyntax(line, i);
                 if(syntax == Syntax.UNKNOWN)
                 if(syntax == Syntax.UNKNOWN)
                 {
                 {
-                    throw new PreScriptException(scriptName, realLine, "unexpected character");
+                    throw new PreScriptException(scriptName, realLine, "unexpected character '" + c + "'");
                 }
                 }
                 else if(syntax.isIncOrDec())
                 else if(syntax.isIncOrDec())
                 {
                 {
@@ -66,7 +66,7 @@ public class LineCompiler
                         change.function = "array." + syntax.getFunction();
                         change.function = "array." + syntax.getFunction();
                     }
                     }
                 }
                 }
-                s = line.substring(i + 1, old);
+                s = line.substring(i + 1, old).toLowerCase();
                 if(!s.isEmpty())
                 if(!s.isEmpty())
                 {
                 {
                     Stack<Syntax> stack = syntaxStack.peek();
                     Stack<Syntax> stack = syntaxStack.peek();
@@ -108,7 +108,7 @@ public class LineCompiler
                         old--;
                         old--;
                     }
                     }
                     old++;
                     old++;
-                    s = line.substring(old, pos + 1);
+                    s = line.substring(old, pos + 1).toLowerCase();
                     if(syntax.isArray())
                     if(syntax.isArray())
                     {
                     {
                         co.add(new Code(s, realLine, layer));
                         co.add(new Code(s, realLine, layer));
@@ -165,7 +165,7 @@ public class LineCompiler
             }
             }
         }
         }
         
         
-        s = line.substring(0, old);
+        s = line.substring(0, old).toLowerCase();
         if(!s.isEmpty())
         if(!s.isEmpty())
         {
         {
             co.add(new Code(s, realLine, layer));
             co.add(new Code(s, realLine, layer));

+ 27 - 34
src/me/hammerle/code/SnuviParser.java

@@ -116,39 +116,29 @@ public class SnuviParser
         // bit
         // bit
         // ------------------------------------------------------------------------------- 
         // ------------------------------------------------------------------------------- 
         
         
-        registerFunction("bit.rightshiftn", (args, qd) -> 
-                ((Fraction) args[0]).rightShiftNumerator(getInt(args[1])));
-        registerFunction("bit.rightshiftd", (args, qd) -> 
-                ((Fraction) args[0]).rightShiftDenominator(getInt(args[1])));
-        registerFunction("bit.leftshiftn", (args, qd) -> 
-                ((Fraction) args[0]).leftShiftNumerator(getInt(args[1])));
-        registerFunction("bit.leftshiftd", (args, qd) -> 
-                ((Fraction) args[0]).leftShiftDenominator(getInt(args[1])));
-        registerFunction("bit.and", (args, qd) -> 
+        registerFunction(">>", (args, qd) -> 
+                ((Fraction) args[0]).rightShift(getInt(args[1])));
+        registerFunction("<<", (args, qd) -> 
+                ((Fraction) args[0]).leftShift(getInt(args[1])));
+        registerFunction("&", (args, qd) -> 
                 ((Fraction) args[0]).and((Fraction) args[1]));
                 ((Fraction) args[0]).and((Fraction) args[1]));
-        registerFunction("bit.or", (args, qd) -> 
+        registerFunction("|", (args, qd) -> 
                 ((Fraction) args[0]).or((Fraction) args[1]));
                 ((Fraction) args[0]).or((Fraction) args[1]));
-        registerFunction("bit.xor", (args, qd) -> 
+        registerFunction("^", (args, qd) -> 
                 ((Fraction) args[0]).xor((Fraction) args[1]));
                 ((Fraction) args[0]).xor((Fraction) args[1]));
-        registerFunction("bit.invert", (args, qd) -> 
-                ((Fraction) args[0]).invert());
-        registerFunction("bit.setn", (args, qd) -> 
-                ((Fraction) args[0]).setNumeratorBit(getInt(args[1])));
-        registerFunction("bit.setd", (args, qd) -> 
-                ((Fraction) args[0]).setDenominatorBit(getInt(args[1])));
-        registerFunction("bit.unsetn", (args, qd) -> 
-                ((Fraction) args[0]).unsetNumeratorBit(getInt(args[1])));
-        registerFunction("bit.unsetd", (args, qd) -> 
-                ((Fraction) args[0]).unsetDenominatorBit(getInt(args[1])));
-        registerFunction("bit.getn", (args, qd) -> 
-                ((Fraction) args[0]).getNumeratorBit(getInt(args[1])));
-        registerFunction("bit.getd", (args, qd) -> 
-                ((Fraction) args[0]).getDenominatorBit(getInt(args[1])));
+        registerFunction("~", (args, qd) -> 
+                ((Fraction) args[0]).invertBits());
+        registerFunction("bit.set", (args, qd) -> 
+                ((Fraction) args[0]).setBit(getInt(args[1])));
+        registerFunction("bit.unset", (args, qd) -> 
+                ((Fraction) args[0]).unsetBit(getInt(args[1])));
+        registerFunction("bit.get", (args, qd) -> 
+                ((Fraction) args[0]).getBit(getInt(args[1])));
         
         
         // -------------------------------------------------------------------------------    
         // -------------------------------------------------------------------------------    
         // math
         // math
         // -------------------------------------------------------------------------------    
         // -------------------------------------------------------------------------------    
-        registerFunction("math.mod", (args, sc) -> 
+        registerFunction("%", (args, sc) -> 
                 new Fraction(getInt(args[0]) % getInt(args[1])));
                 new Fraction(getInt(args[0]) % getInt(args[1])));
         registerFunction("math.abs", (args, sc) -> 
         registerFunction("math.abs", (args, sc) -> 
                 ((Fraction) args[0]).abs());
                 ((Fraction) args[0]).abs());
@@ -596,19 +586,19 @@ public class SnuviParser
                 sc.jump()); 
                 sc.jump()); 
         registerFunction("==", (args, sc) -> 
         registerFunction("==", (args, sc) -> 
                 isEqual(args));
                 isEqual(args));
-        registerFunction("less", (args, sc) -> 
+        registerFunction("<", (args, sc) -> 
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) < 0);
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) < 0);
-        registerFunction("greater", (args, sc) -> 
+        registerFunction(">", (args, sc) -> 
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) > 0);
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) > 0);
-        registerFunction("notequal", (args, sc) -> 
+        registerFunction("!=", (args, sc) -> 
                 !isEqual(args));
                 !isEqual(args));
-        registerFunction("lessequal", (args, sc) -> 
+        registerFunction("<=", (args, sc) -> 
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) <= 0);
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) <= 0);
-        registerFunction("greaterequal", (args, sc) -> 
+        registerFunction(">=", (args, sc) -> 
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) >= 0);
                 ((Fraction) args[0]).compareTo((Fraction) args[1]) >= 0);
-        registerFunction("invert", (args, sc) -> 
+        registerFunction("!", (args, sc) -> 
                 !((boolean) args[0]));
                 !((boolean) args[0]));
-        registerFunction("and", (args, sc) -> 
+        registerFunction("&&", (args, sc) -> 
                 Arrays.stream(args).allMatch(s -> s.equals(true)));
                 Arrays.stream(args).allMatch(s -> s.equals(true)));
         registerFunction("||", (args, sc) -> 
         registerFunction("||", (args, sc) -> 
                 Arrays.stream(args).anyMatch(s -> s.equals(true)));
                 Arrays.stream(args).anyMatch(s -> s.equals(true)));
@@ -762,6 +752,7 @@ public class SnuviParser
         }
         }
     }
     }
     
     
+    @SuppressWarnings(value = "unchecked")
     public <T extends Script> T startScript(Class<T> c, String scriptName, String code, boolean b, Object... o)
     public <T extends Script> T startScript(Class<T> c, String scriptName, String code, boolean b, Object... o)
     { 
     { 
         try
         try
@@ -966,6 +957,7 @@ public class SnuviParser
         }
         }
     }
     }
     
     
+    @SuppressWarnings(value = "unchecked")
     private void writeFile(Object[] args, Script sc)
     private void writeFile(Object[] args, Script sc)
     {
     {
         try
         try
@@ -986,7 +978,8 @@ public class SnuviParser
                     throw new FileIOException(ex.getMessage());
                     throw new FileIOException(ex.getMessage());
                 }
                 }
             }
             }
-            Files.write(Paths.get(f.toURI()), (List) args[1], StandardCharsets.UTF_8);
+            Files.write(Paths.get(f.toURI()), ((List<Object>) args[1])
+                    .stream().map(o -> String.valueOf(o)).collect(Collectors.toList()), StandardCharsets.UTF_8);
         }
         }
         catch(UnsupportedOperationException | SecurityException | IOException ex)
         catch(UnsupportedOperationException | SecurityException | IOException ex)
         {
         {

+ 30 - 43
src/me/hammerle/math/Fraction.java

@@ -598,81 +598,68 @@ public final class Fraction extends Number implements Comparable<Fraction>
     // bit stuff
     // bit stuff
     // -------------------------------------------------------------------------
     // -------------------------------------------------------------------------
     
     
-    public Fraction rightShiftNumerator(int times)
+    private void noFraction()
     {
     {
-        return new Fraction(numerator >> times, denominator);
-    }
-    
-    public Fraction rightShiftDenominator(int times)
-    {
-        return new Fraction(numerator, denominator >> times);
+        if(denominator != 1 && numerator != 0)
+        {
+            throw new UnsupportedOperationException("the number must not be a fraction");
+        }
     }
     }
     
     
-    public Fraction leftShiftNumerator(int times)
+    public Fraction rightShift(int times)
     {
     {
-        return new Fraction(numerator << times, denominator);
+        noFraction();
+        return new Fraction(numerator >> times);
     }
     }
     
     
-    public Fraction leftShiftDenominator(int times)
+    public Fraction leftShift(int times)
     {
     {
-        return new Fraction(numerator, denominator << times);
+        noFraction();
+        return new Fraction(numerator << times);
     }
     }
     
     
     public Fraction and(Fraction f)
     public Fraction and(Fraction f)
     {
     {
-        return new Fraction(numerator & f.numerator, denominator & f.denominator);
+        noFraction();
+        return new Fraction(numerator & f.numerator);
     }
     }
     
     
     public Fraction or(Fraction f)
     public Fraction or(Fraction f)
     {
     {
-        return new Fraction(numerator | f.numerator, denominator | f.denominator);
+        noFraction();
+        return new Fraction(numerator | f.numerator);
     }
     }
     
     
     public Fraction xor(Fraction f)
     public Fraction xor(Fraction f)
     {
     {
-        return new Fraction(numerator ^ f.numerator, denominator ^ f.denominator);
-    }
-    
-    public Fraction invertNumerator()
-    {
-        return new Fraction(~numerator, denominator);
-    }
-    
-    public Fraction invertDenominator()
-    {
-        return new Fraction(numerator, ~denominator);
+        noFraction();
+        return new Fraction(numerator ^ f.numerator);
     }
     }
     
     
-    public Fraction setNumeratorBit(int n)
+    public Fraction invertBits()
     {
     {
-        return new Fraction(numerator | 1 << n, denominator);
+        noFraction();
+        return new Fraction(~numerator);
     }
     }
-    
-    public Fraction setDenominatorBit(int n)
-    {
-        return new Fraction(numerator, denominator | 1 << n);
-    }
-    
-    public Fraction unsetNumeratorBit(int n)
+
+    public Fraction setBit(int n)
     {
     {
-        return new Fraction(numerator & ~(1 << n), denominator);
+        noFraction();
+        return new Fraction(numerator | 1 << n);
     }
     }
     
     
-    public Fraction unsetDenominatorBit(int n)
+    public Fraction unsetBit(int n)
     {
     {
-        return new Fraction(numerator, denominator & ~(1 << n));
-    }
+        noFraction();
+        return new Fraction(numerator & ~(1 << n));
+    }   
     
     
-    public boolean getNumeratorBit(int n)
+    public boolean getBit(int n)
     {
     {
+        noFraction();
         return (numerator & (1 << n)) != 0;
         return (numerator & (1 << n)) != 0;
     }
     }
     
     
-    public boolean getDenominatorBit(int n)
-    {
-        return (denominator & (1 << n)) != 0;
-    }
-    
     // -------------------------------------------------------------------------
     // -------------------------------------------------------------------------
     // number stuff
     // number stuff
     // ------------------------------------------------------------------------- 
     // ------------------------------------------------------------------------- 

+ 4 - 2
src/me/hammerle/snuviscript/SnuviScript.java

@@ -24,8 +24,9 @@ public class SnuviScript
             @Override
             @Override
             public void printException(Exception ex, String function, String s, int line) 
             public void printException(Exception ex, String function, String s, int line) 
             {
             {
-                System.out.println("Exception " + ex + " " + s + " " + line);
+                System.out.println("Exception " + ex);
                 System.out.println("function " + function);
                 System.out.println("function " + function);
+                System.out.println("Line: " + line);
             }
             }
 
 
             @Override
             @Override
@@ -131,9 +132,10 @@ public class SnuviScript
             //String s = "array[2 + 3] = 5;";
             //String s = "array[2 + 3] = 5;";
             //String s = "a(1+b(2), c(3) + 3, d(7,e(10 + 3)))";
             //String s = "a(1+b(2), c(3) + 3, d(7,e(10 + 3)))";
             //String s = "++wusi[1];";
             //String s = "++wusi[1];";
-            String s = "array.new(\"wusi\", 10); wusi[2] = 3; wusi[2]++; print(wusi[2]);";
+            //String s = "array.new(\"wusi\", 10); wusi[2] = 3; wusi[2]++; print(wusi[2]);";
         
         
             //String s = "print(1 + get() == 1);";
             //String s = "print(1 + get() == 1);";
+            String s = "hallo = 1; print(5 % hallo); print(0);";
             System.out.println(s);
             System.out.println(s);
             System.out.println();
             System.out.println();
             //String s = "i = 0; while(i++ < 10) { debug(i);}";
             //String s = "i = 0; while(i++ < 10) { debug(i);}";