Le 27/03/2017 à 21:12, Stephane Ducasse a écrit :
what was strange is that this version
<whitespace> : \s+;
%root MultiListObject; %prefix XPML; modifiers_opt : | modifiers ; modifiers : modifier 'modifier' {{}} | modifiers modifier 'modifier' {{}} ; modifier : "public" 'token' {{Modifier}} | "protected" 'token' {{Modifier}} | "private" 'token' {{Modifier}} | "static" 'token' {{Modifier}} ;
did not accept 'public static'
I found that there were obsolete classes around and I reloaded SmaCC in a fresh image then regenerate this and my test pass now. So I will do the same for my solidity parser.
Yes, the ast generation code does that sometimes, when you iterate modifying the grammar and ast classes. It doesn't delete pre-existing classes, even if they are not correct anymore because the grammar has changed. Thierry
On Mon, Mar 27, 2017 at 6:40 PM, Stephane Ducasse <stepharo.self@gmail.com <mailto:stepharo.self@gmail.com>> wrote:
Apparently there is an interaction with the root directives.
On Mon, Mar 27, 2017 at 6:34 PM, Stephane Ducasse <stepharo.self@gmail.com <mailto:stepharo.self@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.self@gmail.com <mailto:stepharo.self@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