Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
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 lurking in the Monastery: (4)
As of 2015-07-07 04:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls