Hi all,

for code completion I need a way to force a lexer to match somehow even if it 
is not complete. Sounds weird, I know. What I have in mind is this: Imagine you 
have defined special identifiers which can be quoted (double quote char). When 
the user has started typing something like this:

select "abc

and now invokes code completion I want to show all possible identifiers. But 
with a lexer rule like this:

ANSI_QUOTED_ID:
        DOUBLE_QUOTE 
        ( options {greedy=false;} :
                ESCAPE_SEQUENCE 
                | .
        )* DOUBLE_QUOTE
;

I only get an error node plus a not so helpful error message:

1 errors found
-end of input-(1)  : error 3 : , at offset 0, at <EOF> : cannot match to any 
predicted input...

The AST looks like:

(1, 0, nil)    nil
        (1, 0, SELECT_SYM55 [418])    select
        (0, 0, <invalid> [0])    Tree Error Node
        (1, 0, (null) [-1])    <EOF>

However, what I would like is to get ANSI_QUOTED_ID to match the entire rest of 
the input and return this as the ID (plus the error, so I know it was 
incorrect). This way I know we are looking for a (possibly quoted) identifier 
and, also important, get the text written already. Using EOF or an empty 
alternative for the closing DOUBLE_QUOTE gives me various ambiguities, so this 
is not a solution either.

Scanning the text in the editor backwards is another option, but requires more 
processing so I would prefer a (simple) solution in the grammar, if possible.

Mike
-- 
www.soft-gems.net

_______________________________________________
antlr-dev mailing list
[email protected]
http://www.antlr.org/mailman/listinfo/antlr-dev

Reply via email to