"""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 generators.source_top import XdrSourceTopGenerator from generators.enum import XdrEnumGenerator from generators.pointer import XdrPointerGenerator from generators.program import XdrProgramGenerator from generators.typedef import XdrTypedefGenerator from generators.struct import XdrStructGenerator from generators.union import XdrUnionGenerator
from xdr_ast import transform_parse_tree, _RpcProgram, Specification from xdr_ast import _XdrAst, _XdrEnum, _XdrPointer from xdr_ast import _XdrStruct, _XdrTypedef, _XdrUnion
from xdr_parse import xdr_parser, set_xdr_annotate
logger.setLevel(logging.INFO)
def emit_source_decoder(node: _XdrAst, language: str, peer: str) -> None: """Emit one XDR decoder function for a source file""" if isinstance(node, _XdrEnum):
gen = XdrEnumGenerator(language, peer) elif isinstance(node, _XdrPointer):
gen = XdrPointerGenerator(language, peer) elif isinstance(node, _XdrTypedef):
gen = XdrTypedefGenerator(language, peer) elif isinstance(node, _XdrStruct):
gen = XdrStructGenerator(language, peer) elif isinstance(node, _XdrUnion):
gen = XdrUnionGenerator(language, peer) elif isinstance(node, _RpcProgram):
gen = XdrProgramGenerator(language, peer) else: return
gen.emit_decoder(node)
def emit_source_encoder(node: _XdrAst, language: str, peer: str) -> None: """Emit one XDR encoder function for a source file""" if isinstance(node, _XdrEnum):
gen = XdrEnumGenerator(language, peer) elif isinstance(node, _XdrPointer):
gen = XdrPointerGenerator(language, peer) elif isinstance(node, _XdrTypedef):
gen = XdrTypedefGenerator(language, peer) elif isinstance(node, _XdrStruct):
gen = XdrStructGenerator(language, peer) elif isinstance(node, _XdrUnion):
gen = XdrUnionGenerator(language, peer) elif isinstance(node, _RpcProgram):
gen = XdrProgramGenerator(language, peer) else: return
gen.emit_encoder(node)
gen = XdrSourceTopGenerator(language, "server")
gen.emit_source(filename, root)
for definition in root.definitions:
emit_source_decoder(definition.value, language, "server") for definition in root.definitions:
emit_source_encoder(definition.value, language, "server")
gen = XdrSourceTopGenerator(language, "client")
gen.emit_source(filename, root)
print("") for definition in root.definitions:
emit_source_encoder(definition.value, language, "client") for definition in root.definitions:
emit_source_decoder(definition.value, language, "client")
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.