Where can I find a formal grammar for the Perl programming language?

前端 未结 3 1281
春和景丽
春和景丽 2021-02-12 21:23

I understand that the Perl syntax is ambiguous and that its disambiguation is non-trivial (sometimes involving execution of code during the compile phase). Regardless, does Perl

3条回答
  •  臣服心动
    2021-02-12 21:38

    From perlfaq7

    Can I get a BNF/yacc/RE for the Perl language?

    There is no BNF, but you can paw your way through the yacc grammar in perly.y in the source distribution if you're particularly brave. The grammar relies on very smart tokenizing code, so be prepared to venture into toke.c as well.

    In the words of Chaim Frenkel: "Perl's grammar can not be reduced to BNF. The work of parsing perl is distributed between yacc, the lexer, smoke and mirrors."

    To see the wonderful set of examples of WHY it's pretty much near impossible to parse Perl due to context influences, please look into Randal Schwartz's post: On Parsing Perl

    In addition, please see the discussion in "Perl 5 Internals (Chapter 5. The Lexer and the Parser)" by Simon Cozens.


    Please note that the answer is different for Perl6:

    • There exists a grammar for Perl6

    • Rakudo Perl has its own version of the grammar

提交回复
热议问题