<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:13px">I wanted to ask about how I'm handling one point in writing the lens for parsing my NASL files. </div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">I'm using two cases for my end of line, those that end with a semicolon only and those that end with a closing parenthesis. e.g.</div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px"><div><div><font face="courier new, monospace">let cparen      = del /\)/ ")"</font></div><div><font face="courier new, monospace">let semic       = Util.del_str ";"</font></div>
<div><font face="courier new, monospace">let dquote      = Util.del_str "\""</font></div><div><font face="courier new, monospace">let comma       = del /,/ ","</font></div><div><font face="courier new, monospace">let colon       = del /:[ \t]*/ ": "</font></div>
<div><font face="courier new, monospace"><div>let eol         = del /[ \t]*\n/ "\n"</div><div>let del_opt_ws = del /[ \t]*/ ""</div><div>let equal       = del /[ \t]*=[ \t]*/ "="<br></div></font></div>
<div><font face="courier new, monospace">let oparen      = del /\(/ "("</font></div></div><div><br></div><div><font face="courier new, monospace">let cparen_entry (kw:string) = [ del_opt_ws .  key kw . oparen . value_to_cparen . cparen . semic . eol   ]</font></div>
<div><font face="courier new, monospace">let semic_entry (kw:string) = [  </font><span style="font-family:'courier new',monospace">del_opt_ws . </span><span style="font-family:'courier new',monospace">key kw  . equal .  value_to_semic .  semic . eol ]</span></div>
<div><br></div><div>This works perfectly until I run into something where I have an embedded closing parenthesis in a given line, e.g</div><div><br></div><div><br></div><div><font face="courier new, monospace"><i> script_copyright("This script is Copyright (C) 2004 Michel Arboi");</i></font></div>
</div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px"><div><br></div><div>My thought is something like this should work to generalize it but I'm not sure how to define value_to_something. </div>
<div><br></div><div><font face="courier new, monospace">let refined_entry (kw:string) = [ del_opt_ws . key kw . ( oparen | equal ) . value_to_something . cparen{0,1} . semic . eol  ]</font></div></div><div style="font-family:arial,sans-serif;font-size:13px">
<br></div><div style="font-family:arial,sans-serif;font-size:13px">The (oparen|equal) comes back with </div><div style="font-family:arial,sans-serif;font-size:13px"><div>exception: overlapping lenses in tree union.put</div>
<div>    Example matched by both:</div><div>    First lens: lens/nasl.aug:24.14-.26:</div><div>    Second lens: lens/nasl.aug:23.13-.36:</div></div><div style="font-family:arial,sans-serif;font-size:13px"><br></div><div style="font-family:arial,sans-serif;font-size:13px">
Can you assist? </div></div>