onlinejudge_template.analyzer.parser module

the module to parse format strings and construct format trees

この module はフォーマット文字列を構文解析しフォーマット木を作ります。 たとえば

N
P_0 P_1 \cdots P_{N-1}
Q_0 Q_1 \cdots Q_{N-1}

という入力フォーマット文字列が与えられれば

sequence([
    item("N"),
    newline(),
    loop(counter="i", size="N",
        item("P", indices="i")
    ),
    newline(),
    loop(counter="i", size="N",
        item("Q", indices="i")
    ),
    newline(),
])

に相当する木構造 (FormatNode) を返します。

class onlinejudge_template.analyzer.parser.DotsParserNode(*, first: onlinejudge_template.analyzer.parser.ParserNode, last: onlinejudge_template.analyzer.parser.ParserNode, line: int, column: int)[source]

Bases: onlinejudge_template.analyzer.parser.ParserNode

exception onlinejudge_template.analyzer.parser.FormatStringParserError[source]

Bases: onlinejudge_template.types.AnalyzerError

class onlinejudge_template.analyzer.parser.ItemParserNode(*, name: str, indices: Tuple[str, ...] = (), line: int, column: int)[source]

Bases: onlinejudge_template.analyzer.parser.ParserNode

class onlinejudge_template.analyzer.parser.NewlineParserNode(*, line: int, column: int)[source]

Bases: onlinejudge_template.analyzer.parser.ParserNode

class onlinejudge_template.analyzer.parser.ParserNode(*, line: int, column: int)[source]

Bases: abc.ABC

an internal representation which Yacc generates

class onlinejudge_template.analyzer.parser.SequenceParserNode(*, items: List[onlinejudge_template.analyzer.parser.ParserNode], line: int, column: int)[source]

Bases: onlinejudge_template.analyzer.parser.ParserNode

onlinejudge_template.analyzer.parser.analyze_parsed_node(node: onlinejudge_template.analyzer.parser.ParserNode) → onlinejudge_template.types.FormatNode[source]

translates an internal representation ParserNode to a result tree FormatNode

Raises:FormatStringParserError
onlinejudge_template.analyzer.parser.build_lexer() → ply.lex.Lexer[source]
onlinejudge_template.analyzer.parser.build_parser(*, input: str) → ply.yacc.LRParser[source]
onlinejudge_template.analyzer.parser.extend_loop_node(a: onlinejudge_template.types.FormatNode, b: onlinejudge_template.types.FormatNode, *, loop: onlinejudge_template.types.LoopNode) → Optional[onlinejudge_template.types.FormatNode][source]
onlinejudge_template.analyzer.parser.list_used_names(node: onlinejudge_template.types.FormatNode) → Set[str][source]
onlinejudge_template.analyzer.parser.run(pre: str) → onlinejudge_template.types.FormatNode[source]
Raises:FormatStringParserError
onlinejudge_template.analyzer.parser.zip_nodes(a: onlinejudge_template.types.FormatNode, b: onlinejudge_template.types.FormatNode, *, name: NewType.<locals>.new_type, size: Optional[NewType.<locals>.new_type]) → Tuple[onlinejudge_template.types.FormatNode, Optional[NewType.<locals>.new_type]][source]
Raises:FormatStringParserError