xsawyerx / guacamole

Guacamole is a parser toolkit for Standard Perl. It provides fully static BNF-based parsing capability to a reasonable subset of Perl.
https://metacpan.org/pod/Guacamole
20 stars 8 forks source link

Handle asymmetric precedence #53

Closed vickenty closed 4 years ago

vickenty commented 4 years ago

Parse code like this: (sort $a, $b + sort $c, $d) ($a, $b = open $b, $c = $d)

LHS of expressions can not contain named operators (in this case they bind to the rightmost parameter), but RHS can.

Fixes #48 Fixes #52

xsawyerx commented 4 years ago

You are an f'ing genius, @vickenty!

xsawyerx commented 4 years ago

I pushed a few fixes for tests and some rules. Added a few more. Here's the current state:

t/Statements/Block.t ...................................... ok
t/Statements/Condition.t .................................. ok
t/Statements/Ellipsis.t ................................... ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordChmod.t ... ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordOpen.t .... ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordSplice.t .. ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordSplit.t ... ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordStat.t .... ok
t/Statements/Expressions/OpKeywordExpr/OpKeywordSub.t ..... ok
t/Statements/Expressions/Value/ArrowDerefVariable.t ....... ok
t/Statements/Expressions/Value/Literal.t .................. 1/?
#  [...] Fails with "-4", "44.4", and "-44.4"
t/Statements/Expressions/Value/Literal.t .................. 7/? # Looks like you failed 3 tests of 16.
t/Statements/Expressions/Value/Literal.t .................. Dubious, test returned 3 (wstat 768, 0x300)
Failed 3/16 subtests
t/Statements/Expressions/Value/NonLiteral/SubCall.t ....... ok
t/Statements/Expressions/Value/QLikeValue.t ............... ok
t/Statements/Expressions/arrow.t .......................... ok
t/Statements/Expressions/basic.t .......................... ok
t/Statements/Expressions/fold.t ........................... 1/?
t/Statements/Expressions/variable.t ....................... ok
t/Statements/LoopStatement.t .............................. ok
t/Statements/PackageStatement.t ........................... ok
t/Statements/PhaseStatements.t ............................ ok
t/Statements/RequireStatement.t ........................... ok
t/Statements/SubStatement.t ............................... ok
t/Statements/UseNoStatement.t ............................. ok
t/Statements/WhileStatement.t ............................. ok

Test Summary Report
-------------------
t/Statements/Expressions/Value/Literal.t                (Wstat: 768 Tests: 16 Failed: 3)
  Failed tests:  1, 4-5
  Non-zero exit status: 3
Files=23, Tests=413, 18 wallclock secs ( 0.14 usr  0.03 sys + 17.62 cusr  0.77 csys = 18.56 CPU)
Result: FAIL

All of our relevant tests pass!

xsawyerx commented 4 years ago

(The failing tests above were moved to TODO after I created tickets for each. They're not urgent.)

xsawyerx commented 4 years ago

@vickenty, should we merge? I want to move forward with additional fixes.