You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: roadmap/laplace-pspice-feasibility.md
+8-4Lines changed: 8 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ This approach keeps the implementation small, aligns with existing source-genera
68
68
69
69
## Current Status
70
70
71
-
Canonical `E`-source and `G`-source `LAPLACE` support is implemented by SpiceSharpParser. `F`, `H`, `B`, alternate syntaxes, delay, and `M=` support remain deferred.
71
+
`E`-source and `G`-source `LAPLACE` support is implemented by SpiceSharpParser for canonical assignment, no-equals expression-pair, and equals-after-keyword expression-pair syntax. `F`, `H`, `B`, function-like `VALUE={LAPLACE(...)}`, delay, and `M=` support remain deferred.
72
72
73
73
Phase 1 grammar groundwork is implemented: expression-to-expression assignments such as `{V(in)} = {1/(1+s*tau)}` and `{V(in1,in2)} = {1/(1+s*tau)}` are preserved as `ExpressionAssignmentParameter`.
Phase 4 `G`-source mapping is implemented: canonical `Gname out+ out- LAPLACE {V(ctrl)}``= {H(s)}` and `V(ctrl+,ctrl-)` forms map to `LaplaceVoltageControlledCurrentSource`, preserve the existing `G` current-source sign convention, reject unsupported `M=` / delay options, and have OP / AC integration coverage.
80
80
81
+
Phase 5 syntax compatibility is implemented: `E` / `G` sources accept `LAPLACE {V(...)} = {H(s)}`, `LAPLACE {V(...)} {H(s)}`, and `LAPLACE = {V(...)} {H(s)}` as equivalent voltage-controlled forms, while known deferred `VALUE={LAPLACE(...)}` and `B`-source forms produce targeted reader diagnostics.
82
+
81
83
Adjacent features already exist:
82
84
83
85
-`VALUE={expr}` behavioral sources.
@@ -598,9 +600,9 @@ The last recognizer is deliberate. If a user writes a known PSpice Laplace varia
598
600
599
601
| Family | Example | Near-term behavior | Notes |
600
602
|--------|---------|--------------------|-------|
601
-
| Canonical assignment |`E1 out 0 LAPLACE {V(in)} = {1/(1+s*tau)}`|Support first| Exercises grammar gap and runtime mapping. |
602
-
| No-equals expression pair |`E1 out 0 LAPLACE {V(in)} {1/(1+s*tau)}`|Add after canonical | Should normalize to the same definition and coefficients. |
603
-
| Equals-after-keyword pair |`E1 out 0 LAPLACE = {V(in)} {1/(1+s*tau)}`|Add after canonical | Likely parses differently; keep syntax handling isolated in a recognizer. |
603
+
| Canonical assignment |`E1 out 0 LAPLACE {V(in)} = {1/(1+s*tau)}`|Supported| Exercises grammar gap and runtime mapping. |
604
+
| No-equals expression pair |`E1 out 0 LAPLACE {V(in)} {1/(1+s*tau)}`|Supported | Normalizes to the same definition and coefficients. |
605
+
| Equals-after-keyword pair |`E1 out 0 LAPLACE = {V(in)} {1/(1+s*tau)}`|Supported | Parses differently; syntax handling stays isolated in a recognizer. |
604
606
| Current-controlled |`F1 out 0 LAPLACE {I(Vsense)} = {H(s)}`| Later milestone | Runtime entities exist, but controlling-source parsing and PSpice compatibility need tests. |
605
607
| Function-like `VALUE`|`E1 out 0 VALUE = {LAPLACE(V(in), H(s))}`| Investigate later | Must be handled as source-level Laplace, not a scalar expression function. |
606
608
|`B` source ABM |`B1 out 0 V = {LAPLACE(V(in), H(s))}`| Investigate later | May require arbitrary input-expression lowering or custom behavior. |
@@ -676,6 +678,8 @@ Status: implemented for canonical `G` source syntax. `M=`, delay options, `F`, a
676
678
677
679
### Phase 5: Syntax Compatibility Layer
678
680
681
+
Status: implemented for `E` / `G` no-equals and equals-after-keyword voltage-controlled syntax. `VALUE={LAPLACE(...)}`, `B`, `F`, `H`, `M=`, and delay options remain diagnostic-only / deferred.
682
+
679
683
1. Add `UnsupportedKnownVariantRecognizer` so common deferred forms receive targeted diagnostics.
680
684
2. Add `NoEqualsExpressionPairRecognizer` for `LAPLACE {input} {transfer}` only after canonical tests pass.
681
685
3. Add `EqualsExpressionPairRecognizer` for `LAPLACE = {input} {transfer}` only after no-equals tests pass.
0 commit comments