Changeset 3197 for proto/pabloj/branches


Ignore:
Timestamp:
May 27, 2013, 5:34:54 PM (6 years ago)
Author:
ksherdy
Message:

Updated scatter generated code.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/branches/refactor-experimental/src/pabloB/parser/Parser.java

    r3192 r3197  
    468468                }
    469469                expect(Lextant.LROUND);
    470                 if( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID) ) {
     470                if( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID) ) {
    471471                        {
    472472                                ASTNode child = parseParameterList();
     
    491491         
    492492        public ASTNode parseReturnType() {
    493                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
    494                         return syntaxErrorNode("returnType² [BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     493                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
     494                        return syntaxErrorNode("returnType² [BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    495495                }
    496496       
     
    511511         
    512512        public ASTNode parseParameterList() {
    513                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
    514                         return syntaxErrorNode("parameterList² [BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     513                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
     514                        return syntaxErrorNode("parameterList² [BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    515515                }
    516516       
     
    559559         
    560560        public ASTNode parseParameter() {
    561                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
    562                         return syntaxErrorNode("parameter² [BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     561                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
     562                        return syntaxErrorNode("parameter² [BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    563563                }
    564564       
     
    644644         
    645645        public ASTNode parseStmt() {
    646                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.IF, Lextant.INT, Lextant.LROUND, Lextant.RETURN, Lextant.STRUCT, Lextant.VOID, Lextant.WHILE) || (nowReading.isLexicalType(LexicalType.IDENTIFIER)) || (nowReading.isLexicalType(LexicalType.INTEGER_CONST)) || (nowReading.isLexicalType(LexicalType.SQ_STRING)) || (nowReading.isLexicalType(LexicalType.STRING))) ) {
    647                         return syntaxErrorNode("stmt² [BITBLOCK¹, BOOL¹, IDENTIFIER¹, IF¹, INT¹, INTEGER_CONST¹, LROUND¹, RETURN¹, SQ_STRING¹, STRING¹, STRUCT¹, VOID¹, WHILE¹]");
     646                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.IF, Lextant.INT, Lextant.LROUND, Lextant.RETURN, Lextant.STRUCT, Lextant.VOID, Lextant.WHILE) || (nowReading.isLexicalType(LexicalType.IDENTIFIER)) || (nowReading.isLexicalType(LexicalType.INTEGER_CONST)) || (nowReading.isLexicalType(LexicalType.SQ_STRING)) || (nowReading.isLexicalType(LexicalType.STRING))) ) {
     647                        return syntaxErrorNode("stmt² [BITBLOCK¹, BITFIELD¹, BOOL¹, IDENTIFIER¹, IF¹, INT¹, INTEGER_CONST¹, LROUND¹, RETURN¹, SQ_STRING¹, STRING¹, STRUCT¹, VOID¹, WHILE¹]");
    648648                }
    649649       
     
    652652                result.setProductionTag(24);
    653653                RevList<ASTNode> allChildren = new ReverseAccessibleArrayList<ASTNode>();
    654                 if( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID) ) {
     654                if( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID) ) {
    655655                        {
    656656                                ASTNode child = parseLocalVarDecl();
     
    688688                }
    689689                else {
    690                         return syntaxErrorNode("[BITBLOCK¹, BOOL¹, IDENTIFIER¹, IF¹, INT¹, INTEGER_CONST¹, LROUND¹, RETURN¹, SQ_STRING¹, STRING¹, STRUCT¹, VOID¹, WHILE¹]");
     690                        return syntaxErrorNode("[BITBLOCK¹, BITFIELD¹, BOOL¹, IDENTIFIER¹, IF¹, INT¹, INTEGER_CONST¹, LROUND¹, RETURN¹, SQ_STRING¹, STRING¹, STRUCT¹, VOID¹, WHILE¹]");
    691691                }
    692692                if(allowCompression) {
     
    883883         
    884884        public ASTNode parseLocalVarDecl() {
    885                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
    886                         return syntaxErrorNode("localVarDecl² [BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     885                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
     886                        return syntaxErrorNode("localVarDecl² [BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    887887                }
    888888       
     
    951951                RevList<ASTNode> allChildren = new ReverseAccessibleArrayList<ASTNode>();
    952952                expect(Lextant.LCURLY);
    953                 while( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.IF, Lextant.INT, Lextant.LROUND, Lextant.RETURN, Lextant.STRUCT, Lextant.VOID, Lextant.WHILE) || (nowReading.isLexicalType(LexicalType.IDENTIFIER)) || (nowReading.isLexicalType(LexicalType.INTEGER_CONST)) || (nowReading.isLexicalType(LexicalType.SQ_STRING)) || (nowReading.isLexicalType(LexicalType.STRING)) ) {
     953                while( nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.IF, Lextant.INT, Lextant.LROUND, Lextant.RETURN, Lextant.STRUCT, Lextant.VOID, Lextant.WHILE) || (nowReading.isLexicalType(LexicalType.IDENTIFIER)) || (nowReading.isLexicalType(LexicalType.INTEGER_CONST)) || (nowReading.isLexicalType(LexicalType.SQ_STRING)) || (nowReading.isLexicalType(LexicalType.STRING)) ) {
    954954                        {
    955955                                ASTNode child = parseStmt();
     
    12651265         
    12661266        public ASTNode parseType() {
    1267                 if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
    1268                         return syntaxErrorNode("type² [BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     1267                if( !(nowReading.isLextant(Lextant.BITBLOCK, Lextant.BITFIELD, Lextant.BOOL, Lextant.INT, Lextant.STRUCT, Lextant.VOID)) ) {
     1268                        return syntaxErrorNode("type² [BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    12691269                }
    12701270       
     
    12801280                        }
    12811281                }
     1282                else if( nowReading.isLextant(Lextant.BITFIELD) ) {
     1283                        {
     1284                                ASTNode child = parseBitFieldType();
     1285                                result.appendChild(child);
     1286                                allChildren.add(child);
     1287                        }
     1288                }
    12821289                else if( nowReading.isLextant(Lextant.STRUCT) ) {
    12831290                        {
     
    12881295                }
    12891296                else {
    1290                         return syntaxErrorNode("[BITBLOCK¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
     1297                        return syntaxErrorNode("[BITBLOCK¹, BITFIELD¹, BOOL¹, INT¹, STRUCT¹, VOID¹]");
    12911298                }
    12921299                if(allowCompression) {
     
    15391546        // return node or, if it has one child, its single child.       
    15401547        private ASTNode compressIfPossible(ASTNode node) {
    1541                 return node.nChildren() == 1 ? node.child(0) : node;
     1548                if(node.nChildren() != 1) {
     1549                        return node;
     1550                }
     1551                ASTNode result = node.child(0);
     1552                result.setCompressed();
     1553                return result;
    15421554        }
    15431555       
     
    15511563                ASTNode left   = top.child(0);
    15521564                ASTNode newTop = top.child(1);
    1553                 if((newTop.nChildren() != 2) || !fromSameProduction(top, newTop)) {
     1565               
     1566                if( (newTop.nChildren() == 2)  &&  fromSameProduction(top, newTop) ) {
     1567                        ASTNode middle = newTop.child(0);
     1568                        ASTNode right = newTop.child(1);
     1569
     1570                        top.initChildren();
     1571                        top.appendChild(left);
     1572                        top.appendChild(middle);
     1573                        top = rotateLeftIfPossible(top);
     1574
     1575                        newTop.initChildren();
     1576                        newTop.appendChild(top);
     1577                        newTop.appendChild(right);
     1578
     1579                        return newTop;
     1580                }
     1581                else  {
    15541582                        return top;
    15551583                }
    1556                 ASTNode middle = newTop.child(0);
    1557                 ASTNode right = newTop.child(1);
    1558                
    1559                 top.initChildren();
    1560                 top.appendChild(left);
    1561                 top.appendChild(middle);
    1562                 top = rotateLeftIfPossible(top);
    1563                
    1564                 newTop.initChildren();
    1565                 newTop.appendChild(top);
    1566                 newTop.appendChild(right);
    1567                
    1568                 return newTop;
    15691584        }
    15701585        private boolean fromSameProduction(ASTNode node1, ASTNode node2) {
    1571                 return node1.getProductionTag() == node2.getProductionTag();
     1586                return (node1.getProductionTag() == node2.getProductionTag()) &&
     1587                           !node1.isCompressed() &&
     1588                           !node2.isCompressed();
    15721589        }
    15731590        private ASTNode promoteLastChild(ASTNode tree) {
Note: See TracChangeset for help on using the changeset viewer.