I may need the gist (minimal if that's convenient). If the lexer
patterns are right, the left paren inside a string should be slurped up
with the string, so that the rule match does not happen. You may also
want to check, now that you are using LATM, to see if you're actually
looking for a string at the right point.
There's a doc that outlines how to go about tracing/debugging a grammar:
https://metacpan.org/pod/distribution/Marpa-R2/pod/Tracing.pod --
particularly useful in this case may be the trace_terminals argument and
the show_progress() method.
Hope this helps, jeffrey
On 03/27/2014 10:51 AM, John Alvord wrote:
I am making steady progress thanks to your help. Now parentheses
require some different logic
I have a text fragment
*VALUE NT_Services.Display_Name_U *IN
('MSSQL$SQL027301','SQLAgent$SQL027301','SQL Server Agent
(SQL027303)','SQL Server (SQL027303)')
BNF rule looks like this
<value_condition_in> ::= '*VALUE' <attribute> '*IN' '('
<comma_separated_list> ')' action => do_value_in
The problem I have is that there is a ')' within the quoted string and
it is matching on this rule... so only a partial string is worked on.
That results in a parse error. [The good news for me is that this is
happening on maybe 0.5% of the data.]
I will put a gist if needed,
but was hoping someone could point me to an example of handling this
sort of case.
John Alvord
On Wed, Mar 19, 2014 at 10:23 AM, John Alvord
<[email protected] <mailto:[email protected]>> wrote:
Thanks also, Ron. I have a lot to learn about good Perl style. My
examples are just the starting point in an investigation.
After some head scratching, I installed Marpa::R2 2.082000
[instead of 2.080000 - current Activestate level] and things
started working very much better indeed. It was an Activestate on
Windows learning experience - had to install mingw64 and then run
cpan. Not a big deal.
Now things are moving along nicely.
This mini language translates to SQL of sorts. That SQL is used to
gather performance data - mostly from Linux/Unix/Windows/zOS
agents. There is filtering involved and sometimes filtering
happens on the agents and sometimes the data gets transmitted to a
server for filtering. BIG performance differences. There has been
a question forever about how to determine agent filtering or
server filtering - so people can fix/avoid performance problems.
This will be folded into a public example tool which any customer
can use... and I can use on problem reports.
Also, I have collected dozens of categories of cases that cause
performance problems or just plain do not work. A later extension
will expose those in sort of a "critic" report.
Thanks again!!
John Alvord
On Tue, Mar 18, 2014 at 5:48 PM, Ron Savage <[email protected]
<mailto:[email protected]>> wrote:
Actually, I made some other changes:
use Data::Dumper::Concise; # For Dumper().
And:
sub My_Actions::do_attribute
{
my($hash, $t1, $t2, $t3) = @_;
=pod
print "do_attribute()\n";
print '$t1: ', Dumper($t1);
print '$t2: ', Dumper($t2);
print '$t3: ', Dumper($t3);
=cut
return [$t1, $t2, $t3];
}
sub My_Actions::do_basic {
my ($hash, $t1, $t2, $t3, $t4 ) = @_;
=pod
print "do_basic()\n";
print '$t1: ', Dumper($t1);
print '$t2: ', Dumper($t2);
print '$t3: ', Dumper($t3);
print '$t4: ', Dumper($t4);
=cut
return [$t1, $t2, $t3, $t4];
}
The output is:
Setting trace_terminals option
Setting trace_values option
Lexer "L0" accepted lexeme L1c1-3: '*IF'; value="*IF"
Lexer "L0" discarded lexeme L1c4: ws
Lexer "L0" accepted lexeme L1c5-10: '*VALUE'; value="*VALUE"
Lexer "L0" discarded lexeme L1c11: ws
Lexer "L0" accepted lexeme L1c12-33: id;
value="i5OS_IOA_Cache_Battery"
Lexer "L0" accepted lexeme L1c34: '.'; value="."
Lexer "L0" accepted lexeme L1c35-39: id; value="State"
Lexer "L0" discarded lexeme L1c40: ws
Lexer "L0" accepted lexeme L1c41-43: '*EQ'; value="*EQ"
Lexer "L0" discarded lexeme L1c44: ws
Lexer "L0" forgave lexeme L1c45-49: id; value="Error"
Lexer "L0" accepted lexeme L1c45-49: literal_word; value="Error"
Popping 4 values to evaluate R2:4@1-7C11@6, rule: 2:
basic_condition -> [Lex-1] attribute comparison compare_string
Calculated and pushed value: [
'*VALUE',
[
[
'i5OS_IOA_Cache_Battery'
],
'.',
[
'State'
]
],
[
'*EQ'
],
[
[
'Error'
]
]
]
--
You received this message because you are subscribed to the
Google Groups "marpa parser" group.
To unsubscribe from this group and stop receiving emails from
it, send an email to [email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google
Groups "marpa parser" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to [email protected]
<mailto:[email protected]>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "marpa
parser" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.