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

Juancarlo Añez apalala at gmail.com
Sat Oct 6 13:37:04 PDT 2012


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>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