Okay. Problem solved. The answer was indeed inside #scanner_business. Rules make for picky parsers. So I used a grammar<> and it compiled just fine. Now if I can just get it to WORK. ;)
Whoops. Infinite recursion. Back to the drawing board... but at least now I don't need "*comment" sprinkled liberally throughout my rules.
--Mark Storer
Senior Software Engineer
Verity, Inc.
-----Original Message-----
From: boost-users-bounces@lists.boost.org
[mailto:boost-users-bounces@lists.boost.org]On Behalf Of Jeff Flinn
Sent: Friday, June 25, 2004 10:46 AM
To: boost-users@lists.boost.org
Subject: [Boost-users] Re: Tweaking the Skip Parser,was RE: Spirit 1.6
with VC6
Take a look at:
http://www.boost.org/libs/spirit/doc/faq.html#scanner_business
You don't want the skip parser to be a phrase level scanner.
parse(str, rules, space_p | comment_p( "/*", "*/" ) |
comment_p( "//" ) )
may work for you?
Jeff F
No chance of switching to 7.1? :-)
Things are looking up. We just did a project-wide upgrade
to... VC7.1.
Problem solved. I'm now merrily writing rules for my
JavaScript parser. It
doesn't have to support the whole language (not for a while,
maybe never), I
just need to be able to parse out the names and locations of all the
functions in a file. It's for a JavaScript editor built into
one of our
"Mark Storer" wrote in message
news:076D1E704127414E9FEAFFC31F66C9472739CD@vrsdex1.verity.com...
products, and later we'll be adding auto-completion. That'll
require a more
thorough parser, but for now, I'm just after funciton locations.
So far so good... though I'll undoubtedly be quite familiar with the
BOOST_SPIRIT_DEBUG* macros before I'm done.
I've got another Spirit question: I've been adding
"*comment" throughout
the rules and it's getting tiresome:
rule blockComment = comment_p( "/*", "*/" );
rule lineComment = comment_p( "//" );
rule comment = blockComment | lineComment;
Spraying the "comment" rule liberally through my rules is
an option...
rule codeBlock = ch_p('{') >>
*(comment | codeBlock
| ~ch_p('}')) >> ch_p('}');
... but not an appealing one. This becomes particularly
true once I start
working on the auto-completion parser.
It just occured to me that if the skip parser ate
comments for me, it
would greatly simplify my rules. I'd like to tweak the skip
parser so it
skips over my "comment" rule as well as white space. I just
took a stab at
this, but didn't get very far. I tried:
parse(str, rules, space_p | comment)
but that resulted in a compiler error. 7.1's errors are
MUCH easier to
read that 6's. I'm going to like this new compiler.
C:\SDKs\boost_1_31_0\boost\spirit\core\non_terminal\impl\rule.
ipp(190):
error C2664:
'boost::spirit::impl::abstract_parser::do_pars
e_virtual' :
cannot convert parameter 1 from 'const scanner_t' to 'const
boost::spirit::rule<T0>::scanner_t &'
with
[
ScannerT=boost::spirit::ruleboost::spirit::phrase_scanner_t:
:scanner_t,
AttrT=boost::spirit::ruleboost::spirit::phrase_scanner_t::attr_t
]
and
[
T0=boost::spirit::phrase_scanner_t
]
Pointing me to the relevant section of the docs is an
acceptable answer,
though I wouldn't mind a little more info than that. ;)
I'll keep plugging away. If I come up with an answer, I'll
post it to the
list. I'd expect this to be useful to other beginners at the
very least.
--Mark Storer
Senior Software Engineer
Verity, Inc.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users