#!/usr/bin/env python3 # ex: set filetype=python: """Translate an XDR specification into executable code that can be compiled for the Linux kernel.""" import logging from argparse import Namespace from lark import logger from lark.exceptions import VisitError from xdr_parse import xdr_parser, make_error_handler, XdrParseError from xdr_parse import handle_transform_error from xdr_ast import transform_parse_tree logger.setLevel(logging.DEBUG) def subcmd(args: Namespace) -> int: """Lexical and syntax check of an XDR specification""" parser = xdr_parser() with open(args.filename, encoding="utf-8") as f: source = f.read() try: parse_tree = parser.parse( source, on_error=make_error_handler(source, args.filename) ) except XdrParseError: return 1 try: transform_parse_tree(parse_tree) except VisitError as e: handle_transform_error(e, source, args.filename) return 1 return 0