Archived
531 lines
32 KiB
HTML
531 lines
32 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Namespace Hi.NcParsers.ParsingSyntaxs.Siemens | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Namespace Hi.NcParsers.ParsingSyntaxs.Siemens | HiAPI-C# 2025 ">
|
|
|
|
|
|
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
|
<link rel="stylesheet" href="../public/docfx.min.css">
|
|
<link rel="stylesheet" href="../public/main.css">
|
|
<meta name="docfx:navrel" content="../toc.html">
|
|
<meta name="docfx:tocrel" content="toc.html">
|
|
|
|
<meta name="docfx:rel" content="../">
|
|
|
|
|
|
|
|
<meta name="loc:inThisArticle" content="In this article">
|
|
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
|
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
|
<meta name="loc:tocFilter" content="Filter by title">
|
|
<meta name="loc:nextArticle" content="Next">
|
|
<meta name="loc:prevArticle" content="Previous">
|
|
<meta name="loc:themeLight" content="Light">
|
|
<meta name="loc:themeDark" content="Dark">
|
|
<meta name="loc:themeAuto" content="Auto">
|
|
<meta name="loc:changeTheme" content="Change theme">
|
|
<meta name="loc:copy" content="Copy">
|
|
<meta name="loc:downloadPdf" content="Download PDF">
|
|
|
|
<script type="module" src="./../public/docfx.min.js"></script>
|
|
|
|
<script>
|
|
const theme = localStorage.getItem('theme') || 'auto'
|
|
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
|
|
<header class="bg-body border-bottom">
|
|
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
|
<div class="container-xxl flex-nowrap">
|
|
<a class="navbar-brand" href="../index.html">
|
|
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
|
|
|
</a>
|
|
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
|
<i class="bi bi-three-dots"></i>
|
|
</button>
|
|
<div class="collapse navbar-collapse" id="navpanel">
|
|
<div id="navbar">
|
|
<form class="search" role="search" id="search">
|
|
<i class="bi bi-search"></i>
|
|
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
</header>
|
|
|
|
<main class="container-xxl">
|
|
<div class="toc-offcanvas">
|
|
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
|
<div class="offcanvas-header">
|
|
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
|
</div>
|
|
<div class="offcanvas-body">
|
|
<nav class="toc" id="toc"></nav>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="content">
|
|
<div class="actionbar">
|
|
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
|
<i class="bi bi-list"></i>
|
|
</button>
|
|
|
|
<nav id="breadcrumb"></nav>
|
|
</div>
|
|
|
|
<article data-uid="Hi.NcParsers.ParsingSyntaxs.Siemens">
|
|
|
|
<h1 id="Hi_NcParsers_ParsingSyntaxs_Siemens" data-uid="Hi.NcParsers.ParsingSyntaxs.Siemens" class="text-break">Namespace Hi.NcParsers.ParsingSyntaxs.Siemens</h1>
|
|
<div class="markdown level0 summary"></div>
|
|
<div class="markdown level0 conceptual"></div>
|
|
<div class="markdown level0 remarks"></div>
|
|
|
|
<h3 id="classes">
|
|
Classes
|
|
</h3>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html">SiemensCallStatementSyntax</a></dt>
|
|
<dd><p>Captures a whole-line Siemens subprogram-call statement into
|
|
<code>Parsing.SiemensCall</code> for
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax.html">SiemensSubProgramCallSyntax</a> to
|
|
resolve (inline the file) or safe-skip (structured warning, zero
|
|
motion). Two shapes are owned:</p>
|
|
<ul><li><b>Parenthesized call, any identifier</b> —
|
|
<code>HQ_FC(1,50,75,160)</code>, <code>L_39(0.000,0.000)</code>,
|
|
<code>HH_ROBOT(2)</code> → <code>{ "Name": "HQ_FC", "Args": ["1","50",…] }</code>.
|
|
The argument grammar (complete quoted runs admitted, quote-aware comma
|
|
split) is <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html">SiemensCycleCallSyntax</a>'s, reused verbatim.</li><li><b>Bare-word call</b> — <code>L9810</code>, <code>L_ZYM91</code>,
|
|
<code>HH_ROBOTOFF</code>, with an optional repeat count <code>L123 P3</code> →
|
|
<code>{ "Name": "L123", "P": 3 }</code>. Restricted to <code>L</code>-leading or
|
|
underscore-bearing identifiers on purpose: this syntax runs ahead of
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html">FlagSyntax</a> and a generic bare-identifier capture would
|
|
steal TRAORI-class words before their consumers ever saw them — the
|
|
same underscore heuristic <a class="xref" href="Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html#Hi_NcParsers_Syntaxs_SiemensSyntaxUtil_NamedIdentPattern">NamedIdentPattern</a>
|
|
blessed for assignments (corpus named entities all carry an
|
|
underscore; controller vocabulary never does). On real Sinumerik any
|
|
bare identifier can be a by-name call; widening further is a
|
|
corpus-driven follow-up.</li></ul>
|
|
<p>
|
|
Placement: last of the dedicated statement owners and still before
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html">SiemensQuotedStatementSyntax</a> — quoted arguments must
|
|
reach this capture (paired quotes ride inside the args body; a line
|
|
whose quotes do not pair falls through whole to the quarantine).
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html#Hi_NcParsers_ParsingSyntaxs_Siemens_SiemensCallStatementSyntax_ExcludedNames">ExcludedNames</a> keeps this catch-all from re-owning
|
|
statements that belong elsewhere (default: <code>WRITE</code> stays with
|
|
the quoted-statement quarantine; control-flow words are reserved for
|
|
their future syntaxes). Whole-line anchored: a call mixed with other
|
|
tokens (<code>L9810 M8</code>) does not match and stays visible in the
|
|
unparsed warning.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html">SiemensCycleCallSyntax</a></dt>
|
|
<dd><p>Captures whitelisted Siemens cycle calls of the shape
|
|
<code>NAME(arg1,arg2,…)</code> (or the bare <code>NAME</code> form) from the
|
|
unparsed line text into a <code>Parsing.NAME</code> sub-object holding the
|
|
verbatim positional argument strings:
|
|
<code>CYCLE832(0.05,_ORI_FINISH,0.8)</code> →
|
|
<code>Parsing.CYCLE832 = { “Args”: [“0.05”, “_ORI_FINISH”, “0.8”] }</code>.
|
|
Empty slots (<code>,,</code>) stay as empty strings; <code>NAME()</code> yields an
|
|
empty <code>Args</code> array; a bare <code>NAME</code> yields
|
|
<code>{ “Bare”: true }</code> (a marker — empty sub-objects would be swept
|
|
by intermediate <code>CleanupParsing</code> calls before the consumer runs).
|
|
A brand Logic syntax consumes the sub-object
|
|
(e.g. <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax.html">SiemensPathSmoothingSyntax</a>
|
|
for CYCLE832,
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html">SiemensCycle800TiltSyntax</a> for
|
|
CYCLE800).</p>
|
|
<p>
|
|
Strictly whitelist-based (<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html#Hi_NcParsers_ParsingSyntaxs_Siemens_SiemensCycleCallSyntax_CycleNames">CycleNames</a>, default
|
|
<code>CYCLE832</code> + <code>CYCLE800</code>) — a generic <code>WORD(args)</code>
|
|
capture would eat OEM/unknown calls (<code>HQ_FC(...)</code>,
|
|
<code>L_39(...)</code>) whose safe-skip handling is a separate work item,
|
|
and every unlisted call deliberately stays whole in
|
|
<a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html#Hi_NcParsers_Keywords_IUnparsedTextDef_UnparsedText">UnparsedText</a> for the visible
|
|
<code>UnparsedText--Remaining</code> warning.
|
|
</p>
|
|
<p>
|
|
Must be placed early in the Parsing bundle — before the assignment
|
|
and tag-value syntaxes: argument tokens standing after <code>(</code> or
|
|
<code>,</code> (<code>_ORI_FINISH</code>, or axis-letter shapes like <code>V1</code>)
|
|
would otherwise be shredded by
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html">NamedVarAssignmentSyntax</a> / tag-value captures.
|
|
Quoted arguments are supported for CYCLE800's swivel-data-record
|
|
name (<code>CYCLE800(1,"TC1",…)</code>): the args body admits complete
|
|
<code>"…"</code> runs (which may hide <code>)</code> or <code>,</code>) and the
|
|
comma split is quote-aware; quotes are kept verbatim in the captured
|
|
arg string so the consumer distinguishes <code>"0"</code> (name) from
|
|
<code>0</code> (number). A line whose quotes do not pair falls through
|
|
whole to <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html">SiemensQuotedStatementSyntax</a>'s quarantine.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html">SiemensDefStatementSyntax</a></dt>
|
|
<dd><p>Consumes Sinumerik variable declarations
|
|
(<code>DEF REAL _X_HOME=155.5, _SAFE_Z</code> / <code>DEF INT N_ST=3</code>) and
|
|
lowers each declared name into <code>Parsing.Assignments</code>: initialised
|
|
names carry their initialiser expression text (the Evaluation bundle
|
|
resolves and routes it into <code>Vars.Named</code> like any named
|
|
assignment), bare names carry <code>“0”</code> — Sinumerik default-initialises
|
|
numeric types to zero, so a later <code>G0 Z=_SAFE_Z</code> reads 0 instead of
|
|
failing vacant.</p>
|
|
<p>
|
|
Must run before <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html">NamedVarAssignmentSyntax</a> in
|
|
the Parsing bundle: on a DEF line that syntax would capture
|
|
<code>_X_HOME=155.5</code> but strand <code>DEF REAL</code> (and the comma list) as
|
|
unparsed residue. Initialiser expressions are delimited by the
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser.html">SiemensExpressionParser</a> longest-valid-prefix rule, so
|
|
parenthesised arithmetic and whitespace survive; a non-numeric type or
|
|
unparsable initialiser leaves the whole statement untouched (visible as
|
|
residue) rather than half-consuming it.
|
|
</p>
|
|
<p>
|
|
<code>BOOL</code>/<code>CHAR</code> initialise to 0 like INT; <code>STRING</code>
|
|
declarations are not lowered (string values have no numeric store) —
|
|
the statement is consumed whole so it cannot shed ghost tokens. The
|
|
declaration itself leaves no Parsing record: the lowered Assignments
|
|
entries carry the entire semantic payload, and an inert record would
|
|
only re-surface as an Unconsumed residue.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html">SiemensFrameStatementSyntax</a></dt>
|
|
<dd><p>Captures a whole Siemens frame statement (<code>TRANS/ATRANS/ROT/AROT/
|
|
ROTS/AROTS/CROTS/SCALE/ASCALE/MIRROR/AMIRROR</code>, bare or with
|
|
arguments) into a <code>Parsing.<keyword></code> sub-object.
|
|
Sinumerik requires frame instructions in a block of their own, so
|
|
the whole remaining line belongs to the statement.</p>
|
|
<p>
|
|
The consumed keywords (<code>TRANS/ATRANS/ROT/AROT/ROTS/AROTS</code> — see
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html">SiemensProgrammableFrameSyntax</a>)
|
|
are captured <b>structured</b>: each argument token becomes a
|
|
sub-key — glued axis words (<code>X0</code>, <code>Y90.</code>) and equals forms
|
|
(<code>RPL=45</code>, <code>Z=R5</code>) both supported. Literal values are
|
|
stored as JSON numbers; non-literal right-hand sides stay strings so
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> resolves them
|
|
in the Evaluation stage (<code>AROT Z=R5</code> →
|
|
<code>Parsing.AROT = { "Z": "R5" }</code>). A token outside the modeled
|
|
grammar makes the <b>whole statement</b> fall back to the verbatim
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html#Hi_NcParsers_ParsingSyntaxs_Siemens_SiemensFrameStatementSyntax_StatementKey">StatementKey</a> capture — never a half-consumed line.
|
|
</p>
|
|
<p>
|
|
The remaining keywords (<code>CROTS/SCALE/ASCALE/MIRROR/AMIRROR</code>
|
|
— zero corpus occurrences, no simulation) keep the verbatim
|
|
<code>{ "Statement": "<args>" }</code> quarantine; the Logic consumer
|
|
reports them as recognized-but-not-simulated. Either way the axis
|
|
words are kept out of reach of the quote/context-blind tag-value
|
|
syntaxes below, which would otherwise mint them into
|
|
<code>Parsing.X/Y/Z</code> and let <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a>
|
|
turn a frame statement into a very real ghost rapid.
|
|
Deferred-but-unmodeled must mean "no transform yet", never
|
|
"extra motion".
|
|
</p>
|
|
<p>
|
|
Must be placed early in the Parsing bundle — after
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html">BlockSkipSyntax</a>, before every assignment / tag-value
|
|
syntax (the <code>ROT RPL=45</code> shape would otherwise feed
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html">NamedVarAssignmentSyntax</a>).
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html">SiemensGotoParsingSyntax</a></dt>
|
|
<dd><p>Captures Siemens <code>GOTOF</code>/<code>GOTOB</code> jump statements whole into
|
|
<code>Parsing.SiemensGoto</code>. Four forms are recognised, mirroring the
|
|
Fanuc phrase-level split (<code>IF ... GOTO</code> is one phrase, not an IF
|
|
composed with a GOTO):</p>
|
|
<ul><li><code>GOTOF <label></code> / <code>GOTOB <label></code> —
|
|
unconditional forward / backward jump.</li><li><code>IF <cond> GOTOF <label></code> /
|
|
<code>IF <cond> GOTOB <label></code> — the Sinumerik
|
|
single-line conditional jump (no brackets around the condition).</li></ul>
|
|
<p>
|
|
Placement: inside the whole-statement owner group, after
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html">SiemensRepeatParsingSyntax</a> and before
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html">SiemensIfParsingSyntax</a> — the IF-jump forms carry a
|
|
strictly longer prefix than the block <code>IF <cond></code> phrase,
|
|
so this owner must win first (the block-IF owner also refuses
|
|
GOTOF/GOTOB tails defensively). Must run before the assignment
|
|
syntaxes: <code>IF R1==1 GOTOF LBL1</code> would otherwise be shredded by
|
|
the assignment capture (its LHS grammar matches <code>R1</code> and the
|
|
first <code>=</code> of <code>==</code>).
|
|
</p>
|
|
<p>
|
|
The label is captured as written (<code>LBL1</code>, <code>MARKE_A</code>, or an
|
|
<code>N<num></code> block number — both are legal Sinumerik jump
|
|
targets). The condition string is left for
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree
|
|
walk; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html">SiemensGotoSyntax</a>
|
|
consumes the section.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html">SiemensIfParsingSyntax</a></dt>
|
|
<dd><p>Captures the Siemens block-conditional phrases whole into
|
|
<code>Parsing.SiemensIf</code>: <code>IF <cond></code> (no brackets on
|
|
Sinumerik), <code>ELSE</code>, <code>ENDIF</code>. The single-line jump form
|
|
(<code>IF <cond> GOTOF <label></code>) belongs to
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html">SiemensGotoParsingSyntax</a>, which runs immediately before
|
|
this owner; a GOTOF/GOTOB tail is additionally refused here so an
|
|
ordering drift degrades to a visible unparsed warning instead of a
|
|
silently mis-captured block-IF (the Fanuc <code>(?!GOTO\b)</code>
|
|
precedent).</p>
|
|
<p>
|
|
Placement: whole-statement owner group, before the assignment
|
|
syntaxes — a condition like <code>R1==1</code> would otherwise be shredded
|
|
by the assignment capture (LHS grammar matches <code>R1</code> plus the
|
|
first <code>=</code>). The condition string is left for
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 walk;
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax.html">SiemensIfSyntax</a> consumes the
|
|
section and decides the branch.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax.html">SiemensLabelSyntax</a></dt>
|
|
<dd><p>Consumes a Siemens label at block start (<code>LBL1:</code> — identifier
|
|
followed by a colon, optionally after the <code>N</code> head index) into a
|
|
block-root <a class="xref" href="Hi.NcParsers.Keywords.Siemens.SiemensLabel.html">SiemensLabel</a> record. Labels are passive jump
|
|
targets: in the normal flow the record is pure bookkeeping (no motion,
|
|
no state), while <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html">SiemensRepeatSyntax</a>
|
|
uses this same syntax as its <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a>
|
|
probe and matches candidates on <code>SiemensLabel.Name</code>. Writing the
|
|
record at the block root (not under <code>Parsing</code>) keeps the passive
|
|
token out of <a class="xref" href="Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html">UnconsumedCheckSyntax</a>'s
|
|
audit without needing a Logic-layer consumer — mirroring how
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html">SiemensDefStatementSyntax</a> leaves no <code>Parsing.Def</code>
|
|
entry behind.</p>
|
|
<p>
|
|
Anchored at the start of the remaining unparsed text, so a label
|
|
buried mid-line is not captured (Sinumerik allows one label per block,
|
|
at block start). Text after the colon stays in
|
|
<a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html#Hi_NcParsers_Keywords_IUnparsedTextDef_UnparsedText">UnparsedText</a> for the rest of the
|
|
pipeline — <code>LBL1: G1 X0</code> executes its trailing motion normally.
|
|
The probe usage requires this syntax to stay self-sufficient: it reads
|
|
only UnparsedText and never touches the dependency list.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax.html">SiemensLoopParsingSyntax</a></dt>
|
|
<dd><p>Captures the Siemens loop-construct phrases whole, one Parsing
|
|
section per construct family:</p>
|
|
<ul><li><code>WHILE <cond></code> / <code>ENDWHILE</code> →
|
|
<code>Parsing.SiemensWhile</code>.</li><li><code>FOR <var> = <start> TO <end></code> /
|
|
<code>ENDFOR</code> → <code>Parsing.SiemensFor</code>. The start expression is
|
|
stored as a single-entry <code>Init</code> map keyed by the variable name
|
|
— the evaluator's pass-2 tree walk rewrites values only, never
|
|
keys, so the loop variable's name survives even when it collides
|
|
with a set named variable. Literal start/end bounds are written as
|
|
numeric JSON values directly (writer decides the node type);
|
|
expressions stay strings for the evaluator.</li><li>bare <code>REPEAT</code> / <code>UNTIL <cond></code> →
|
|
<code>Parsing.SiemensRepeatUntil</code>. Only the label-less form is
|
|
taken — <code>REPEAT LBL1 ...</code> is the P4 section repeat owned by
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html">SiemensRepeatParsingSyntax</a>, which runs earlier in the
|
|
statement group.</li><li><code>LOOP</code> / <code>ENDLOOP</code> → <code>Parsing.SiemensLoop</code>.</li></ul>
|
|
<p>
|
|
Placement: whole-statement owner group, after
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html">SiemensGotoParsingSyntax</a> / <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html">SiemensIfParsingSyntax</a>
|
|
and before the assignment syntaxes — <code>FOR R1=0 TO 10</code> would
|
|
otherwise be shredded by the assignment capture (<code>R1=0</code> is a
|
|
legal assignment shape and the <code>TO 10</code> tail strands).
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html">SiemensLoopSyntax</a> consumes all
|
|
four sections against its shared loop-frame stack.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax.html">SiemensMcallSyntax</a></dt>
|
|
<dd><p>Captures a Siemens <code>MCALL</code> modal-call statement whole into a
|
|
<code>Parsing.MCALL</code> sub-object:
|
|
<code>MCALL CYCLE81(500.,327.9137,0.5,324.564,,,0,1,0)</code> →
|
|
<code>{ “CycleName”: “CYCLE81”, “Args”: ["500.", …] }</code>; a bare
|
|
<code>MCALL</code> (modal cancel) → <code>{ “Bare”: true }</code>; a
|
|
parenthesis-less callee (<code>MCALL L123</code>) keeps
|
|
<code>CycleName</code> without <code>Args</code>. The Logic consumer
|
|
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax.html">SiemensModalCycleSyntax</a>) maps the
|
|
supported <code>CYCLE8x</code> family onto the shared canned-cycle modal
|
|
machinery and warns on everything else.</p>
|
|
<p>
|
|
Whole-statement owner: MCALL lines are standalone in the corpus, and
|
|
owning the full statement keeps the cycle's positional arguments away
|
|
from the assignment / tag-value syntaxes (same shredding hazard as
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html">SiemensCycleCallSyntax</a>, whose argument grammar —
|
|
including complete quoted runs — is reused verbatim). Must run
|
|
before <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html">SiemensCycleCallSyntax</a>: a whitelisted cycle name
|
|
after <code>MCALL</code> would otherwise be captured bare-of-context and
|
|
strand the <code>MCALLL</code> word. A line mixing MCALL with other tokens
|
|
does not match and falls through whole to the visible unparsed
|
|
warning.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html">SiemensMsgSyntax</a></dt>
|
|
<dd><p>Consumes a Siemens <code>MSG(“text”)</code> operator display call (or the
|
|
bare <code>MSG()</code> clear form) from the unparsed line text into a
|
|
block-root <a class="xref" href="Hi.NcParsers.Keywords.Siemens.Msg.html">Msg</a> section, and surfaces the text as a
|
|
<code>Msg–Display</code> system message.</p>
|
|
<p>
|
|
Must be placed <b>before</b> every assignment / tag-value / flag
|
|
syntax in the Parsing bundle (right after
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html">TailCommentSyntax</a> /
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html">BlockSkipSyntax</a>): the quoted argument routinely
|
|
contains NC-shaped tokens (<code>MSG("TOOL=5")</code>, <code>MSG("G54 OK")</code>,
|
|
<code>MSG("T20 R8.000 CR:2.500")</code>) which the quote-blind consumers
|
|
downstream would otherwise shred into ghost assignments, flags, or
|
|
axis words. Consuming the whole call here removes that hazard
|
|
structurally — the planned fix recorded on
|
|
<a class="xref" href="Hi.NcParsers.Syntaxs.NcSyntaxUtil.html">NcSyntaxUtil</a>'s assignment RHS-boundary notes.
|
|
</p>
|
|
<p>
|
|
Only the two literal forms are consumed: <code>MSG("...")</code> and
|
|
<code>MSG()</code>. Non-literal arguments (string concatenation
|
|
<code>MSG("A"<<R1)</code>, variable interpolation) are deliberately
|
|
left whole in <a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html#Hi_NcParsers_Keywords_IUnparsedTextDef_UnparsedText">UnparsedText</a> for the
|
|
visible <code>UnparsedText--Remaining</code> warning — half-eating them
|
|
would silently lose content.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax.html">SiemensProcSyntax</a></dt>
|
|
<dd><p>Consumes a Siemens <code>PROC</code> subprogram declaration header
|
|
(<code>PROC MY_SUB</code>, <code>PROC CONTOUR(REAL X, INT N) SAVE DISPLOF</code>)
|
|
whole into a block-root <a class="xref" href="Hi.NcParsers.Keywords.Siemens.SiemensProc.html">SiemensProc</a> record. The header
|
|
carries no executable state for the simulation — parameter binding to
|
|
caller arguments is a later work item — but leaving it unparsed would
|
|
shred the parameter list into ghost axis words the moment the
|
|
tag-value syntaxes run, so the whole statement is owned here. The
|
|
verbatim remainder after the name is preserved on
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Siemens.SiemensProc.html#Hi_NcParsers_Keywords_Siemens_SiemensProc_Statement">Statement</a> for cache-dump readers. Writes at
|
|
the block root (no <code>Parsing</code> entry) following the
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html">SiemensDefStatementSyntax</a> precedent — a record with no
|
|
Logic consumer must not land in the
|
|
<a class="xref" href="Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html">UnconsumedCheckSyntax</a> audit tree.</p>
|
|
<p>
|
|
Anchored at statement start: Sinumerik requires <code>PROC</code> to be the
|
|
first statement of a subprogram file, so a mid-line <code>PROC</code> is
|
|
left alone (visible unparsed warning).
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html">SiemensQuotedStatementSyntax</a></dt>
|
|
<dd><p>Quote guard: any line text still carrying a double quote after the
|
|
literal-form consumers (<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html">SiemensMsgSyntax</a>,
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html">SiemensToolCallSyntax</a>, <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html">SiemensCycleCallSyntax</a>)
|
|
have run is quarantined whole into
|
|
<code>Parsing.QuotedStatement = { “Statement”: “<verbatim>” }</code> —
|
|
<code>WRITE(ERROR,“CUTTIME”,“T5 X100”)</code>, string-concatenation
|
|
<code>MSG("..."<<R1)</code>, quoted-argument cycles not yet whitelisted.</p>
|
|
<p>
|
|
Every quote-blind syntax below (flags, numbered flags, tag values,
|
|
assignments) opens a token boundary at the quote→letter transition,
|
|
so without this guard the string contents get minted into REAL parser
|
|
state: <code>"G54"</code> inside a WRITE argument silently switches the
|
|
active work offset, <code>"T5 X100"</code> mints a ghost tool call plus a
|
|
ghost motion. Quarantining keeps the whole statement visible as one
|
|
<code>Parsing--Unconsumed</code> entry (<code>QuotedStatement.Statement</code>)
|
|
with zero state changes — the same deferred-not-corrupted contract as
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html">SiemensFrameStatementSyntax</a>. Proper consumers (WRITE,
|
|
CYCLE800 quoted args) replace this guard per statement family later.
|
|
</p>
|
|
<p>
|
|
Trade-off, deliberate: on an exotic mixed block the guard also takes
|
|
the co-resident plain words (a motion word sharing the block with an
|
|
unconsumed quoted call goes into the quarantine too). Losing them is
|
|
visible in the warning text; minting false state would be silent —
|
|
never trade the first for the second. Corpus quoted statements
|
|
(WRITE, non-literal MSG) are standalone blocks.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html">SiemensRepeatParsingSyntax</a></dt>
|
|
<dd><p>Captures a Siemens <code>REPEAT</code> statement whole into
|
|
<code>Parsing.SiemensRepeat</code>: <code>REPEAT LBL1 LBL0</code> →
|
|
<code>{ “Start”: “LBL1”, “End”: “LBL0” }</code>, with an optional trailing
|
|
repetition count (<code>P=3</code> or <code>P3</code>). The Evaluation consumer
|
|
(<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html">SiemensRepeatSyntax</a>) re-runs
|
|
the label-bounded section. The single-label form
|
|
(<code>REPEAT LBL1</code> — repeat from the label back to the REPEAT line)
|
|
is captured with <code>End</code> absent; the consumer currently warns it
|
|
unsupported (corpus count: zero).</p>
|
|
<p>
|
|
Whole-statement owner, anchored at statement start — mixing REPEAT
|
|
with other tokens on one block does not match and falls through whole
|
|
to the visible unparsed warning. The end-label alternative refuses a
|
|
<code>P</code>+digits word so <code>REPEAT LBL1 P3</code> reads as
|
|
start-label + count, not as an end label named <code>P3</code>.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
<dl class="jumplist">
|
|
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html">SiemensToolCallSyntax</a></dt>
|
|
<dd><p>Consumes the Siemens string tool call <code>T=“name”</code> from the
|
|
unparsed line text into <code>Parsing.T</code> as a string value
|
|
(quotes stripped). Numeric concatenated calls (<code>T5</code>) stay with
|
|
the preset's <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html">IntegerTagValueSyntax</a>;
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html">ToolChangeSyntax</a> accepts either shape.</p>
|
|
<p>
|
|
Must be placed <b>before</b> every tag-value syntax in the Parsing
|
|
bundle: tool names routinely contain NC-shaped tokens
|
|
(<code>T="D16R3Z6"</code> — quote-blind consumers would mint ghost
|
|
<code>Parsing.D</code>/<code>Parsing.Z</code> entries out of the name;
|
|
<code>(?<=[0-9])</code> and quote→letter <code>\b</code> boundaries in
|
|
<a class="xref" href="Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_RegexFlagPrefix">RegexFlagPrefix</a> both open inside the string).
|
|
Same structural-consumption rationale as
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html">SiemensMsgSyntax</a>.
|
|
</p>
|
|
<p>
|
|
A second <code>T="..."</code> behind a <code>;</code> comment
|
|
(<code>T="M6LWXD-1301";T="M6LWX"</code>, real corpus shape) never reaches
|
|
this syntax — the quote-aware
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html">TailCommentSyntax</a> runs earlier and strips
|
|
it. Tool names are matched verbatim, including non-ASCII bytes from
|
|
legacy code pages.
|
|
</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
|
|
</article>
|
|
|
|
<div class="contribution d-print-none">
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div class="affix">
|
|
<nav id="affix"></nav>
|
|
</div>
|
|
</main>
|
|
|
|
<div class="container-xxl search-results" id="search-results"></div>
|
|
|
|
<footer class="border-top text-secondary">
|
|
<div class="container-xxl">
|
|
<div class="flex-fill">
|
|
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</body>
|
|
</html>
|