From 51313c4773f0af62121b2192ff0cca9560b7ab44 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 17 Jan 2021 19:42:11 -0800 Subject: Adding more language grammars --- grammars/python.bp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 grammars/python.bp (limited to 'grammars/python.bp') diff --git a/grammars/python.bp b/grammars/python.bp new file mode 100644 index 0000000..0683c0a --- /dev/null +++ b/grammars/python.bp @@ -0,0 +1,30 @@ +# Syntax definitions for some Python-specific patterns +# +# NOTE: this is *NOT* intended to be a complete definition of the language's +# syntax! Providing a full language grammar is overkill, because the intended +# use case is finding/replacing string patterns. This task does not require a +# full parse tree, and having one makes the task considerably more complicated. +# See the accompanying README.md for more info. + +comment: `# ..$ +string: quoted-string / `b quoted-string / `f quoted-string +quoted-string: "'''".."'''" % \n / '"""'..'"""' % \n / `"..`" % (`\.) / `'..`' % (`\.) +dict: `{__`} / `{ __ +(expr__`:__expr) % (__`,__) __ `} +set: `{ __ +expr % (__`,__) __ `} +list: `[ __ +expr % (__`,__) __ `] +keyword: |("and" / "as" / "assert" / "break" / "class" / "continue" / "def" / + "del" / "elif" / "else" / "except" / "finally" / "for" / "from" / + "global" / "if" / "import" / "in" / "is" / "lambda" / "None" / "nonlocal" / + "not" / "or" / "pass" / "raise" / "return" / "try" / "while" / + "with" / "yield")| +expr: (function-call / lambda / string / dict / set / list / id / number / `(__expr__`)) *(method/attr/index) +method: `. function-call +attr: `. id +index: `[__expr[__`:__expr [__`:__expr]]__`] +tuple: `(__`) / +(__expr__`,) [__expr] +empty-tuple: `(__`) +class: |"class"|_id`: +(\N ..$) +function: function-def +(\N ..$) +function-def: |"def"|_id parens `: +function-call: !<"def " id parens +lambda: |"lambda"| .. `:__expr -- cgit v1.2.3