1#!/usr/bin/env python3 2# ex: set filetype=python: 3 4"""Translate an XDR specification into executable code that 5can be compiled for the Linux kernel.""" 6 7import logging 8 9from argparse import Namespace 10from lark import logger 11from lark.exceptions import VisitError 12 13from xdr_parse import xdr_parser, make_error_handler, XdrParseError 14from xdr_parse import handle_transform_error 15from xdr_ast import transform_parse_tree 16 17logger.setLevel(logging.DEBUG) 18 19 20def 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