Table of Contents

Class LabelScanUtil

Namespace
Hi.NcParsers.EvaluationSyntaxs
Assembly
HiMech.dll

Shared “re-segment a file and skip pieces until a label matches” scan, used by both FanucGotoSyntax (unconditional GOTO redirect) and SubProgramReturnSyntax (M99 P{seq} jump into the caller file). Reads the file via ReadLines(int, string, string), segments through the provided ISegmenter, runs the probeSyntaxes on each candidate block to extract IndexNote.Number, and returns the slice from the first matching block to EOF.

Returns null when no block matches — the caller's responsibility to surface the appropriate diagnostic. The probes are idempotent because the downstream Parsing bundle re-runs the same syntaxes on the yielded pieces with no-op effect (the regex patterns no longer match once the N-prefix is consumed and the parenthesised comment stripped).

public static class LabelScanUtil
Inheritance
LabelScanUtil
Inherited Members

Methods

SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List<ISituNcSyntax>, NcDiagnosticProgress)

Re-segments absPath from offset 0, scans for a block whose Number equals targetN (after the probeSyntaxes have stamped it in-place), and returns the sub-list of pieces from that block to EOF. Pieces are produced via GetSyntaxPieces(ISegmenter, IEnumerable<IndexedFileLine>, int, NcDiagnosticProgress, CancellationToken) with SentenceIndex stamped starting at sentenceIndexBegin. Returns null when no match is found; the caller emits its own brand-specific “label not found” diagnostic.

The predicate is fixed at the IndexNote.Number section — the section name comes from nameof() so a future rename propagates without re-edits. Reconfigurability for non-standard label-output sections is achieved by replacing the probe syntaxes (the natural extension point) rather than parameterising the predicate path here: a probe stack that doesn't end up writing IndexNote on candidates is by definition not participating in this scan.

public static List<SyntaxPiece> SegmentAndSkipUntilLabel(ISegmenter segmenter, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List<ISituNcSyntax> probeSyntaxes, NcDiagnosticProgress diag)

Parameters

segmenter ISegmenter

Segmenter used to slice the file into Sentence blocks.

absPath string

Absolute path to read line content from.

labelPath string

Project-relative path to stamp on each line's IndexedFileLine label (so diagnostics anchor to a relative form, not the resolver's transient absolute path).

fileIndex int

Fresh file index to stamp on each scanned line, allocated by the caller from FileIndexCounterDependency.

sentenceIndexBegin int

Starting execution-order index for the produced pieces.

targetN int

Integer label target to match against Number.

probeSyntaxes List<ISituNcSyntax>

Ordered list of helper syntaxes to run on each candidate block before the predicate check (typically comment-stripper(s) followed by a head-index parser). May be null.

diag NcDiagnosticProgress

Sink for any diagnostics produced by the probe syntaxes (e.g. comment-stripper malformed-comment warnings).

Returns

List<SyntaxPiece>