Hi Stéphane,

can you send the complete grammar? The %root directive should have no impact on parse failures.

Thierry

Le 27/03/2017 à 18:40, Stephane Ducasse a écrit :
Apparently there is an interaction with the root directives.

On Mon, Mar 27, 2017 at 6:34 PM, Stephane Ducasse
<stepharo.s...@gmail.com <mailto:stepharo.s...@gmail.com>> wrote:

    Now I tried to hook modifier logic to test and I cannot have two
    modifiers.
    I thought that

    modifiers
    : modifier 'modifier'
    | modifiers modifier 'modifier'
    ;
    allows one to have 'public static' but apparently not so I'm totally
    confused.


    On Mon, Mar 27, 2017 at 6:30 PM, Stephane Ducasse
    <stepharo.s...@gmail.com <mailto:stepharo.s...@gmail.com>> wrote:

        Hi john

        I'm learning smacc as a challenge :) I read a review the
        tutorial that we extracted form your doc.

        I have the following expression

        FunctionTypeName = 'function' TypeNameList ( 'internal' |
        'external' | 'constant' | 'payable' )* ( 'returns' TypeNameList )?

        and I started to handle the 'internal'....

        Now my grammar does not succeed to parse
         (self parser parseFunctionTypeNameOptions: 'internal payable')

        Attempt one: did not work
        ===================
        FunctionTypeNameOptions
        : {{}}
        |  FunctionTypeNameOptions "internal" 'option' {{}}
        |  FunctionTypeNameOptions "external" 'option' {{}}
        |  FunctionTypeNameOptions "constant" 'option' {{}}
        |  FunctionTypeNameOptions "payable" 'option' {{}}


        Attempt two: did not work
        ===================
        FunctionTypeNameOptions
        :
        | FunctTypeNameOptions
        ;
        FunctTypeNameOptions
        :  FunctTypeNameOptions "internal" 'option' {{}}
        |  FunctTypeNameOptions "external" 'option' {{}}
        |  FunctTypeNameOptions "constant" 'option' {{}}
        |  FunctTypeNameOptions "payable" 'option' {{}}
        ;

        Attempt three: did not work
        =====================

        FunctionTypeNameOptions
        :
        | FunctTypeNameOptions
        ;

        FunctTypeNameOptions
        : FunctTypeNameOption 'option'
        | FunctTypeNameOptions FunctTypeNameOption 'option'
        ;
        FunctTypeNameOption
        :  "internal" 'option' {{}}
        |  "external" 'option' {{}}
        |  "constant" 'option' {{}}
        |  "payable" 'option' {{}}
        ;



        I studied the JavaParser and I do not get why my version does
        not work

        modifiers_opt
        :
        | modifiers
        ;
        modifiers
        : modifier 'modifier'
        | modifiers modifier 'modifier'
        ;
        modifier
        : "public" 'token' {{Modifier}}
        | "protected" 'token' {{Modifier}}
        | "private" 'token' {{Modifier}}
        | "static" 'token' {{Modifier}}
        ;


        Thanks in advance. I could have try to do it in petitParser but
        I want to have a real experience with Smacc.

        Stef













Reply via email to