Bläddra i källkod

add `--verbose` option & make warnings comments

fixup! make warnings comments
tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.11.0
MegaIng1 4 år sedan
förälder
incheckning
2700b794b9
3 ändrade filer med 43 tillägg och 14 borttagningar
  1. +38
    -10
      lark/tools/__init__.py
  2. +2
    -2
      lark/tools/serialize.py
  3. +3
    -2
      lark/tools/standalone.py

+ 38
- 10
lark/tools/__init__.py Visa fil

@@ -1,9 +1,16 @@
import sys
from argparse import ArgumentParser, FileType
from lark import Lark
try:
from textwrap import indent
except ImportError:
def indent(text, prefix):
return ''.join(prefix + line for line in text.splitlines(True))
from logging import DEBUG, INFO, WARN, ERROR
import warnings

base_argparser = ArgumentParser(add_help=False, epilog='Look at the Lark documentation for more info on the options')
from lark import Lark, logger

lalr_argparser = ArgumentParser(add_help=False, epilog='Look at the Lark documentation for more info on the options')

flags = [
('d', 'debug'),
@@ -16,22 +23,43 @@ flags = [

options = ['start', 'lexer']

base_argparser.add_argument('-s', '--start', action='append', default=[])
base_argparser.add_argument('-l', '--lexer', default='contextual', choices=('standard', 'contextual'))
k = {'encoding':'utf-8'} if sys.version_info > (3, 4) else {}
base_argparser.add_argument('-o', '--out', type=FileType('w', **k), default=sys.stdout, help='the output file (default=stdout)')
base_argparser.add_argument('grammar_file', type=FileType('r', **k), help='A valid .lark file')
lalr_argparser.add_argument('-v', '--verbose', action='count', default=0, help="Increase Logger output level, up to three times")
lalr_argparser.add_argument('-s', '--start', action='append', default=[])
lalr_argparser.add_argument('-l', '--lexer', default='contextual', choices=('standard', 'contextual'))
k = {'encoding': 'utf-8'} if sys.version_info > (3, 4) else {}
lalr_argparser.add_argument('-o', '--out', type=FileType('w', **k), default=sys.stdout, help='the output file (default=stdout)')
lalr_argparser.add_argument('grammar_file', type=FileType('r', **k), help='A valid .lark file')

for f in flags:
if isinstance(f, tuple):
options.append(f[1])
base_argparser.add_argument('-' + f[0], '--' + f[1], action='store_true')
lalr_argparser.add_argument('-' + f[0], '--' + f[1], action='store_true')
else:
options.append(f)
base_argparser.add_argument('--' + f, action='store_true')
lalr_argparser.add_argument('--' + f, action='store_true')


def build_lalr(namespace):
logger.setLevel((ERROR, WARN, INFO, DEBUG)[min(namespace.verbose, 3)])
if len(namespace.start) == 0:
namespace.start.append('start')
kwargs = {n: getattr(namespace, n) for n in options}
return Lark(namespace.grammar_file, parser='lalr', **kwargs), namespace.out
return Lark(namespace.grammar_file, parser='lalr', **kwargs), namespace.out


def showwarning_as_comment(message, category, filename, lineno, file=None, line=None):
# Based on warnings._showwarnmsg_impl
text = warnings.formatwarning(message, category, filename, lineno, line)
text = indent(text, '# ')
if file is None:
file = sys.stderr
if file is None:
return
try:
file.write(text)
except OSError:
pass


def make_warnings_comments():
warnings.showwarning = showwarning_as_comment

+ 2
- 2
lark/tools/serialize.py Visa fil

@@ -5,11 +5,11 @@ import json
from lark import Lark
from lark.grammar import RuleOptions, Rule
from lark.lexer import TerminalDef
from lark.tools import base_argparser, build_lalr
from lark.tools import lalr_argparser, build_lalr

import argparse

argparser = argparse.ArgumentParser(prog='python -m lark.tools.serialize', parents=[base_argparser],
argparser = argparse.ArgumentParser(prog='python -m lark.tools.serialize', parents=[lalr_argparser],
description="Lark Serialization Tool - Stores Lark's internal state & LALR analysis as a JSON file",
epilog='Look at the Lark documentation for more info on the options')



+ 3
- 2
lark/tools/standalone.py Visa fil

@@ -40,7 +40,7 @@ from warnings import warn

import lark
from lark import Lark
from lark.tools import base_argparser, build_lalr
from lark.tools import lalr_argparser, build_lalr, make_warnings_comments


from lark.grammar import RuleOptions, Rule
@@ -157,8 +157,9 @@ def gen_standalone(lark_inst, output=None, out=sys.stdout):


if __name__ == '__main__':
make_warnings_comments()
parser = ArgumentParser(prog="prog='python -m lark.tools.standalone'", description="Lark Stand-alone Generator Tool",
parents=[base_argparser], epilog='Look at the Lark documentation for more info on the options')
parents=[lalr_argparser], epilog='Look at the Lark documentation for more info on the options')
parser.add_argument("old_start", nargs='?', help=SUPPRESS)
ns = parser.parse_args()
if ns.old_start is not None:


Laddar…
Avbryt
Spara