eliben / pycparser

:snake: Complete C99 parser in pure Python
Other
3.21k stars 612 forks source link

Unable to parse labels at end of block #528

Open LuciaMartinezGavier opened 6 months ago

LuciaMartinezGavier commented 6 months ago

Raises pycparser.plyparser.ParseError when a label is at the end of a block. For example, the following code fails:

from pycparser import CParser

ast =  CParser().parse(
    """
    int main(){
        label:
    }
    """
)

As this is valid C, I think it shouldn't throw that exception.

Adding a ; (or any other code line) after the label fixes this issue

from pycparser import CParser

ast =  CParser().parse(
    """
    int main(){
        label:;
    }
    """
)
eliben commented 6 months ago

Thanks for the report.

Strictly reading the standard, a labeled-statement requires a statement following the label:, e.g. see section A.2.3 in https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf

gcc also issues a warning here in "strict" mode.

I don't object to adding the ability to support this in pycparser, if a PR can be made that doesn't complicate the parser too much.