Index: /trunk/ProjectFortress/astgen/Fortress.ast
===================================================================
--- /trunk/ProjectFortress/astgen/Fortress.ast (revision 2390)
+++ /trunk/ProjectFortress/astgen/Fortress.ast (revision 2405)
@@ -1263,5 +1263,7 @@
                          * e.g.) [3 4 5; 6 7 8]
                          */
-                        ArrayElements(int dimension, List<ArrayExpr> elements);
+                        ArrayElements(int dimension,
+                                      List<ArrayExpr> elements,
+                                      boolean outermost = false);
         /**
          * type
Index: /trunk/ProjectFortress/src/com/sun/fortress/Shell.java
===================================================================
--- /trunk/ProjectFortress/src/com/sun/fortress/Shell.java (revision 2404)
+++ /trunk/ProjectFortress/src/com/sun/fortress/Shell.java (revision 2405)
@@ -371,20 +371,4 @@
                 Path path = sourcePath( s, name );
 
-                /*
-                Debug.debug( Debug.Type.REPOSITORY, 2, "True api name is " + name );
-                Debug.debug( Debug.Type.REPOSITORY, 2, "Path is " + s );
-                Path path = ProjectProperties.SOURCE_PATH;
-                String source = new File( s ).getCanonicalPath().substring( 0, s.length() - (name.toString().length() + 4) );
-                path = path.prepend( source );
-                Debug.debug( Debug.Type.REPOSITORY, 2, "Source path is " + source );
-                Debug.debug( Debug.Type.REPOSITORY, 2, "Lookup path is " + path );
-                */
-                /*
-                if (s.contains("/")) {
-                    String head = s.substring(0, s.lastIndexOf("/"));
-                    s = s.substring(s.lastIndexOf("/")+1, s.length());
-                    path = path.prepend(head);
-                }
-                */
                 Iterable<? extends StaticError> errors = compile(path, name.toString() + (s.endsWith(".fss") ? ".fss" : ".fsi"), out );
                 if ( errors.iterator().hasNext() ){
@@ -483,17 +467,7 @@
         throws UserError, Throwable {
         try {
-            /*
-            Path path = ProjectProperties.SOURCE_PATH;
-            if (fileName.contains("/")) {
-                String head = fileName.substring(0, fileName.lastIndexOf("/"));
-                fileName = fileName.substring(fileName.lastIndexOf("/")+1, fileName.length());
-                path = path.prepend(head);
-            }
-            APIName componentName = cuName(fileName);
-            */
-
             APIName name = trueApiName( fileName );
             Path path = sourcePath(fileName, name);
-            
+
             GraphRepository bcr = specificRepository( path, defaultRepository );
             Iterable<? extends StaticError> errors = IterUtil.empty();
@@ -519,5 +493,7 @@
                 System.err.println(error);
             }
-            // If there are no errors, all components will have been written to disk by the CacheBasedRepository.
+            // If there are no errors,
+            // all components will have been written to disk
+            // by the CacheBasedRepository.
         } catch ( StaticError e ){
             System.err.println(e);
Index: /trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java
===================================================================
--- /trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java (revision 2045)
+++ /trunk/ProjectFortress/src/com/sun/fortress/parser_util/FortressUtil.java (revision 2405)
@@ -668,5 +668,5 @@
         }
     }
-    public static ArrayExpr multiDimCons(Expr init,
+    public static ArrayElements multiDimCons(Expr init,
                                         List<Pair<Integer,Expr>> rest) {
         ArrayExpr _init = multiDimElement(init);
@@ -691,16 +691,15 @@
     }
 
-    public static ArrayExpr addStaticArgsToArrayExpr(List<StaticArg> sargs,
-                                              ArrayExpr a) {
-        if (a instanceof ArrayElement) {
-            ArrayElement arrayE = (ArrayElement)a;
-            return new ArrayElement(arrayE.getSpan(), arrayE.isParenthesized(),
-                                    sargs, arrayE.getElement());
-        } else { // a instanceof ArrayElements
-            ArrayElements arrayE = (ArrayElements)a;
-            return new ArrayElements(arrayE.getSpan(), arrayE.isParenthesized(),
-                                     sargs, arrayE.getDimension(),
-                                     arrayE.getElements());
-        }
+    public static ArrayElements finalizeArrayExpr(ArrayElements a) {
+        return new ArrayElements(a.getSpan(), a.isParenthesized(),
+                                 a.getStaticArgs(), a.getDimension(),
+                                 a.getElements(), true);
+    }
+
+    public static ArrayElements addStaticArgsToArrayExpr(List<StaticArg> sargs,
+                                                         ArrayElements a) {
+        return new ArrayElements(a.getSpan(), a.isParenthesized(),
+                                 sargs, a.getDimension(),
+                                 a.getElements(), true);
     }
 
Index: /trunk/ProjectFortress/src/com/sun/fortress/parser/Literal.rats
===================================================================
--- /trunk/ProjectFortress/src/com/sun/fortress/parser/Literal.rats (revision 2327)
+++ /trunk/ProjectFortress/src/com/sun/fortress/parser/Literal.rats (revision 2405)
@@ -44,16 +44,18 @@
 
 /* ArrayExpr ::= [ StaticArgs? w RectElements w ] */
-ArrayExpr ArrayExpr =
+ArrayElements ArrayExpr =
      void:opensquare a1:StaticArgs? w a2:RectElements w void:closesquare
-     { if (a1 == null) yyValue = a2;
+     { if (a1 == null) yyValue = FortressUtil.finalizeArrayExpr(a2);
        else            yyValue = FortressUtil.addStaticArgsToArrayExpr(a1, a2);
      };
 
 /* RectElements ::= NoSpaceExpr MultiDimCons* */
-private ArrayExpr RectElements =
+private ArrayElements RectElements =
      a1:NoSpaceExpr a2s:MultiDimCons*
-     { if (a2s == null || a2s.isEmpty())
-           yyValue = new ArrayElement(a1.getSpan(), false, a1);
-       else
+     { if (a2s == null || a2s.isEmpty()) {
+             List<ArrayExpr> list = new ArrayList<ArrayExpr>();
+             list.add(new ArrayElement(a1.getSpan(), false, a1));
+             yyValue = new ArrayElements(a1.getSpan(), false, 1, list);
+         } else
            yyValue = FortressUtil.multiDimCons(a1, a2s.list());
      };
Index: /trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java
===================================================================
--- /trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java (revision 2402)
+++ /trunk/ProjectFortress/src/com/sun/fortress/tools/FortressAstToConcrete.java (revision 2405)
@@ -34,4 +34,5 @@
      */
 
+    /* indentation utilities *************************************************/
     private int indent = 0;
 
@@ -59,4 +60,13 @@
 
     /* utility methods ********************************************************/
+    /* returns number copies of s */
+    private String makeCopies(int number, String s) {
+        String result = s;
+        for (int index = 1; index < number; index++) {
+            result += s;
+        }
+        return result;
+    }
+
     /* returns a string beginning with 'kind' followed by a sequence of elements
        in 'list' separated by commas and  enclosed by '{' and '}'
@@ -362,5 +372,5 @@
                                               List<String> decls_result) {
         StringBuilder s = new StringBuilder();
-        
+
         increaseIndent();
 
@@ -386,5 +396,5 @@
         s.append( indent(join(decls_result,"\n")) );
         s.append( "\nend" ).append( "\n" );
-        
+
         decreaseIndent();
 
@@ -655,5 +665,5 @@
                                       List<String> fronts_result) {
         StringBuilder s = new StringBuilder();
-        s.append( indent(join(fronts_result, "\n")) );
+        s.append( indent(join(fronts_result, " also\n")) );
         s.append( "\nend" );
         return s.toString();
@@ -1030,5 +1040,4 @@
         StringBuilder s = new StringBuilder();
 
-        // s.append( op_result );
         s.append( join(args_result, " " + op_result + " ") );
 
@@ -1094,20 +1103,28 @@
 //    @Override public String forMathPrimaryOnly( that,
 
-    @Override public String forArrayElementOnly(ArrayElement that, List<String> staticArgs_result, String element_result) {
-        StringBuilder s = new StringBuilder();
-
-        s.append( element_result );
-        s.append( inOxfordBrackets(staticArgs_result));
-
-        return s.toString();
-    }
-
-    @Override public String forArrayElementsOnly(ArrayElements that, List<String> staticArgs_result, List<String> elements_result) {
-        StringBuilder s = new StringBuilder();
-
-        s.append( "[ " );
-        s.append( join(elements_result, ", ") );
-        s.append( inOxfordBrackets( staticArgs_result ) );
-        s.append( " ]" );
+    @Override public String forArrayElementOnly(ArrayElement that,
+                                                List<String> staticArgs_result,
+                                                String element_result) {
+        return element_result;
+    }
+
+    @Override public String forArrayElementsOnly(ArrayElements that,
+                                                 List<String> staticArgs_result,
+                                                 List<String> elements_result) {
+        StringBuilder s = new StringBuilder();
+
+        if ( that.isOutermost() ) {
+            s.append( "[" );
+            s.append( inOxfordBrackets( staticArgs_result ) );
+            s.append( " " );
+        }
+        String separator;
+        if ( that.getDimension() == 1 )
+            separator = " ";
+        else
+            separator = makeCopies(that.getDimension()-1, ";");
+        s.append( join(elements_result, separator) );
+        if ( that.isOutermost() )
+            s.append( " ]" );
 
         return s.toString();
@@ -1131,5 +1148,7 @@
 //    @Override public String for_RewriteGenericSingletonTypeOnly( that,
 
-    @Override public String forArrayTypeOnly(ArrayType that, String type_result, String indices_result) {
+    @Override public String forArrayTypeOnly(ArrayType that,
+                                             String type_result,
+                                             String indices_result) {
         StringBuilder s = new StringBuilder();
 
@@ -1711,11 +1730,5 @@
     @Override public String forAnonymousFnNameOnly(AnonymousFnName that,
                                                    Option<String> api_result) {
-        StringBuilder s = new StringBuilder();
-
-        return s.toString();
-        /*
-        return bug(that, "Anonymous function names are not supported " +
-                   "in Fortress concrete syntax.");
-                   */
+        return "";
     }
 
@@ -1812,15 +1825,25 @@
     }
 
-    @Override public String forExtentRangeOnly(ExtentRange that, Option<String> base_result, Option<String> size_result) {
-            StringBuilder s = new StringBuilder();
-
-            if ( base_result.isSome() ){
-                    s.append( base_result.unwrap() );
-            }
-            if ( size_result.isSome() ){
-                    s.append( size_result.unwrap() );
-            }
-
-            return s.toString();
+    /* Possible differences in the original Fortress program and
+       the unparsed program.
+       In the Fortress source program, either "#" or ":" may be used.
+       In AST, only "#" is used.
+       In the Fortress source program, either "#size" or "size" may be used.
+       In AST, only "#size" is used.
+     */
+    @Override public String forExtentRangeOnly(ExtentRange that,
+                                               Option<String> base_result,
+                                               Option<String> size_result) {
+        StringBuilder s = new StringBuilder();
+
+        if ( base_result.isSome() ){
+            s.append( base_result.unwrap() );
+        }
+        s.append( "#" );
+        if ( size_result.isSome() ){
+            s.append( size_result.unwrap() );
+        }
+
+        return s.toString();
     }
 
@@ -1856,5 +1879,6 @@
 //    @Override public String forTraitTypeWhereOnly( that,
 
-    @Override public String forIndicesOnly(Indices that, List<String> extents_result) {
+    @Override public String forIndicesOnly(Indices that,
+                                           List<String> extents_result) {
         StringBuilder s = new StringBuilder();
 
