I have a JAVA language rewrite translator that adds some more modern control 
constructs to an existing DSL.  ANTLR has been invaluable.

I've provided "include" file support using the methods outlined in 
http://www.antlr.org/wiki/pages/viewpage.action?pageId=557057 but I would like 
to use the file name in the string template that is used to generate code:

        |       kw=KW_while {
                            whileLabelStack.push(new Label("while"));
                }
                l=string cond=string r=string
                (s+=statement)+
                KW_endwhile
                -> template(lhs={$l.text},
                            operator={$cond.text.replaceAll("<", "\\<")},
                            rhs={$r.text},
                            s={$s},
                            file={input.getSourceName()},
                            line={$kw.line},
                            label={whileLabelStack.pop().getLabel()})
<<
; while <lhs> <operator> <rhs>
let ${_source_line} = <file>,<line>
<label>:
        test <label>_end: <lhs> <operator> <rhs>
        <s>
        ; endwhile
        goto <label>:
<label>_end:
>>
        ;


The problem is the <file> attribute is always the name of the file that 
contains the include directive.  That is:

file1.cls:
--------------
#include file2.cls

while $01 < 1
   let $01 = 1
endwhile
--------------

file2.cls:
--------------
while $01 < 2
   let $01 = 2
endwhile
--------------

Translates to:

; while ${index} < 2
let ${_source_line} = file1.cls,1
L_0_while:
        test L_0_while_end: ${index} < 2

        let ${index} = 2

        ; endwhile
        goto L_0_while:
L_0_while_end:

; while ${index} < 1
let ${_source_line} = file1.cls,3
L_1_while:
        test L_1_while_end: ${index} < 1

        let ${index} = 1

        ; endwhile
        goto L_1_while:
L_1_while_end:

Notice that even though the line numbers are correct, the <file> attribute 
evaluates to file1.cls when processing file2.cls.

I've poured over the ANTLR Java runtime API documentation and it would appear 
that input.getSourceName() should change when processing the included file.

Does anyone have an idea on what I'm doing wrong?


Thanks

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 il-antlr-inter...@googlegroups.com.
To unsubscribe from this group, send email to 
il-antlr-interest+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/il-antlr-interest?hl=en.

Reply via email to