#!/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 UnexpectedInput from xdr_parse import xdr_parser from xdr_ast import transform_parse_tree logger.setLevel(logging.DEBUG) def handle_parse_error(e: UnexpectedInput) -> bool: """Simple parse error reporting, no recovery attempted""" print(e) return True 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: parse_tree = parser.parse(f.read(), on_error=handle_parse_error) transform_parse_tree(parse_tree) return 0