Changeset 4047


Ignore:
Timestamp:
Dec 17, 2008, 6:11:39 PM (12 years ago)
Author:
yura
Message:
  • Indentifier - only latin letters.
  • RefalException? returns just text (not formatted representation)
Location:
to-imperative
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • to-imperative/branches/java_expr_without_holes/Expr.java

    r4017 r4047  
    296296    }
    297297
     298    private static boolean isIdentifierStartChar (char c) {
     299        return ('A' <= c && c <= 'Z') || c == '_';
     300    }
     301
     302    private static boolean isIdentifierInternalChar (char c) {
     303        return isIdentifierStartChar(c) || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9') || (c == '.');
     304    }
     305
     306    private static boolean isIdentifier (String str) {
     307        if (str.length() == 0)
     308            return false;
     309        if (!isIdentifierStartChar(str.charAt(0)))
     310            return false;
     311        for (int i = 1, l = str.length(); i < l; i++)
     312            if (!isIdentifierInternalChar(str.charAt(i)))
     313                return false;
     314        return true;
     315    }
     316
     317    private static void convertCharacter (StringBuffer strBuf, char c) {
     318        switch (c) {
     319            case '\t': strBuf.append("\\t"); break;
     320            case '\r': strBuf.append("\\r"); break;
     321            case '\n': strBuf.append("\\n"); break;
     322            case '\\': strBuf.append("\\\\"); break;
     323            case '\'': strBuf.append("\\\'"); break;
     324            case '\"': strBuf.append("\\\""); break;
     325            default: strBuf.append(c); break;
     326        }
     327    }
     328
    298329    public String toString () {
    299330        StringBuffer strBuf = new StringBuffer();
     
    302333    }
    303334
    304     private void toString (StringBuffer strBuf) {
    305         boolean chars = false;
    306         boolean isNotFirst = false;
     335    private void toString (StringBuffer strBuf) {
     336        boolean chars = false, isNotFirst = false;
    307337        for (Comparable<?> term : this) {
    308338            if (term instanceof Character) {
     
    310340                    if (isNotFirst)
    311341                        strBuf.append(' ');
    312                     strBuf.append('\''); 
     342                    strBuf.append('\'');
    313343                    chars = true;
    314344                    isNotFirst = true;
    315345                }
    316                 switch (((Character) term).charValue()) {
    317                     case '\t': strBuf.append("\\t"); continue;
    318                     case '\r': strBuf.append("\\r"); continue;
    319                     case '\n': strBuf.append("\\n"); continue;
    320                     case '\\': strBuf.append("\\\\"); continue;
    321                     case '\'': strBuf.append("\\\'"); continue;
    322                     case '\"': strBuf.append("\\\""); continue;
    323                     default: strBuf.append(term); continue;
    324                 }
     346                convertCharacter(strBuf, (Character) term);
     347                continue;
    325348            }
    326349            if (chars) {
     
    340363                else {
    341364                    strBuf.append('"');
    342                     for (int i = 0; i < w.length(); i++) {
    343                         char c = w.charAt(i);
    344                         switch (c) {
    345                             case '\t': strBuf.append("\\t"); continue;
    346                             case '\r': strBuf.append("\\r"); continue;
    347                             case '\n': strBuf.append("\\n"); continue;
    348                             case '\\': strBuf.append("\\\\"); continue;
    349                             case '\'': strBuf.append("\\\'"); continue;
    350                             case '\"': strBuf.append("\\\""); continue;
    351                             default: strBuf.append(c); continue;
    352                         }
    353                     }
     365                    for (int i = 0; i < w.length(); i++)
     366                        convertCharacter(strBuf, w.charAt(i));
    354367                    strBuf.append('"');
    355368                }
     
    374387                ((Expr) term).toChars(strBuf);
    375388                strBuf.append(')');
    376             } else if (term instanceof Reference && ((Reference) term).object instanceof org.refal.plus.objects.String)
    377                 ((org.refal.plus.objects.String) ((Reference) term).object).toExpr().toChars(strBuf);
     389            } else if (Symbol.isObject(term) instanceof org.refal.plus.objects.String)
     390                ((org.refal.plus.objects.String) Symbol.isObject(term)).toExpr().toChars(strBuf);
    378391            else
    379392                strBuf.append(term.toString());
    380     }
    381 
    382     private static boolean isIdentifier (String str) {
    383         if (str.length() == 0)
    384             return false;
    385         char c = str.charAt(0);
    386         if (!Character.isUpperCase(c) && c != '_')
    387             return false;
    388         for (int i = 1; i < str.length(); i++) {
    389             c = str.charAt(i);
    390             if (!Character.isLetterOrDigit(c) && c != '_' && c != '.')
    391                 return false;
    392         }
    393         return true;
    394393    }
    395394
     
    484483        }
    485484    }
    486    
     485
    487486    public static Concatenator getConcatenator () {
    488487        return new ListConcatenator();
     
    492491        return new InplaceConcatenator(initialCapacity);
    493492    }
    494    
     493
    495494    public interface Concatenator {
    496495        public Concatenator toRight (Comparable<?> obj);
     
    512511            }
    513512        }
    514        
     513
    515514        public ListConcatenator () {
    516515            list = new ArrayList<Object>(16);
     
    525524        public ListConcatenator toRight (Expr expr) {
    526525            if (expr.length == 0)
    527                 return this; 
     526                return this;
    528527            list.add(expr);
    529528            length += expr.length;
     
    550549        private Comparable<?>[] terms;
    551550        private int length;
    552        
     551
    553552        public InplaceConcatenator (int initialCapacity) {
    554553            assert initialCapacity >= 0;
     
    571570            assert expr != null;
    572571            if (expr.length == 0)
    573                 return this; 
     572                return this;
    574573            int newLength = length + expr.length;
    575574            if (terms.length < newLength) {
  • to-imperative/trunk/java/java/org/refal/plus/RefalException.java

    r3744 r4047  
    2323    @Override
    2424    public String toString () {
    25         return expr.toString();
     25        return expr.toChars();
    2626    }
    2727}
Note: See TracChangeset for help on using the changeset viewer.