I don't know for sure. Someone knowledgeable can correct me. ANTLR lexer doesn't work correct, when you have the Semantic predicates at the beginning. If you have it after your first token, then it might give the required behavior.
But i follow one of the advices given to me. a) don't have too much functionality in the lexer. Make it as simple as possible. If you want the conditions to be considered, use it in the action clause and change the $type of the token. Nevertheless, i find the lexer working right even with semantic predicates when you have k=1 setup. But unless your grammar is naturally k=1, you have to write the semantic predicates to cover all the cases by yourself. When you have a semantic predicate, you kind of bypass the grammar check. Thanks. On Fri, Jul 29, 2011 at 1:41 AM, Chris King <[email protected]> wrote: > Yes that is intentional. But let's disregard that rule for a second. Should > the introduction of that second rule under any circumstance change the > behavior of that parser seeing as it doesnt match anything? I'm showing that > it does and can't figure out why it would given that the predicate is always > false. Is that a bug? > > Thanks, > Chris > > On Jul 28, 2011, at 4:00 AM, Gokulakannan Somasundaram <[email protected]> > wrote: > > The first rule matches empty and the second rule doesn't match anything. Is > that "//" intentional? > > Gokul. > > On Thu, Jul 28, 2011 at 4:28 PM, chris king < <[email protected]> > [email protected]> wrote: > >> Hello antlr-interest! So I'm working on my C# pre-processor and I'm trying >> to implement the skipping #ifdefed code in the lexer when I ran across >> this. >> I expected >> >> >> PP_SKIPPED_CHARACTERS >> : //{ false }? ( ~(F_NEW_LINE_CHARACTER | '#') F_INPUT_CHARACTER* >> F_NEW_LINE )* >> ; >> >> >> to be equivalent to >> >> >> PP_SKIPPED_CHARACTERS >> : { false }? ( ~(F_NEW_LINE_CHARACTER | '#') F_INPUT_CHARACTER* >> F_NEW_LINE >> )* >> ; >> >> but I'm seeing different runtime behavior. So I guess I don't understand >> what the { false }? syntax is all about. I know there are probably other >> ways to implement the #ifdefed logic but could someone enlighten me as to >> why these two bits of code are not equivalent? >> >> Thanks, >> Chris >> >> List: <http://www.antlr.org/mailman/listinfo/antlr-interest> >> http://www.antlr.org/mailman/listinfo/antlr-interest >> Unsubscribe: >> <http://www.antlr.org/mailman/options/antlr-interest/your-email-address> >> 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.
