Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: How does perl's lexer and parser cooperate?

by dave_the_m (Parson)
on Dec 26, 2012 at 14:14 UTC ( #1010386=note: print w/ replies, xml ) Need Help??


in reply to How does perl's lexer and parser cooperate?

GRAMPROG is a 'fake' token that is actual passed as an arg to yyparse() to say what type of thing we want to parse; i.e. its an extension to the usual yacc/bison stuff which just has a hard-coded start, e.g.

%start prog
or similar.

So the GRAM* stuff is fake; the rest of the tokens are returned by llyex in toke.c in the usual way.

Dave.


Comment on Re: How does perl's lexer and parser cooperate?
Download Code
Re^2: How does perl's lexer and parser cooperate?
by PerlOnTheWay (Scribe) on Dec 26, 2012 at 14:56 UTC

    Dave, nice to see you again!

    It seems GRAMPROG is not the only one that's special, I tried to search other symbols like ADDOP in toke.c

    but it's never defined to "+" there.

    where are these terminal symbols finally defined?

      It seems GRAMPROG is not the only one that's special, I tried to search other symbols like ADDOP in toke.c but it's never defined to "+" there. where are these terminal symbols finally defined?
      I think you're misunderstanding how this works. ADDOP (and many of the others) don't correspond to actual terminal symbols like '+'. They are just numerical constants (ADDOP is defined as 305 in perly.h). yylex returns this value for multiple "addish" operator types, such as '+', '-', '.'; with extra info in the ival field indicating what op to use (such as OP_ADD, OP_CONCAT etc).

      Dave.

        Got it, thanks again!

        But I've got another doubt, what's the difference between ival&i_tkval, pval&p_tkval in YYSTYPE?

        update

        I've just checked other symbols like GRAMBLOCK,

        it should be parsed by Perl_parse_block in toke.c, which is called as parse_block ,

        but the strange thing is : they're never ever called from anywhere.

        so when will yyparse got token GRAMBLOCK from yylex ?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1010386]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (16)
As of 2014-12-19 18:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (91 votes), past polls