[antlr-interest] Tree grammar doesn't match what I want

Andrew House ahouse at eecg.toronto.edu
Tue Oct 16 14:09:43 PDT 2012


Thanks for this tip.  Using the trace option showed me the problem was 
not with my array data type, but actually with my expression matching 
rule.  (I had made a stupid mistake in my expression tree matcher.)

-- Andrew House

On 06/10/2012 6:07 PM, Juancarlo Añez wrote:
> You can use the '-trace' option to see where exactly the parser is 
> failing. An "upper" rule will fail if one on which it depends fails.
>
> -- Juancarlo
>
> On Sat, Oct 6, 2012 at 2:56 PM, Andrew House <ahouse at eecg.toronto.edu 
> <mailto:ahouse at eecg.toronto.edu>> wrote:
>
>
>     Hi all,
>
>     I am working on my own language application, and am following the
>     Language Implementation Patterns and Definitive ANTLR Reference
>     books as
>     closely as I can.  I have run into an issue where my tree grammar
>     seems
>     unable to match my 'array' subtree (representing an array data type).
>
>     An example of what fails to match is as follows:
>     (array (SIZE (EXPR (to 1 (IDX N)))) (SCALAR (NAME (TYPEID Particle))))
>
>     Below, I have included relevant snippets of the grammar and tree
>     grammar.  The tree grammar has no trouble recognizing the 'tuple' and
>     'scalar' data type subtrees.
>
>     I know that the grammar allows for arrays of arrays (of arrays...)
>     if I
>     were so inclined, but I don't think that's the culprit.  As far as
>     I can
>     tell the grammar is unambiguous.  It just doesn't seem to match
>     for arrays.
>
>     Any help would be greatly appreciated---I've been looking at this for
>     several days now, and haven't managed to see the problem.
>
>     Sincerely,
>     -- Andrew House
>
>     Grammar ======================================================
>
>     varDeclaration
>          :    'var' ID 'is' dataType ';'
>              -> ^('var' ^(NAME ID) ^(VARTYPE dataType) )
>          ;
>
>     dataType
>          :    dataTypeID sizeDef?-> ^(SCALAR ^(NAME dataTypeID) sizeDef? )
>          |    'array' arrayDims 'of' dataType -> ^('array' arrayDims
>     dataType )
>          |    'tuple' '(' argList ')' -> ^('tuple' argList)
>          ;
>
>     argList
>          :    argDeclaration (',' argDeclaration)* -> argDeclaration+
>          ;
>
>     argDeclaration
>          :    dataType ID -> ^(ARG ^(NAME ID) ^(VARTYPE dataType))
>          ;
>
>     arrayDims
>          :    sizeDef | regionDef
>          ;
>
>     dataTypeID
>          :    ID ('.' ID)* -> ^(TYPEID ID+)
>          ;
>
>     dataTypeList
>          :    dataType (',' dataType)* -> dataType+
>          ;
>
>     sizeDef
>          :    '[' expr ']' -> ^(SIZE expr)
>          ;
>
>     regionDef
>          :    '[' idList 'in' expr ']' -> ^(REGION expr idList)
>          ;
>
>     Tree Grammar
>     ====================================================================
>
>     varDeclaration
>          :    ^('var' ^(NAME ID) ^(VARTYPE dt=dataType) .*)
>              {
>                  // Code to resolve data type
>              }
>          ;
>
>
>     dataType returns [ASymbol type, AIndexRange size] // updated for
>     resolution
>          :    (tsid=scalarDataType | taid=arrayDataType |
>     ttid=tupleDataType )
>              {
>                  // Code to determine whether it is tuple, scalar, or
>     array
>     type,
>            // and pass up appropriate values.
>              }
>          ;
>
>     scalarDataType returns [ASymbol type, AIndexRange size]
>          :    ^(SCALAR ^(NAME ^(TYPEID name+=ID+)) sz=sizeDef?)
>              {
>                  // Resolve scalar data types
>              }
>          ;
>
>     arrayDataType returns [ASymbol type, AIndexRange size]
>          :    ^(aid='array' dim=arrayDims dt=dataType)
>              {
>                // Resolve array dimensions and subtype
>            // THIS NEVER SEEMS TO MATCH ANYTHING!!!!!!
>                 // A print statement in here never executes.
>              }
>          ;
>
>     tupleDataType returns [ASymbol type, AIndexRange size]
>          :    ^(tid='tuple' .*)
>              {
>                  // Returns appropriate tuple values
>              }
>          ;
>
>     arrayDims returns [AIndexRegion region]
>          :    sz=sizeDef | rg=regionDef
>              {
>                  // Figures out if it is a size or region
>            // and returns a region.
>              }
>          ;
>
>     sizeDef returns [AIndexRange range]
>          :    ^(SIZE ex=exprRoot)
>          ;
>
>     regionDef returns [AIndexRegion region]
>          :    ^(REGION ex=exprRoot ids+=ID+)
>          ;
>
>     List: http://www.antlr.org/mailman/listinfo/antlr-interest
>     Unsubscribe:
>     http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
>
>
>
> -- 
> Juancarlo *Añez*



More information about the antlr-interest mailing list