Browse Source

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 years ago
parent
commit
2700b794b9
3 changed files with 43 additions and 14 deletions
  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 View File

@@ -1,9 +1,16 @@
import sys import sys
from argparse import ArgumentParser, FileType 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 = [ flags = [
('d', 'debug'), ('d', 'debug'),
@@ -16,22 +23,43 @@ flags = [


options = ['start', 'lexer'] 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: for f in flags:
if isinstance(f, tuple): if isinstance(f, tuple):
options.append(f[1]) 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: else:
options.append(f) options.append(f)
base_argparser.add_argument('--' + f, action='store_true')
lalr_argparser.add_argument('--' + f, action='store_true')



def build_lalr(namespace): def build_lalr(namespace):
logger.setLevel((ERROR, WARN, INFO, DEBUG)[min(namespace.verbose, 3)])
if len(namespace.start) == 0: if len(namespace.start) == 0:
namespace.start.append('start') namespace.start.append('start')
kwargs = {n: getattr(namespace, n) for n in options} 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 View File

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


import argparse 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", 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') epilog='Look at the Lark documentation for more info on the options')




+ 3
- 2
lark/tools/standalone.py View File

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


import lark import lark
from lark 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 from lark.grammar import RuleOptions, Rule
@@ -157,8 +157,9 @@ def gen_standalone(lark_inst, output=None, out=sys.stdout):




if __name__ == '__main__': if __name__ == '__main__':
make_warnings_comments()
parser = ArgumentParser(prog="prog='python -m lark.tools.standalone'", description="Lark Stand-alone Generator Tool", 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) parser.add_argument("old_start", nargs='?', help=SUPPRESS)
ns = parser.parse_args() ns = parser.parse_args()
if ns.old_start is not None: if ns.old_start is not None:


Loading…
Cancel
Save