diff options
author | Paul McGuire <ptmcg@users.noreply.github.com> | 2018-01-06 23:38:53 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-06 23:38:53 -0600 |
commit | 430c5ad767cc946e9da7cd5f4673a4e3bd135a3c (patch) | |
tree | 5a7df11e0fd52ab320b0ef3e670e260f315ca9ae /examples/indentedGrammarExample.py | |
parent | f1d12567a8da4d254e6d62bb0d650c87c7d0bb89 (diff) | |
parent | d953150a6db3ac247a64b047edc2df7156f3e56b (diff) | |
download | pyparsing-git-430c5ad767cc946e9da7cd5f4673a4e3bd135a3c.tar.gz |
Merge pull request #1 from cngkaygusuz/master
Add Scrutinizer-CI configuration and other niceties
Diffstat (limited to 'examples/indentedGrammarExample.py')
-rw-r--r-- | examples/indentedGrammarExample.py | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/examples/indentedGrammarExample.py b/examples/indentedGrammarExample.py new file mode 100644 index 0000000..442e6a4 --- /dev/null +++ b/examples/indentedGrammarExample.py @@ -0,0 +1,54 @@ +# indentedGrammarExample.py
+#
+# Copyright (c) 2006,2016 Paul McGuire
+#
+# A sample of a pyparsing grammar using indentation for
+# grouping (like Python does).
+#
+# Updated to use indentedBlock helper method.
+#
+
+from pyparsing import *
+
+data = """\
+def A(z):
+ A1
+ B = 100
+ G = A2
+ A2
+ A3
+B
+def BB(a,b,c):
+ BB1
+ def BBA():
+ bba1
+ bba2
+ bba3
+C
+D
+def spam(x,y):
+ def eggs(z):
+ pass
+"""
+
+
+indentStack = [1]
+stmt = Forward()
+suite = indentedBlock(stmt, indentStack)
+
+identifier = Word(alphas, alphanums)
+funcDecl = ("def" + identifier + Group( "(" + Optional( delimitedList(identifier) ) + ")" ) + ":")
+funcDef = Group( funcDecl + suite )
+
+rvalue = Forward()
+funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")")
+rvalue << (funcCall | identifier | Word(nums))
+assignment = Group(identifier + "=" + rvalue)
+stmt << ( funcDef | assignment | identifier )
+
+module_body = OneOrMore(stmt)
+
+print(data)
+parseTree = module_body.parseString(data)
+parseTree.pprint()
+
|