Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/net/sunrpc/xdrgen/subcmds/lint.py
52072 views
1
#!/usr/bin/env python3
2
# ex: set filetype=python:
3
4
"""Translate an XDR specification into executable code that
5
can be compiled for the Linux kernel."""
6
7
import logging
8
9
from argparse import Namespace
10
from lark import logger
11
from lark.exceptions import VisitError
12
13
from xdr_parse import xdr_parser, make_error_handler, XdrParseError
14
from xdr_parse import handle_transform_error
15
from xdr_ast import transform_parse_tree
16
17
logger.setLevel(logging.DEBUG)
18
19
20
def subcmd(args: Namespace) -> int:
21
"""Lexical and syntax check of an XDR specification"""
22
23
parser = xdr_parser()
24
with open(args.filename, encoding="utf-8") as f:
25
source = f.read()
26
try:
27
parse_tree = parser.parse(
28
source, on_error=make_error_handler(source, args.filename)
29
)
30
except XdrParseError:
31
return 1
32
try:
33
transform_parse_tree(parse_tree)
34
except VisitError as e:
35
handle_transform_error(e, source, args.filename)
36
return 1
37
38
return 0
39
40