I plan on allowing initializers this time. :)
T
On Feb 10, 2010, at 10:07 AM, Iztok Kavkler wrote:
> I use it for error reporting from a compiler: during tree parsing phase
> I call several functions that may throw CompileError, which needs
> information about current node's line and column. Since I don't want to
> pass the current node as a parameter to all of these functions I have
> created a scope
>
> scope InfoScope {
> CommonTree node;
> }
>
> There is some extra work involved, since I have to say
>
> scope InfoScope;
> $InfoScope::node = $rule.start;
>
> at the beginning of every rule.
>
> Then again, perhaps there is an easier way to do this?
>
> Iztok
>
>
> On 10.2.2010 2:30, Terence Parr wrote:
>> Hi,
>>
>> Is anybody using scopes? E.g., here is the use C grammar:
>>
>> scope Symbols {
>> Set types; // only track types in order to get parser working
>> }
>>
>> Every rule that declares its usage of Symbols pushes a new copy on the stack
>> effectively creating a new symbol scope.
>>
>> translation_unit
>> scope Symbols; // entire file is a scope
>> @init {
>> $Symbols::types = new HashSet();
>> }
>> : external_declaration+
>> ;
>>
>>
>> Then rule declaration declares a rule scope that lets any invoked rule see
>> isTypedef boolean. It's much easier than passing that info down as
>> parameters:
>>
>> declaration
>> scope {
>> boolean isTypedef;
>> }
>> @init {
>> $declaration::isTypedef = false;
>> }
>> : 'typedef' declaration_specifiers? {$declaration::isTypedef=true;}
>> init_declarator_list ';' // special case, looking for typedef
>> | declaration_specifiers init_declarator_list? ';'
>> ;
>>
>>
>> Rule direct_declarator can then easily determine whether the IDENTIFIER
>> should be declared as a type name.
>>
>> direct_declarator
>> : ( IDENTIFIER
>> {
>> if ($declaration.size()>0&&$declaration::isTypedef) {
>> $Symbols::types.add($IDENTIFIER.text);
>> System.out.println("define type "+$IDENTIFIER.text);
>> }
>> }
>> | '(' declarator ')'
>> )
>> declarator_suffix*
>> ;
>>
>> Trying to decide if it's worth reimplementing for v4.
>>
>> Ter
>>
>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
>> Unsubscribe:
>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
List: http://www.antlr.org/mailman/listinfo/antlr-interest
Unsubscribe:
http://www.antlr.org/mailman/options/antlr-interest/your-email-address
--
You received this message because you are subscribed to the Google Groups
"il-antlr-interest" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/il-antlr-interest?hl=en.