diff options
Diffstat (limited to 'python-parglare.spec')
| -rw-r--r-- | python-parglare.spec | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/python-parglare.spec b/python-parglare.spec new file mode 100644 index 0000000..afe0da7 --- /dev/null +++ b/python-parglare.spec @@ -0,0 +1,183 @@ +%global _empty_manifest_terminate_build 0 +Name: python-parglare +Version: 0.16.1 +Release: 1 +Summary: A pure Python Scannerless LR/GLR parser +License: MIT +URL: https://github.com/igordejanovic/parglare +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/d2/5e/5d3f57260093df923f8dfe2ef2dc661404e949203ae2a78cd09bb055ea26/parglare-0.16.1.tar.gz +BuildArch: noarch + +Requires: python3-click +Requires: python3-wheel +Requires: python3-mkdocs +Requires: python3-mike +Requires: python3-twine +Requires: python3-flake8 +Requires: python3-coverage +Requires: python3-coveralls +Requires: python3-pytest + +%description +This is just a small example to get the general idea. This example shows how to +parse and evaluate expressions with 5 operations with different priority and +associativity. Evaluation is done using semantic/reduction actions. +The whole expression evaluator is done in under 30 lines of code! + from parglare import Parser, Grammar + grammar = r""" + E: E '+' E {left, 1} + | E '-' E {left, 1} + | E '*' E {left, 2} + | E '/' E {left, 2} + | E '^' E {right, 3} + | '(' E ')' + | number; + terminals + number: /\d+(\.\d+)?/; + """ + actions = { + "E": [lambda _, n: n[0] + n[2], + lambda _, n: n[0] - n[2], + lambda _, n: n[0] * n[2], + lambda _, n: n[0] / n[2], + lambda _, n: n[0] ** n[2], + lambda _, n: n[1], + lambda _, n: n[0]], + "number": lambda _, value: float(value), + } + g = Grammar.from_string(grammar) + parser = Parser(g, debug=True, actions=actions) + result = parser.parse("34 + 4.6 / 2 * 4^2^2 + 78") + print("Result = ", result) + # Output + # -- Debugging/tracing output with detailed info about grammar, productions, + # -- terminals and nonterminals, DFA states, parsing progress, + # -- and at the end of the output: + # Result = 700.8 + +%package -n python3-parglare +Summary: A pure Python Scannerless LR/GLR parser +Provides: python-parglare +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-parglare +This is just a small example to get the general idea. This example shows how to +parse and evaluate expressions with 5 operations with different priority and +associativity. Evaluation is done using semantic/reduction actions. +The whole expression evaluator is done in under 30 lines of code! + from parglare import Parser, Grammar + grammar = r""" + E: E '+' E {left, 1} + | E '-' E {left, 1} + | E '*' E {left, 2} + | E '/' E {left, 2} + | E '^' E {right, 3} + | '(' E ')' + | number; + terminals + number: /\d+(\.\d+)?/; + """ + actions = { + "E": [lambda _, n: n[0] + n[2], + lambda _, n: n[0] - n[2], + lambda _, n: n[0] * n[2], + lambda _, n: n[0] / n[2], + lambda _, n: n[0] ** n[2], + lambda _, n: n[1], + lambda _, n: n[0]], + "number": lambda _, value: float(value), + } + g = Grammar.from_string(grammar) + parser = Parser(g, debug=True, actions=actions) + result = parser.parse("34 + 4.6 / 2 * 4^2^2 + 78") + print("Result = ", result) + # Output + # -- Debugging/tracing output with detailed info about grammar, productions, + # -- terminals and nonterminals, DFA states, parsing progress, + # -- and at the end of the output: + # Result = 700.8 + +%package help +Summary: Development documents and examples for parglare +Provides: python3-parglare-doc +%description help +This is just a small example to get the general idea. This example shows how to +parse and evaluate expressions with 5 operations with different priority and +associativity. Evaluation is done using semantic/reduction actions. +The whole expression evaluator is done in under 30 lines of code! + from parglare import Parser, Grammar + grammar = r""" + E: E '+' E {left, 1} + | E '-' E {left, 1} + | E '*' E {left, 2} + | E '/' E {left, 2} + | E '^' E {right, 3} + | '(' E ')' + | number; + terminals + number: /\d+(\.\d+)?/; + """ + actions = { + "E": [lambda _, n: n[0] + n[2], + lambda _, n: n[0] - n[2], + lambda _, n: n[0] * n[2], + lambda _, n: n[0] / n[2], + lambda _, n: n[0] ** n[2], + lambda _, n: n[1], + lambda _, n: n[0]], + "number": lambda _, value: float(value), + } + g = Grammar.from_string(grammar) + parser = Parser(g, debug=True, actions=actions) + result = parser.parse("34 + 4.6 / 2 * 4^2^2 + 78") + print("Result = ", result) + # Output + # -- Debugging/tracing output with detailed info about grammar, productions, + # -- terminals and nonterminals, DFA states, parsing progress, + # -- and at the end of the output: + # Result = 700.8 + +%prep +%autosetup -n parglare-0.16.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-parglare -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 17 2023 Python_Bot <Python_Bot@openeuler.org> - 0.16.1-1 +- Package Spec generated |
