%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.aliyun.com/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 * Thu Jun 08 2023 Python_Bot - 0.16.1-1 - Package Spec generated