asciiunits 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5f42ac5df216807eac500724d605a1288a2b6d61b5583bf5f060fe39788a9d35
4
- data.tar.gz: 24bd2316696f0e66288c500bd5a48ed29b9793d535be150544408619705a9365
3
+ metadata.gz: 1e5bf019bfab4a229cec30d95a1ece65641b6628f05a4d75765a191d71956022
4
+ data.tar.gz: 2d00ceb487e5cf3cf5ec5417d7811e87ab1ad2a5411f482688cc897b781faad4
5
5
  SHA512:
6
- metadata.gz: efcd68d4b005b6622869d0c8b0efb201e6c7e32040c66929bd57682eccb68ad54c30a90510055f9d05f75ab7c479ae77216763e0a5fb188fe453b5de73683f2a
7
- data.tar.gz: 5da5721afed80ff5ac0ff911a86f7fefd7f470abe1c6e4d14e46b9ffc12e30166aa534e22fcd6f132582c16c0f6a9504d3494eb04f129e47d26bdf24aec9e6b1
6
+ metadata.gz: 4fd491057a3b448bf8da4f7a088a839c3c7619c3179628d0d278aee673660953ff3e6031fdb495d9f2277401b6378dbbc6daaaeb6d753892423451b97f46269b
7
+ data.tar.gz: ce8361be57a8b18faf3aa08587cbb123017597b9c4f76c19a2116edb97798282a1c72b8281e748a954a5d42f4661c19c0cff544c0e5f26a3cf74f8725a089009
data/README.adoc CHANGED
@@ -35,6 +35,8 @@ load-bearing):
35
35
 
36
36
  * unit tokens from UnitsDB (`m`, `Hz`, `cal_th`, `ton-force (2000 lb)`, …),
37
37
  prefixed units (`mm`, `mmol`), the literal `1`
38
+ * registered prefixed symbols (`dB`, `mbar`, `kgf`, `cSt`, …) tried after
39
+ normal composition — decibel parses as an atom (`bel_B`), not deci-bel
38
40
  * exponents: `^2`, `^-2`, `^(1/2)` — a single power per unit, no chained powers
39
41
  * multiplication/division: `*`, `/`, `//`, implicit multiplication by
40
42
  whitespace (`m s`), and direct fence/sqrt adjacency (`(m)(s)`, `sqrt(m)s`)
@@ -42,8 +44,7 @@ load-bearing):
42
44
  * fencing `(…)` — powers do not attach to fenced or sqrt forms (`(cm)^3` is rejected)
43
45
  * prefix-only forms at top level (`k-`)
44
46
  * dimension expressions (`dim_L*dim_M^2`) with the same operators
45
- * `k-`-style forms, `mm*`-style trailing extenders, and every other quirk of
46
- the original — the oracle corpus pins them
47
+ * every other quirk of the original — the oracle corpus pins them
47
48
 
48
49
  == Artifact tree contract
49
50
 
@@ -126,10 +127,11 @@ vendored artifact.
126
127
 
127
128
  == Verification status
128
129
 
129
- * Oracle: unitsml 0.6.9 Parslet parser, frozen in
130
+ * Oracle: the unitsml-ruby Parslet parser (parg-parser branch, including
131
+ the registered prefixed-symbol support), frozen in
130
132
  `corpora/unitsml/expected-kinds.json`
131
- * Corpus: 124 inputs (70 accept / 54 reject), kind parity green
132
- * Differential probe at authoring time: 572 generated inputs, 0
133
+ * Corpus: 143 inputs (80 accept / 63 reject), kind parity green
134
+ * Differential probes at authoring time: 572 + 172 generated inputs, 0
133
135
  accept/reject disagreements against the oracle
134
136
  * Engines: native (Rust) and `mode: :ruby` trees verified identical
135
137
  * Compile: byte-identical across recompiles (`rake artifact:compile`)
@@ -1 +1 @@
1
- {"bindings":null,"version":"0.1.0","grammar":"UnitsmlAscii","shape":"parsanol-tree/v2","binding_version":1,"entries":{"expression":{"root":"expression","grammar":{"atoms":[{"Entity":{"atom":574}},{"Entity":{"atom":571}},{"Entity":{"atom":568}},{"Entity":{"atom":566}},{"Str":{"pattern":"sqrt"}},{"Entity":{"atom":6}},{"Str":{"pattern":"("}},{"Entity":{"atom":563}},{"Named":{"name":"implicit_extended","atom":1}},{"Entity":{"atom":18}},{"Entity":{"atom":17}},{"Re":{"pattern":"[\\x09]"}},{"Re":{"pattern":"[\\x0a]"}},{"Re":{"pattern":"[\\x0b]"}},{"Re":{"pattern":"[\\x0c]"}},{"Re":{"pattern":"[\\x0d]"}},{"Re":{"pattern":"[ ]"}},{"Alternative":{"atoms":[11,12,13,14,15,16]}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":559}},{"Named":{"name":"sequence","atom":20}},{"Repetition":{"atom":21,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[8,19,22]}},{"Entity":{"atom":556}},{"Named":{"name":"first_set","atom":2}},{"Entity":{"atom":18}},{"Named":{"name":"extender","atom":26}},{"Entity":{"atom":532}},{"Entity":{"atom":529}},{"Entity":{"atom":38}},{"Entity":{"atom":34}},{"Str":{"pattern":"//"}},{"Str":{"pattern":"/"}},{"Alternative":{"atoms":[32,33]}},{"Entity":{"atom":36}},{"Str":{"pattern":"*"}},{"Alternative":{"atoms":[31,35]}},{"Named":{"name":"extender","atom":37}},{"Entity":{"atom":18}},{"Repetition":{"atom":39,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":527}},{"Named":{"name":"implicit_extended","atom":24}},{"Entity":{"atom":18}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":46,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":523}},{"Named":{"name":"sequence","atom":48}},{"Repetition":{"atom":49,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[42,44,45,47,50]}},{"Entity":{"atom":521}},{"Entity":{"atom":6}},{"Entity":{"atom":18}},{"Repetition":{"atom":54,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":519}},{"Entity":{"atom":511}},{"Entity":{"atom":6}},{"Named":{"name":"open_paren","atom":58}},{"Entity":{"atom":18}},{"Repetition":{"atom":60,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":505}},{"Entity":{"atom":69}},{"Named":{"name":"int_exp","atom":56}},{"Entity":{"atom":18}},{"Repetition":{"atom":65,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":68}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[53,55,64,66,67]}},{"Entity":{"atom":504}},{"Entity":{"atom":18}},{"Repetition":{"atom":71,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":74,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":500}},{"Named":{"name":"sequence","atom":76}},{"Repetition":{"atom":77,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[52,72,73,75,78]}},{"Entity":{"atom":468}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,81]}},{"Str":{"pattern":"1"}},{"Named":{"name":"unit","atom":83}},{"Entity":{"atom":87}},{"Named":{"name":"sequence","atom":41}},{"Sequence":{"atoms":[30,40,86]}},{"Repetition":{"atom":85,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[84,88]}},{"Entity":{"atom":402}},{"Entity":{"atom":366}},{"Str":{"pattern":"ton-force (2000 lb)"}},{"Str":{"pattern":"ton_refrigeration"}},{"Str":{"pattern":"dprime_Hg_32degF"}},{"Str":{"pattern":"dprime_Hg_60degF"}},{"Str":{"pattern":"fl oz (US label)"}},{"Str":{"pattern":"a_sidereal_year"}},{"Str":{"pattern":"a_tropical_year"}},{"Str":{"pattern":"aW (Cardelli)"}},{"Str":{"pattern":"ftH_2O_39degF"}},{"Str":{"pattern":"inH_2O_39degF"}},{"Str":{"pattern":"inH_2O_60degF"}},{"Str":{"pattern":"liq pint (US)"}},{"Str":{"pattern":"oz (US label)"}},{"Str":{"pattern":"pica_computer"}},{"Str":{"pattern":"rad_radiation"}},{"Str":{"pattern":"cmH_2O_4degC"}},{"Str":{"pattern":"ft_US_survey"}},{"Str":{"pattern":"h-bar_atomic"}},{"Str":{"pattern":"in_US_survey"}},{"Str":{"pattern":"lambda-bar_C"}},{"Str":{"pattern":"mi_US_survey"}},{"Str":{"pattern":"min_sidereal"}},{"Str":{"pattern":"pica_printer"}},{"Str":{"pattern":"yd_US_survey"}},{"Str":{"pattern":"dry pt (US)"}},{"Str":{"pattern":"dry qt (US)"}},{"Str":{"pattern":"gi_imperial"}},{"Str":{"pattern":"hp_electric"}},{"Str":{"pattern":"inHg_32degF"}},{"Str":{"pattern":"inHg_60degF"}},{"Str":{"pattern":"liq qt (US)"}},{"Str":{"pattern":"pt_computer"}},{"Str":{"pattern":"statcoulomb"}},{"Str":{"pattern":"\"Hg_32degF"}},{"Str":{"pattern":"\"Hg_60degF"}},{"Str":{"pattern":"Btu_39degF"}},{"Str":{"pattern":"Btu_59degF"}},{"Str":{"pattern":"Btu_60degF"}},{"Str":{"pattern":"cmHg_0degC"}},{"Str":{"pattern":"d_sidereal"}},{"Str":{"pattern":"dwt (troy)"}},{"Str":{"pattern":"fl oz (UK)"}},{"Str":{"pattern":"fl oz (US)"}},{"Str":{"pattern":"h-bar_eV_s"}},{"Str":{"pattern":"h_sidereal"}},{"Str":{"pattern":"m_e_atomic"}},{"Str":{"pattern":"pt_printer"}},{"Str":{"pattern":"rh_percent"}},{"Str":{"pattern":"s_sidereal"}},{"Str":{"pattern":"tbsp_label"}},{"Str":{"pattern":"cup_label"}},{"Str":{"pattern":"dprime_Hg"}},{"Str":{"pattern":"dprime_in"}},{"Str":{"pattern":"dr (avdp)"}},{"Str":{"pattern":"hp_boiler"}},{"Str":{"pattern":"hp_metric"}},{"Str":{"pattern":"prime_min"}},{"Str":{"pattern":"scr (ap.)"}},{"Str":{"pattern":"ton_short"}},{"Str":{"pattern":"tsp_label"}},{"Str":{"pattern":"Btu_mean"}},{"Str":{"pattern":"E_erlang"}},{"Str":{"pattern":"bbl (US)"}},{"Str":{"pattern":"cwt (UK)"}},{"Str":{"pattern":"cwt (US)"}},{"Str":{"pattern":"dprime_s"}},{"Str":{"pattern":"gal (UK)"}},{"Str":{"pattern":"gal (US)"}},{"Str":{"pattern":"hp_water"}},{"Str":{"pattern":"mil_nato"}},{"Str":{"pattern":"prime_Hg"}},{"Str":{"pattern":"prime_ft"}},{"Str":{"pattern":"statwatt"}},{"Str":{"pattern":"thm (EC)"}},{"Str":{"pattern":"thm (US)"}},{"Str":{"pattern":"ton_long"}},{"Str":{"pattern":"Lambert"}},{"Str":{"pattern":"bu (US)"}},{"Str":{"pattern":"lb_troy"}},{"Str":{"pattern":"oz_troy"}},{"Str":{"pattern":"pt (UK)"}},{"Str":{"pattern":"qt (UK)"}},{"Str":{"pattern":"statmho"}},{"Str":{"pattern":"statohm"}},{"Str":{"pattern":"ton_TNT"}},{"Str":{"pattern":"Btu_th"}},{"Str":{"pattern":"a_year"}},{"Str":{"pattern":"byte_B"}},{"Str":{"pattern":"cal_IT"}},{"Str":{"pattern":"cal_th"}},{"Str":{"pattern":"cmH_2O"}},{"Str":{"pattern":"dprime"}},{"Str":{"pattern":"ftH_2O"}},{"Str":{"pattern":"inH_2O"}},{"Str":{"pattern":"kayser"}},{"Str":{"pattern":"micron"}},{"Str":{"pattern":"mmH_2O"}},{"Str":{"pattern":"statWb"}},{"Str":{"pattern":"'_min"}},{"Str":{"pattern":"Aring"}},{"Str":{"pattern":"Darcy"}},{"Str":{"pattern":"abohm"}},{"Str":{"pattern":"barye"}},{"Str":{"pattern":"bel_B"}},{"Str":{"pattern":"dB_mW"}},{"Str":{"pattern":"darcy"}},{"Str":{"pattern":"fermi"}},{"Str":{"pattern":"fl dr"}},{"Str":{"pattern":"gamma"}},{"Str":{"pattern":"h-bar"}},{"Str":{"pattern":"hp_UK"}},{"Str":{"pattern":"lbmol"}},{"Str":{"pattern":"minim"}},{"Str":{"pattern":"prime"}},{"Str":{"pattern":"shake"}},{"Str":{"pattern":"statA"}},{"Str":{"pattern":"statF"}},{"Str":{"pattern":"statH"}},{"Str":{"pattern":"statT"}},{"Str":{"pattern":"statV"}},{"Str":{"pattern":"\"_in"}},{"Str":{"pattern":"'_ft"}},{"Str":{"pattern":"Hart"}},{"Str":{"pattern":"Torr"}},{"Str":{"pattern":"barn"}},{"Str":{"pattern":"cmHg"}},{"Str":{"pattern":"cmil"}},{"Str":{"pattern":"degC"}},{"Str":{"pattern":"degF"}},{"Str":{"pattern":"degK"}},{"Str":{"pattern":"degR"}},{"Str":{"pattern":"fath"}},{"Str":{"pattern":"ft.L"}},{"Str":{"pattern":"ft.c"}},{"Str":{"pattern":"ftHg"}},{"Str":{"pattern":"inHg"}},{"Str":{"pattern":"l.h."}},{"Str":{"pattern":"l.m."}},{"Str":{"pattern":"l.s."}},{"Str":{"pattern":"l.w."}},{"Str":{"pattern":"l.y."}},{"Str":{"pattern":"mmHg"}},{"Str":{"pattern":"slug"}},{"Str":{"pattern":"tbsp"}},{"Str":{"pattern":"thou"}},{"Str":{"pattern":"\"Hg"}},{"Str":{"pattern":"\"_s"}},{"Str":{"pattern":"'Hg"}},{"Str":{"pattern":"Btu"}},{"Str":{"pattern":"E_h"}},{"Str":{"pattern":"Gal"}},{"Str":{"pattern":"Ohm"}},{"Str":{"pattern":"a_0"}},{"Str":{"pattern":"abA"}},{"Str":{"pattern":"abC"}},{"Str":{"pattern":"abF"}},{"Str":{"pattern":"abH"}},{"Str":{"pattern":"abS"}},{"Str":{"pattern":"abV"}},{"Str":{"pattern":"atm"}},{"Str":{"pattern":"bar"}},{"Str":{"pattern":"bit"}},{"Str":{"pattern":"c_0"}},{"Str":{"pattern":"cal"}},{"Str":{"pattern":"cup"}},{"Str":{"pattern":"dBm"}},{"Str":{"pattern":"dec"}},{"Str":{"pattern":"deg"}},{"Str":{"pattern":"den"}},{"Str":{"pattern":"dyn"}},{"Str":{"pattern":"erg"}},{"Str":{"pattern":"fur"}},{"Str":{"pattern":"gon"}},{"Str":{"pattern":"gpm"}},{"Str":{"pattern":"kat"}},{"Str":{"pattern":"kip"}},{"Str":{"pattern":"lbf"}},{"Str":{"pattern":"lnk"}},{"Str":{"pattern":"m_e"}},{"Str":{"pattern":"mil"}},{"Str":{"pattern":"min"}},{"Str":{"pattern":"mol"}},{"Str":{"pattern":"mpg"}},{"Str":{"pattern":"oct"}},{"Str":{"pattern":"pdl"}},{"Str":{"pattern":"ppm"}},{"Str":{"pattern":"psi"}},{"Str":{"pattern":"rad"}},{"Str":{"pattern":"rem"}},{"Str":{"pattern":"rhe"}},{"Str":{"pattern":"tex"}},{"Str":{"pattern":"tsp"}},{"Str":{"pattern":"var"}},{"Str":{"pattern":"Bd"}},{"Str":{"pattern":"Bi"}},{"Str":{"pattern":"Bq"}},{"Str":{"pattern":"Ci"}},{"Str":{"pattern":"Da"}},{"Str":{"pattern":"Gi"}},{"Str":{"pattern":"Gs"}},{"Str":{"pattern":"Gy"}},{"Str":{"pattern":"Hz"}},{"Str":{"pattern":"Mx"}},{"Str":{"pattern":"Np"}},{"Str":{"pattern":"Oe"}},{"Str":{"pattern":"Pa"}},{"Str":{"pattern":"Sh"}},{"Str":{"pattern":"St"}},{"Str":{"pattern":"Sv"}},{"Str":{"pattern":"Wb"}},{"Str":{"pattern":"ac"}},{"Str":{"pattern":"as"}},{"Str":{"pattern":"at"}},{"Str":{"pattern":"cd"}},{"Str":{"pattern":"ch"}},{"Str":{"pattern":"ct"}},{"Str":{"pattern":"dr"}},{"Str":{"pattern":"eV"}},{"Str":{"pattern":"ft"}},{"Str":{"pattern":"gf"}},{"Str":{"pattern":"gi"}},{"Str":{"pattern":"gr"}},{"Str":{"pattern":"ha"}},{"Str":{"pattern":"hp"}},{"Str":{"pattern":"in"}},{"Str":{"pattern":"kn"}},{"Str":{"pattern":"kp"}},{"Str":{"pattern":"lb"}},{"Str":{"pattern":"lm"}},{"Str":{"pattern":"lx"}},{"Str":{"pattern":"mi"}},{"Str":{"pattern":"oz"}},{"Str":{"pattern":"pH"}},{"Str":{"pattern":"pc"}},{"Str":{"pattern":"ph"}},{"Str":{"pattern":"pk"}},{"Str":{"pattern":"rd"}},{"Str":{"pattern":"rh"}},{"Str":{"pattern":"sb"}},{"Str":{"pattern":"sr"}},{"Str":{"pattern":"st"}},{"Str":{"pattern":"ua"}},{"Str":{"pattern":"yd"}},{"Str":{"pattern":"\""}},{"Str":{"pattern":"'"}},{"Str":{"pattern":"A"}},{"Str":{"pattern":"C"}},{"Str":{"pattern":"D"}},{"Str":{"pattern":"F"}},{"Str":{"pattern":"G"}},{"Str":{"pattern":"H"}},{"Str":{"pattern":"J"}},{"Str":{"pattern":"K"}},{"Str":{"pattern":"L"}},{"Str":{"pattern":"M"}},{"Str":{"pattern":"N"}},{"Str":{"pattern":"P"}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"S"}},{"Str":{"pattern":"T"}},{"Str":{"pattern":"V"}},{"Str":{"pattern":"W"}},{"Str":{"pattern":"a"}},{"Str":{"pattern":"c"}},{"Str":{"pattern":"d"}},{"Str":{"pattern":"e"}},{"Str":{"pattern":"g"}},{"Str":{"pattern":"h"}},{"Str":{"pattern":"l"}},{"Str":{"pattern":"m"}},{"Str":{"pattern":"s"}},{"Str":{"pattern":"t"}},{"Str":{"pattern":"u"}},{"Alternative":{"atoms":[92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364]}},{"Named":{"name":"unit","atom":365}},{"Entity":{"atom":400}},{"Str":{"pattern":"^"}},{"Entity":{"atom":398}},{"Entity":{"atom":383}},{"Entity":{"atom":377}},{"Str":{"pattern":"-"}},{"Repetition":{"atom":372,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":375}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":374,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[373,376]}},{"Entity":{"atom":34}},{"Entity":{"atom":377}},{"Sequence":{"atoms":[378,379]}},{"Repetition":{"atom":380,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[371,381]}},{"Named":{"name":"integer","atom":382}},{"Entity":{"atom":6}},{"Entity":{"atom":395}},{"Entity":{"atom":6}},{"Entity":{"atom":391}},{"Named":{"name":"int_exp","atom":385}},{"Entity":{"atom":68}},{"Sequence":{"atoms":[384,388,389]}},{"Alternative":{"atoms":[370,390]}},{"Entity":{"atom":68}},{"Sequence":{"atoms":[386,387,392]}},{"Entity":{"atom":391}},{"Alternative":{"atoms":[393,394]}},{"Named":{"name":"int_exp","atom":385}},{"Sequence":{"atoms":[384,396,389]}},{"Alternative":{"atoms":[370,397]}},{"Named":{"name":"power_numerator","atom":369}},{"Sequence":{"atoms":[368,399]}},{"Repetition":{"atom":367,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[91,401]}},{"Entity":{"atom":87}},{"Sequence":{"atoms":[90,403]}},{"Entity":{"atom":402}},{"Entity":{"atom":415}},{"Re":{"pattern":"[\\x00-\\u{10ffff}]"}},{"Lookahead":{"atom":407,"positive":false}},{"Entity":{"atom":38}},{"Entity":{"atom":6}},{"Entity":{"atom":68}},{"Entity":{"atom":18}},{"Alternative":{"atoms":[409,410,411,412]}},{"Lookahead":{"atom":413,"positive":true}},{"Alternative":{"atoms":[408,414]}},{"Sequence":{"atoms":[405,406]}},{"Entity":{"atom":428}},{"Str":{"pattern":"Ei"}},{"Str":{"pattern":"Gi"}},{"Str":{"pattern":"Ki"}},{"Str":{"pattern":"Mi"}},{"Str":{"pattern":"Pi"}},{"Str":{"pattern":"Ti"}},{"Str":{"pattern":"Yi"}},{"Str":{"pattern":"Zi"}},{"Str":{"pattern":"da"}},{"Alternative":{"atoms":[418,419,420,421,422,423,424,425,426]}},{"Named":{"name":"prefix","atom":427}},{"Entity":{"atom":402}},{"Entity":{"atom":87}},{"Sequence":{"atoms":[417,429,430]}},{"Entity":{"atom":428}},{"Entity":{"atom":402}},{"Sequence":{"atoms":[432,433]}},{"Entity":{"atom":461}},{"Str":{"pattern":"1"}},{"Str":{"pattern":"E"}},{"Str":{"pattern":"G"}},{"Str":{"pattern":"M"}},{"Str":{"pattern":"P"}},{"Str":{"pattern":"Q"}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"T"}},{"Str":{"pattern":"Y"}},{"Str":{"pattern":"Z"}},{"Str":{"pattern":"a"}},{"Str":{"pattern":"c"}},{"Str":{"pattern":"d"}},{"Str":{"pattern":"f"}},{"Str":{"pattern":"h"}},{"Str":{"pattern":"k"}},{"Str":{"pattern":"m"}},{"Str":{"pattern":"n"}},{"Str":{"pattern":"p"}},{"Str":{"pattern":"q"}},{"Str":{"pattern":"r"}},{"Str":{"pattern":"u"}},{"Str":{"pattern":"y"}},{"Str":{"pattern":"z"}},{"Alternative":{"atoms":[436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459]}},{"Named":{"name":"prefix","atom":460}},{"Entity":{"atom":402}},{"Entity":{"atom":87}},{"Sequence":{"atoms":[435,462,463]}},{"Entity":{"atom":461}},{"Entity":{"atom":402}},{"Sequence":{"atoms":[465,466]}},{"Alternative":{"atoms":[82,89,404,416,431,434,464,467]}},{"Entity":{"atom":18}},{"Repetition":{"atom":469,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":472,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":496}},{"Named":{"name":"sequence","atom":474}},{"Repetition":{"atom":475,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[80,470,471,473,476]}},{"Entity":{"atom":69}},{"Entity":{"atom":492}},{"Named":{"name":"sequence","atom":479}},{"Repetition":{"atom":480,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[478,481]}},{"Entity":{"atom":468}},{"Entity":{"atom":488}},{"Named":{"name":"sequence","atom":484}},{"Repetition":{"atom":485,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[483,486]}},{"Alternative":{"atoms":[23,51,79,477,482,487]}},{"Named":{"name":"sequence","atom":484}},{"Repetition":{"atom":489,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[483,490]}},{"Alternative":{"atoms":[23,51,79,477,482,491]}},{"Named":{"name":"sequence","atom":479}},{"Repetition":{"atom":493,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[478,494]}},{"Alternative":{"atoms":[23,51,79,477,495,491]}},{"Named":{"name":"sequence","atom":474}},{"Repetition":{"atom":497,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[80,470,471,473,498]}},{"Alternative":{"atoms":[23,51,79,499,495,491]}},{"Named":{"name":"sequence","atom":76}},{"Repetition":{"atom":501,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[52,72,73,75,502]}},{"Alternative":{"atoms":[23,51,503,499,495,491]}},{"Alternative":{"atoms":[63,70]}},{"Named":{"name":"int_exp","atom":62}},{"Entity":{"atom":18}},{"Repetition":{"atom":507,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":68}},{"Named":{"name":"close_paren","atom":509}},{"Sequence":{"atoms":[59,61,506,508,510]}},{"Named":{"name":"int_exp","atom":57}},{"Entity":{"atom":504}},{"Entity":{"atom":87}},{"Alternative":{"atoms":[513,514]}},{"Repetition":{"atom":515,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[512,516]}},{"Entity":{"atom":504}},{"Alternative":{"atoms":[517,518]}},{"Named":{"name":"int_exp","atom":56}},{"Sequence":{"atoms":[53,55,520,66,67]}},{"Sequence":{"atoms":[52,72,73,75,502]}},{"Alternative":{"atoms":[23,51,522,499,495,491]}},{"Named":{"name":"sequence","atom":48}},{"Repetition":{"atom":524,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[42,44,45,47,525]}},{"Alternative":{"atoms":[23,526,522,499,495,491]}},{"Named":{"name":"sequence","atom":41}},{"Sequence":{"atoms":[30,40,528]}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,530]}},{"Alternative":{"atoms":[531,89,404,416,431,434,464,467]}},{"Named":{"name":"second_set","atom":28}},{"Sequence":{"atoms":[25,27,533]}},{"Entity":{"atom":521}},{"Named":{"name":"first_int_exp_set","atom":535}},{"Entity":{"atom":18}},{"Repetition":{"atom":537,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":521}},{"Named":{"name":"second_int_exp_set","atom":539}},{"Sequence":{"atoms":[536,538,540]}},{"Entity":{"atom":532}},{"Named":{"name":"first_set","atom":542}},{"Entity":{"atom":18}},{"Repetition":{"atom":544,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":521}},{"Named":{"name":"second_int_exp_set","atom":546}},{"Sequence":{"atoms":[543,545,547]}},{"Entity":{"atom":521}},{"Named":{"name":"first_int_exp_set","atom":549}},{"Entity":{"atom":18}},{"Repetition":{"atom":551,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":532}},{"Named":{"name":"second_set","atom":553}},{"Sequence":{"atoms":[550,552,554]}},{"Alternative":{"atoms":[534,541,548,555]}},{"Named":{"name":"implicit_extended","atom":24}},{"Sequence":{"atoms":[557,44,45,47,525]}},{"Alternative":{"atoms":[23,558,522,499,495,491]}},{"Named":{"name":"sequence","atom":20}},{"Repetition":{"atom":560,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[8,19,561]}},{"Alternative":{"atoms":[562,558,522,499,495,491]}},{"Named":{"name":"sqrt","atom":7}},{"Entity":{"atom":68}},{"Sequence":{"atoms":[4,5,564,565]}},{"Sequence":{"atoms":[3,530]}},{"Alternative":{"atoms":[567,89,404,416,431,434,464,467]}},{"Named":{"name":"first_set","atom":2}},{"Sequence":{"atoms":[569,27,533]}},{"Alternative":{"atoms":[570,541,548,555]}},{"Named":{"name":"implicit_extended","atom":1}},{"Sequence":{"atoms":[572,19,561]}},{"Alternative":{"atoms":[573,558,522,499,495,491]}},{"Entity":{"atom":701}},{"Entity":{"atom":698}},{"Entity":{"atom":696}},{"Str":{"pattern":"sqrt"}},{"Entity":{"atom":6}},{"Entity":{"atom":693}},{"Named":{"name":"first_set","atom":576}},{"Entity":{"atom":18}},{"Named":{"name":"extender","atom":582}},{"Entity":{"atom":690}},{"Entity":{"atom":599}},{"Entity":{"atom":596}},{"Str":{"pattern":"dim_Theta"}},{"Str":{"pattern":"dim_phi"}},{"Str":{"pattern":"dim_I"}},{"Str":{"pattern":"dim_J"}},{"Str":{"pattern":"dim_L"}},{"Str":{"pattern":"dim_M"}},{"Str":{"pattern":"dim_N"}},{"Str":{"pattern":"dim_T"}},{"Alternative":{"atoms":[587,588,589,590,591,592,593,594]}},{"Named":{"name":"dimension","atom":595}},{"Entity":{"atom":400}},{"Repetition":{"atom":597,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[586,598]}},{"Alternative":{"atoms":[577,585]}},{"Entity":{"atom":688}},{"Entity":{"atom":18}},{"Repetition":{"atom":602,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":605,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":686}},{"Named":{"name":"second_set","atom":584}},{"Entity":{"atom":683}},{"Repetition":{"atom":609,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[581,583,608,610]}},{"Entity":{"atom":614}},{"Repetition":{"atom":601,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[600,613]}},{"Named":{"name":"first_set","atom":612}},{"Entity":{"atom":18}},{"Repetition":{"atom":616,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":680}},{"Entity":{"atom":6}},{"Entity":{"atom":678}},{"Entity":{"atom":6}},{"Named":{"name":"open_paren","atom":621}},{"Entity":{"atom":664}},{"Named":{"name":"second_int_exp_set","atom":618}},{"Entity":{"atom":661}},{"Repetition":{"atom":625,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[615,617,624,626]}},{"Entity":{"atom":635}},{"Named":{"name":"int_exp","atom":620}},{"Entity":{"atom":68}},{"Entity":{"atom":633}},{"Named":{"name":"sequence","atom":607}},{"Sequence":{"atoms":[603,604,606,632]}},{"Repetition":{"atom":631,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[619,629,630,634]}},{"Named":{"name":"first_int_exp_set","atom":628}},{"Entity":{"atom":18}},{"Repetition":{"atom":637,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":614}},{"Named":{"name":"second_set","atom":639}},{"Entity":{"atom":658}},{"Repetition":{"atom":641,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[636,638,640,642]}},{"Entity":{"atom":635}},{"Named":{"name":"first_int_exp_set","atom":644}},{"Entity":{"atom":18}},{"Repetition":{"atom":646,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":635}},{"Named":{"name":"second_int_exp_set","atom":648}},{"Entity":{"atom":655}},{"Repetition":{"atom":650,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[645,647,649,651]}},{"Entity":{"atom":635}},{"Entity":{"atom":614}},{"Alternative":{"atoms":[611,627,643,652,653,654]}},{"Repetition":{"atom":650,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[645,647,649,656]}},{"Alternative":{"atoms":[611,627,643,657,653,654]}},{"Repetition":{"atom":641,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[636,638,640,659]}},{"Alternative":{"atoms":[611,627,660,657,653,654]}},{"Repetition":{"atom":625,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[615,617,624,662]}},{"Alternative":{"atoms":[611,663,660,657,653,654]}},{"Named":{"name":"int_exp","atom":623}},{"Entity":{"atom":68}},{"Named":{"name":"close_paren","atom":666}},{"Sequence":{"atoms":[622,665,667]}},{"Named":{"name":"int_exp","atom":668}},{"Entity":{"atom":18}},{"Repetition":{"atom":670,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":664}},{"Entity":{"atom":633}},{"Alternative":{"atoms":[672,673]}},{"Named":{"name":"sequence","atom":674}},{"Sequence":{"atoms":[669,671,675]}},{"Entity":{"atom":664}},{"Alternative":{"atoms":[676,677]}},{"Named":{"name":"int_exp","atom":620}},{"Sequence":{"atoms":[619,679,630,634]}},{"Named":{"name":"second_int_exp_set","atom":618}},{"Sequence":{"atoms":[615,617,681,662]}},{"Alternative":{"atoms":[611,682,660,657,653,654]}},{"Repetition":{"atom":609,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[581,583,608,684]}},{"Alternative":{"atoms":[685,682,660,657,653,654]}},{"Named":{"name":"sequence","atom":607}},{"Sequence":{"atoms":[603,604,606,687]}},{"Repetition":{"atom":601,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[600,689]}},{"Named":{"name":"second_set","atom":584}},{"Sequence":{"atoms":[581,583,691,684]}},{"Alternative":{"atoms":[692,682,660,657,653,654]}},{"Named":{"name":"sqrt","atom":580}},{"Entity":{"atom":68}},{"Sequence":{"atoms":[578,579,694,695]}},{"Alternative":{"atoms":[577,585]}},{"Sequence":{"atoms":[697,689]}},{"Named":{"name":"first_set","atom":576}},{"Sequence":{"atoms":[699,583,691,684]}},{"Alternative":{"atoms":[700,682,660,657,653,654]}},{"Entity":{"atom":461}},{"Entity":{"atom":704}},{"Str":{"pattern":"-"}},{"Sequence":{"atoms":[702,703]}},{"Entity":{"atom":428}},{"Entity":{"atom":704}},{"Sequence":{"atoms":[706,707]}},{"Alternative":{"atoms":[0,575,705,708]}}],"root":709},"bindings":[]}},"preprocess":{},"tables":{"units":{"file":"units.yaml","rows":[{"name":"ton-force (2000 lb)"},{"name":"ton_refrigeration"},{"name":"dprime_Hg_32degF"},{"name":"dprime_Hg_60degF"},{"name":"fl oz (US label)"},{"name":"a_sidereal_year"},{"name":"a_tropical_year"},{"name":"aW (Cardelli)"},{"name":"ftH_2O_39degF"},{"name":"inH_2O_39degF"},{"name":"inH_2O_60degF"},{"name":"liq pint (US)"},{"name":"oz (US label)"},{"name":"pica_computer"},{"name":"rad_radiation"},{"name":"cmH_2O_4degC"},{"name":"ft_US_survey"},{"name":"h-bar_atomic"},{"name":"in_US_survey"},{"name":"lambda-bar_C"},{"name":"mi_US_survey"},{"name":"min_sidereal"},{"name":"pica_printer"},{"name":"yd_US_survey"},{"name":"dry pt (US)"},{"name":"dry qt (US)"},{"name":"gi_imperial"},{"name":"hp_electric"},{"name":"inHg_32degF"},{"name":"inHg_60degF"},{"name":"liq qt (US)"},{"name":"pt_computer"},{"name":"statcoulomb"},{"name":"\"Hg_32degF"},{"name":"\"Hg_60degF"},{"name":"Btu_39degF"},{"name":"Btu_59degF"},{"name":"Btu_60degF"},{"name":"cmHg_0degC"},{"name":"d_sidereal"},{"name":"dwt (troy)"},{"name":"fl oz (UK)"},{"name":"fl oz (US)"},{"name":"h-bar_eV_s"},{"name":"h_sidereal"},{"name":"m_e_atomic"},{"name":"pt_printer"},{"name":"rh_percent"},{"name":"s_sidereal"},{"name":"tbsp_label"},{"name":"cup_label"},{"name":"dprime_Hg"},{"name":"dprime_in"},{"name":"dr (avdp)"},{"name":"hp_boiler"},{"name":"hp_metric"},{"name":"prime_min"},{"name":"scr (ap.)"},{"name":"ton_short"},{"name":"tsp_label"},{"name":"Btu_mean"},{"name":"E_erlang"},{"name":"bbl (US)"},{"name":"cwt (UK)"},{"name":"cwt (US)"},{"name":"dprime_s"},{"name":"gal (UK)"},{"name":"gal (US)"},{"name":"hp_water"},{"name":"mil_nato"},{"name":"prime_Hg"},{"name":"prime_ft"},{"name":"statwatt"},{"name":"thm (EC)"},{"name":"thm (US)"},{"name":"ton_long"},{"name":"Lambert"},{"name":"bu (US)"},{"name":"lb_troy"},{"name":"oz_troy"},{"name":"pt (UK)"},{"name":"qt (UK)"},{"name":"statmho"},{"name":"statohm"},{"name":"ton_TNT"},{"name":"Btu_th"},{"name":"a_year"},{"name":"byte_B"},{"name":"cal_IT"},{"name":"cal_th"},{"name":"cmH_2O"},{"name":"dprime"},{"name":"ftH_2O"},{"name":"inH_2O"},{"name":"kayser"},{"name":"micron"},{"name":"mmH_2O"},{"name":"statWb"},{"name":"'_min"},{"name":"Aring"},{"name":"Darcy"},{"name":"abohm"},{"name":"barye"},{"name":"bel_B"},{"name":"dB_mW"},{"name":"darcy"},{"name":"fermi"},{"name":"fl dr"},{"name":"gamma"},{"name":"h-bar"},{"name":"hp_UK"},{"name":"lbmol"},{"name":"minim"},{"name":"prime"},{"name":"shake"},{"name":"statA"},{"name":"statF"},{"name":"statH"},{"name":"statT"},{"name":"statV"},{"name":"\"_in"},{"name":"'_ft"},{"name":"Hart"},{"name":"Torr"},{"name":"barn"},{"name":"cmHg"},{"name":"cmil"},{"name":"degC"},{"name":"degF"},{"name":"degK"},{"name":"degR"},{"name":"fath"},{"name":"ft.L"},{"name":"ft.c"},{"name":"ftHg"},{"name":"inHg"},{"name":"l.h."},{"name":"l.m."},{"name":"l.s."},{"name":"l.w."},{"name":"l.y."},{"name":"mmHg"},{"name":"slug"},{"name":"tbsp"},{"name":"thou"},{"name":"\"Hg"},{"name":"\"_s"},{"name":"'Hg"},{"name":"Btu"},{"name":"E_h"},{"name":"Gal"},{"name":"Ohm"},{"name":"a_0"},{"name":"abA"},{"name":"abC"},{"name":"abF"},{"name":"abH"},{"name":"abS"},{"name":"abV"},{"name":"atm"},{"name":"bar"},{"name":"bit"},{"name":"c_0"},{"name":"cal"},{"name":"cup"},{"name":"dBm"},{"name":"dec"},{"name":"deg"},{"name":"den"},{"name":"dyn"},{"name":"erg"},{"name":"fur"},{"name":"gon"},{"name":"gpm"},{"name":"kat"},{"name":"kip"},{"name":"lbf"},{"name":"lnk"},{"name":"m_e"},{"name":"mil"},{"name":"min"},{"name":"mol"},{"name":"mpg"},{"name":"oct"},{"name":"pdl"},{"name":"ppm"},{"name":"psi"},{"name":"rad"},{"name":"rem"},{"name":"rhe"},{"name":"tex"},{"name":"tsp"},{"name":"var"},{"name":"Bd"},{"name":"Bi"},{"name":"Bq"},{"name":"Ci"},{"name":"Da"},{"name":"Gi"},{"name":"Gs"},{"name":"Gy"},{"name":"Hz"},{"name":"Mx"},{"name":"Np"},{"name":"Oe"},{"name":"Pa"},{"name":"Sh"},{"name":"St"},{"name":"Sv"},{"name":"Wb"},{"name":"ac"},{"name":"as"},{"name":"at"},{"name":"cd"},{"name":"ch"},{"name":"ct"},{"name":"dr"},{"name":"eV"},{"name":"ft"},{"name":"gf"},{"name":"gi"},{"name":"gr"},{"name":"ha"},{"name":"hp"},{"name":"in"},{"name":"kn"},{"name":"kp"},{"name":"lb"},{"name":"lm"},{"name":"lx"},{"name":"mi"},{"name":"oz"},{"name":"pH"},{"name":"pc"},{"name":"ph"},{"name":"pk"},{"name":"rd"},{"name":"rh"},{"name":"sb"},{"name":"sr"},{"name":"st"},{"name":"ua"},{"name":"yd"},{"name":"\""},{"name":"'"},{"name":"A"},{"name":"C"},{"name":"D"},{"name":"F"},{"name":"G"},{"name":"H"},{"name":"J"},{"name":"K"},{"name":"L"},{"name":"M"},{"name":"N"},{"name":"P"},{"name":"R"},{"name":"S"},{"name":"T"},{"name":"V"},{"name":"W"},{"name":"a"},{"name":"c"},{"name":"d"},{"name":"e"},{"name":"g"},{"name":"h"},{"name":"l"},{"name":"m"},{"name":"s"},{"name":"t"},{"name":"u"}]},"dimensions":{"file":"dimensions.yaml","rows":[{"name":"dim_Theta"},{"name":"dim_phi"},{"name":"dim_I"},{"name":"dim_J"},{"name":"dim_L"},{"name":"dim_M"},{"name":"dim_N"},{"name":"dim_T"}]},"prefixes_double":{"file":"prefixes_double.yaml","rows":[{"name":"Ei"},{"name":"Gi"},{"name":"Ki"},{"name":"Mi"},{"name":"Pi"},{"name":"Ti"},{"name":"Yi"},{"name":"Zi"},{"name":"da"}]},"prefixes_single":{"file":"prefixes_single.yaml","rows":[{"name":"1"},{"name":"E"},{"name":"G"},{"name":"M"},{"name":"P"},{"name":"Q"},{"name":"R"},{"name":"T"},{"name":"Y"},{"name":"Z"},{"name":"a"},{"name":"c"},{"name":"d"},{"name":"f"},{"name":"h"},{"name":"k"},{"name":"m"},{"name":"n"},{"name":"p"},{"name":"q"},{"name":"r"},{"name":"u"},{"name":"y"},{"name":"z"}]}},"lint":{"order_warnings":["rule forward_slashes: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule end_guard: branches 1 and 2 are order-dependent (first set not statically known)","rule slashed_number_named_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 2 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule wrapper_prefixes_units_value: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule named_int_exp_prefixes_units: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule implicit_extended: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule implicit_extended: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_named_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"expression","render":{},"derive":{},"tests":[{"entry":"expression","kind":"accept","input":"mm*s^-2","expect":{}},{"entry":"expression","kind":"accept","input":"sqrt(Hz)","expect":{}},{"entry":"expression","kind":"accept","input":"K/(kg*m)","expect":{}},{"entry":"expression","kind":"accept","input":"p-","expect":{}},{"entry":"expression","kind":"accept","input":"(m)(s)","expect":{}},{"entry":"expression","kind":"accept","input":"mm*","expect":{}},{"entry":"expression","kind":"accept","input":"sqrt(sqrt(m))","expect":{}},{"entry":"expression","kind":"reject","input":"que?","expect":{}},{"entry":"expression","kind":"reject","input":"m2","expect":{}},{"entry":"expression","kind":"reject","input":"dim_Ldim_M","expect":{}}],"docs":{},"source":"# UnitsML AsciiUnits expression grammar.\n#\n# 1:1 transcription of unitsml-ruby lib/unitsml/parse.rb +\n# lib/unitsml/intermediate_exp_rules.rb (Parslet), rule for rule, in the\n# same alternative order — PEG ordered choice makes order decisive, and the\n# quirks (trailing-extender acceptance, guard fall-through to prefixed\n# units, no power after fenced/sqrt forms) are load-bearing.\n#\n# Terminal tables are generated from UnitsDB via scripts/gen_tables.rb and\n# embedded in the artifact at compile time.\n#\n# Capture names (unit, prefix, dimension, integer, power_numerator, extender,\n# sqrt, int_exp, sequence, first_set, second_set, open_paren, close_paren)\n# mirror the Parslet .as() names so consumers can map them 1:1.\n\ngrammar UnitsmlAscii version \"0.1.0\" {\n\n ws = %x09 / %x0A / %x0B / %x0C / %x0D / %x20\n spaces = 1*ws\n lparen = \"(\"\n rparen = \")\"\n hyphen = \"-\"\n star = \"*\"\n digit = %x30-39\n forward_slashes = \"//\" / \"/\"\n extender = (forward_slashes / star) as extender\n number = [\"-\"] 1*digit\n slashed_number = (number [forward_slashes number]) as integer\n end_guard = !ANY / &(extender / lparen / rparen / spaces)\n\n unit = alt from_table \"units\" column \"name\" as unit\n single_letter_prefixes = alt from_table \"prefixes_single\" column \"name\" as prefix\n double_letter_prefixes = alt from_table \"prefixes_double\" column \"name\" as prefix\n dimensions = alt from_table \"dimensions\" column \"name\" as dimension\n\n power = \"^\" slashed_number_int_exp as power_numerator\n slashed_number_int_exp = slashed_number / (lparen slashed_number_named_int_exp as int_exp rparen)\n slashed_number_named_int_exp = (lparen slashed_number_int_exp rparen) / slashed_number_int_exp\n unit_and_power = unit [power]\n sqrt_sequence = \"sqrt\" lparen prefixes_units_int_exp as sqrt rparen\n sqrt_dimensions = \"sqrt\" lparen dimension_rules_int_exp as sqrt rparen\n extended_prefixed_units = extender [spaces] prefixes_units_int_exp as sequence\n powered_dimensions = dimensions [power]\n\n prefixes_units = (sqrt_sequence [extended_prefixed_units]) / (\"1\" as unit [extended_prefixed_units]) / (unit_and_power extended_prefixed_units) / (unit_and_power end_guard) / (double_letter_prefixes unit_and_power extended_prefixed_units) / (double_letter_prefixes unit_and_power) / (single_letter_prefixes unit_and_power extended_prefixed_units) / (single_letter_prefixes unit_and_power)\n\n wrapper_prefixes_units_value = int_exp_prefixes_units / prefixes_units_int_exp\n int_exp_prefixes_units = lparen [spaces] named_int_exp_prefixes_units as int_exp [spaces] rparen\n prefixes_units_named_int_exp = (lparen as open_paren [spaces] wrapper_prefixes_units_value as int_exp [spaces] rparen as close_paren)\n named_int_exp_prefixes_units = (prefixes_units_named_int_exp as int_exp [(prefixes_units_int_exp / extended_prefixed_units)]) / prefixes_units_int_exp\n\n implicit_extended = (prefixes_units as first_set spaces as extender prefixes_units as second_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (prefixes_units as first_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] prefixes_units as second_set)\n\n prefixes_units_int_exp = (implicit_extended as implicit_extended [spaces] [prefixes_units_int_exp as sequence]) / (implicit_extended as implicit_extended [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (int_exp_prefixes_units [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (prefixes_units [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (int_exp_prefixes_units [prefixes_units_int_exp as sequence]) / (prefixes_units [prefixes_units_int_exp as sequence])\n\n dimension_rules = (sqrt_dimensions / powered_dimensions) [extended_dimension_rules]\n extended_dimension_rules = [spaces] extender [spaces] dimension_rules_int_exp as sequence\n int_exp_dimension_rules = lparen dimension_rules_named_exp as int_exp rparen [extended_dimension_rules]\n dimension_rules_named_exp = ((lparen as open_paren dimension_rules_int_exp as int_exp rparen as close_paren) as int_exp [spaces] (dimension_rules_int_exp / extended_dimension_rules) as sequence) / dimension_rules_int_exp\n\n dimension_rules_int_exp = (dimension_rules as first_set spaces as extender dimension_rules as second_set [dimension_rules_int_exp]) / (dimension_rules as first_set [spaces] int_exp_dimension_rules as second_int_exp_set [dimension_rules_int_exp]) / (int_exp_dimension_rules as first_int_exp_set [spaces] dimension_rules as second_set [dimension_rules_int_exp]) / (int_exp_dimension_rules as first_int_exp_set [spaces] int_exp_dimension_rules as second_int_exp_set [dimension_rules_int_exp]) / int_exp_dimension_rules / dimension_rules\n\n expression = prefixes_units_int_exp / dimension_rules_int_exp / (single_letter_prefixes hyphen) / (double_letter_prefixes hyphen)\n\n entry expression: expression\n\n test expression {\n accept \"mm*s^-2\"\n accept \"sqrt(Hz)\"\n accept \"K/(kg*m)\"\n accept \"p-\"\n accept \"(m)(s)\"\n accept \"mm*\"\n accept \"sqrt(sqrt(m))\"\n reject \"que?\"\n reject \"m2\"\n reject \"dim_Ldim_M\"\n }\n}\n","source_hash":"3fb5a2ab7d214410c5659cdef1c0b1251eb99c7d57496610f43b4fb23b5cd020","compiler_version":"1.3.108","checksum":"sha256:b1497bdaff9a9bdf5bd92e7a0354200a8dfa54f91c9cdf3c254537e95ed883cf"}
1
+ {"bindings":null,"version":"0.1.0","grammar":"UnitsmlAscii","shape":"parsanol-tree/v2","binding_version":1,"entries":{"expression":{"root":"expression","grammar":{"atoms":[{"Entity":{"atom":588}},{"Entity":{"atom":585}},{"Entity":{"atom":582}},{"Entity":{"atom":580}},{"Str":{"pattern":"sqrt"}},{"Entity":{"atom":6}},{"Str":{"pattern":"("}},{"Entity":{"atom":577}},{"Named":{"name":"implicit_extended","atom":1}},{"Entity":{"atom":18}},{"Entity":{"atom":17}},{"Re":{"pattern":"[\\x09]"}},{"Re":{"pattern":"[\\x0a]"}},{"Re":{"pattern":"[\\x0b]"}},{"Re":{"pattern":"[\\x0c]"}},{"Re":{"pattern":"[\\x0d]"}},{"Re":{"pattern":"[ ]"}},{"Alternative":{"atoms":[11,12,13,14,15,16]}},{"Repetition":{"atom":10,"min":1,"max":null,"tag":"Repetition"}},{"Repetition":{"atom":9,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":573}},{"Named":{"name":"sequence","atom":20}},{"Repetition":{"atom":21,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[8,19,22]}},{"Entity":{"atom":570}},{"Named":{"name":"first_set","atom":2}},{"Entity":{"atom":18}},{"Named":{"name":"extender","atom":26}},{"Entity":{"atom":546}},{"Entity":{"atom":543}},{"Entity":{"atom":38}},{"Entity":{"atom":34}},{"Str":{"pattern":"//"}},{"Str":{"pattern":"/"}},{"Alternative":{"atoms":[32,33]}},{"Entity":{"atom":36}},{"Str":{"pattern":"*"}},{"Alternative":{"atoms":[31,35]}},{"Named":{"name":"extender","atom":37}},{"Entity":{"atom":18}},{"Repetition":{"atom":39,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":541}},{"Named":{"name":"implicit_extended","atom":24}},{"Entity":{"atom":18}},{"Repetition":{"atom":43,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":46,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":538}},{"Named":{"name":"sequence","atom":48}},{"Sequence":{"atoms":[42,44,45,47,49]}},{"Entity":{"atom":536}},{"Entity":{"atom":6}},{"Entity":{"atom":18}},{"Repetition":{"atom":53,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":534}},{"Entity":{"atom":526}},{"Entity":{"atom":6}},{"Named":{"name":"open_paren","atom":57}},{"Entity":{"atom":18}},{"Repetition":{"atom":59,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":520}},{"Entity":{"atom":68}},{"Named":{"name":"int_exp","atom":55}},{"Entity":{"atom":18}},{"Repetition":{"atom":64,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":67}},{"Str":{"pattern":")"}},{"Sequence":{"atoms":[52,54,63,65,66]}},{"Entity":{"atom":519}},{"Entity":{"atom":18}},{"Repetition":{"atom":70,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":73,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":516}},{"Named":{"name":"sequence","atom":75}},{"Sequence":{"atoms":[51,71,72,74,76]}},{"Entity":{"atom":486}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,79]}},{"Str":{"pattern":"1"}},{"Named":{"name":"unit","atom":81}},{"Entity":{"atom":85}},{"Named":{"name":"sequence","atom":41}},{"Sequence":{"atoms":[30,40,84]}},{"Repetition":{"atom":83,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[82,86]}},{"Entity":{"atom":402}},{"Entity":{"atom":364}},{"Str":{"pattern":"ton-force (2000 lb)"}},{"Str":{"pattern":"ton_refrigeration"}},{"Str":{"pattern":"dprime_Hg_32degF"}},{"Str":{"pattern":"dprime_Hg_60degF"}},{"Str":{"pattern":"fl oz (US label)"}},{"Str":{"pattern":"a_sidereal_year"}},{"Str":{"pattern":"a_tropical_year"}},{"Str":{"pattern":"aW (Cardelli)"}},{"Str":{"pattern":"ftH_2O_39degF"}},{"Str":{"pattern":"inH_2O_39degF"}},{"Str":{"pattern":"inH_2O_60degF"}},{"Str":{"pattern":"liq pint (US)"}},{"Str":{"pattern":"oz (US label)"}},{"Str":{"pattern":"pica_computer"}},{"Str":{"pattern":"rad_radiation"}},{"Str":{"pattern":"cmH_2O_4degC"}},{"Str":{"pattern":"ft_US_survey"}},{"Str":{"pattern":"h-bar_atomic"}},{"Str":{"pattern":"in_US_survey"}},{"Str":{"pattern":"lambda-bar_C"}},{"Str":{"pattern":"mi_US_survey"}},{"Str":{"pattern":"min_sidereal"}},{"Str":{"pattern":"pica_printer"}},{"Str":{"pattern":"yd_US_survey"}},{"Str":{"pattern":"dry pt (US)"}},{"Str":{"pattern":"dry qt (US)"}},{"Str":{"pattern":"gi_imperial"}},{"Str":{"pattern":"hp_electric"}},{"Str":{"pattern":"inHg_32degF"}},{"Str":{"pattern":"inHg_60degF"}},{"Str":{"pattern":"liq qt (US)"}},{"Str":{"pattern":"pt_computer"}},{"Str":{"pattern":"statcoulomb"}},{"Str":{"pattern":"\"Hg_32degF"}},{"Str":{"pattern":"\"Hg_60degF"}},{"Str":{"pattern":"Btu_39degF"}},{"Str":{"pattern":"Btu_59degF"}},{"Str":{"pattern":"Btu_60degF"}},{"Str":{"pattern":"cmHg_0degC"}},{"Str":{"pattern":"d_sidereal"}},{"Str":{"pattern":"dwt (troy)"}},{"Str":{"pattern":"fl oz (UK)"}},{"Str":{"pattern":"fl oz (US)"}},{"Str":{"pattern":"h-bar_eV_s"}},{"Str":{"pattern":"h_sidereal"}},{"Str":{"pattern":"m_e_atomic"}},{"Str":{"pattern":"pt_printer"}},{"Str":{"pattern":"rh_percent"}},{"Str":{"pattern":"s_sidereal"}},{"Str":{"pattern":"tbsp_label"}},{"Str":{"pattern":"cup_label"}},{"Str":{"pattern":"dprime_Hg"}},{"Str":{"pattern":"dprime_in"}},{"Str":{"pattern":"dr (avdp)"}},{"Str":{"pattern":"hp_boiler"}},{"Str":{"pattern":"hp_metric"}},{"Str":{"pattern":"prime_min"}},{"Str":{"pattern":"scr (ap.)"}},{"Str":{"pattern":"ton_short"}},{"Str":{"pattern":"tsp_label"}},{"Str":{"pattern":"Btu_mean"}},{"Str":{"pattern":"E_erlang"}},{"Str":{"pattern":"bbl (US)"}},{"Str":{"pattern":"cwt (UK)"}},{"Str":{"pattern":"cwt (US)"}},{"Str":{"pattern":"dprime_s"}},{"Str":{"pattern":"gal (UK)"}},{"Str":{"pattern":"gal (US)"}},{"Str":{"pattern":"hp_water"}},{"Str":{"pattern":"mil_nato"}},{"Str":{"pattern":"prime_Hg"}},{"Str":{"pattern":"prime_ft"}},{"Str":{"pattern":"statwatt"}},{"Str":{"pattern":"thm (EC)"}},{"Str":{"pattern":"thm (US)"}},{"Str":{"pattern":"ton_long"}},{"Str":{"pattern":"Lambert"}},{"Str":{"pattern":"bu (US)"}},{"Str":{"pattern":"lb_troy"}},{"Str":{"pattern":"oz_troy"}},{"Str":{"pattern":"pt (UK)"}},{"Str":{"pattern":"qt (UK)"}},{"Str":{"pattern":"statmho"}},{"Str":{"pattern":"statohm"}},{"Str":{"pattern":"ton_TNT"}},{"Str":{"pattern":"Btu_th"}},{"Str":{"pattern":"a_year"}},{"Str":{"pattern":"byte_B"}},{"Str":{"pattern":"cal_IT"}},{"Str":{"pattern":"cal_th"}},{"Str":{"pattern":"cmH_2O"}},{"Str":{"pattern":"dprime"}},{"Str":{"pattern":"ftH_2O"}},{"Str":{"pattern":"inH_2O"}},{"Str":{"pattern":"kayser"}},{"Str":{"pattern":"micron"}},{"Str":{"pattern":"mmH_2O"}},{"Str":{"pattern":"statWb"}},{"Str":{"pattern":"'_min"}},{"Str":{"pattern":"Aring"}},{"Str":{"pattern":"Darcy"}},{"Str":{"pattern":"abohm"}},{"Str":{"pattern":"barye"}},{"Str":{"pattern":"bel_B"}},{"Str":{"pattern":"dB_mW"}},{"Str":{"pattern":"darcy"}},{"Str":{"pattern":"fermi"}},{"Str":{"pattern":"fl dr"}},{"Str":{"pattern":"gamma"}},{"Str":{"pattern":"h-bar"}},{"Str":{"pattern":"hp_UK"}},{"Str":{"pattern":"lbmol"}},{"Str":{"pattern":"minim"}},{"Str":{"pattern":"prime"}},{"Str":{"pattern":"shake"}},{"Str":{"pattern":"statA"}},{"Str":{"pattern":"statF"}},{"Str":{"pattern":"statH"}},{"Str":{"pattern":"statT"}},{"Str":{"pattern":"statV"}},{"Str":{"pattern":"\"_in"}},{"Str":{"pattern":"'_ft"}},{"Str":{"pattern":"Hart"}},{"Str":{"pattern":"Torr"}},{"Str":{"pattern":"barn"}},{"Str":{"pattern":"cmHg"}},{"Str":{"pattern":"cmil"}},{"Str":{"pattern":"degC"}},{"Str":{"pattern":"degF"}},{"Str":{"pattern":"degK"}},{"Str":{"pattern":"degR"}},{"Str":{"pattern":"fath"}},{"Str":{"pattern":"ft.L"}},{"Str":{"pattern":"ft.c"}},{"Str":{"pattern":"ftHg"}},{"Str":{"pattern":"inHg"}},{"Str":{"pattern":"l.h."}},{"Str":{"pattern":"l.m."}},{"Str":{"pattern":"l.s."}},{"Str":{"pattern":"l.w."}},{"Str":{"pattern":"l.y."}},{"Str":{"pattern":"mmHg"}},{"Str":{"pattern":"slug"}},{"Str":{"pattern":"tbsp"}},{"Str":{"pattern":"thou"}},{"Str":{"pattern":"\"Hg"}},{"Str":{"pattern":"\"_s"}},{"Str":{"pattern":"'Hg"}},{"Str":{"pattern":"Btu"}},{"Str":{"pattern":"E_h"}},{"Str":{"pattern":"Gal"}},{"Str":{"pattern":"Ohm"}},{"Str":{"pattern":"a_0"}},{"Str":{"pattern":"abA"}},{"Str":{"pattern":"abC"}},{"Str":{"pattern":"abF"}},{"Str":{"pattern":"abH"}},{"Str":{"pattern":"abS"}},{"Str":{"pattern":"abV"}},{"Str":{"pattern":"atm"}},{"Str":{"pattern":"bar"}},{"Str":{"pattern":"bit"}},{"Str":{"pattern":"c_0"}},{"Str":{"pattern":"cal"}},{"Str":{"pattern":"cup"}},{"Str":{"pattern":"dBm"}},{"Str":{"pattern":"dec"}},{"Str":{"pattern":"deg"}},{"Str":{"pattern":"den"}},{"Str":{"pattern":"dyn"}},{"Str":{"pattern":"erg"}},{"Str":{"pattern":"fur"}},{"Str":{"pattern":"gon"}},{"Str":{"pattern":"gpm"}},{"Str":{"pattern":"kat"}},{"Str":{"pattern":"kip"}},{"Str":{"pattern":"lbf"}},{"Str":{"pattern":"lnk"}},{"Str":{"pattern":"m_e"}},{"Str":{"pattern":"mil"}},{"Str":{"pattern":"min"}},{"Str":{"pattern":"mol"}},{"Str":{"pattern":"mpg"}},{"Str":{"pattern":"oct"}},{"Str":{"pattern":"pdl"}},{"Str":{"pattern":"ppm"}},{"Str":{"pattern":"psi"}},{"Str":{"pattern":"rad"}},{"Str":{"pattern":"rem"}},{"Str":{"pattern":"rhe"}},{"Str":{"pattern":"tex"}},{"Str":{"pattern":"tsp"}},{"Str":{"pattern":"var"}},{"Str":{"pattern":"Bd"}},{"Str":{"pattern":"Bi"}},{"Str":{"pattern":"Bq"}},{"Str":{"pattern":"Ci"}},{"Str":{"pattern":"Da"}},{"Str":{"pattern":"Gi"}},{"Str":{"pattern":"Gs"}},{"Str":{"pattern":"Gy"}},{"Str":{"pattern":"Hz"}},{"Str":{"pattern":"Mx"}},{"Str":{"pattern":"Np"}},{"Str":{"pattern":"Oe"}},{"Str":{"pattern":"Pa"}},{"Str":{"pattern":"Sh"}},{"Str":{"pattern":"St"}},{"Str":{"pattern":"Sv"}},{"Str":{"pattern":"Wb"}},{"Str":{"pattern":"ac"}},{"Str":{"pattern":"as"}},{"Str":{"pattern":"at"}},{"Str":{"pattern":"cd"}},{"Str":{"pattern":"ch"}},{"Str":{"pattern":"ct"}},{"Str":{"pattern":"dr"}},{"Str":{"pattern":"eV"}},{"Str":{"pattern":"ft"}},{"Str":{"pattern":"gf"}},{"Str":{"pattern":"gi"}},{"Str":{"pattern":"gr"}},{"Str":{"pattern":"ha"}},{"Str":{"pattern":"hp"}},{"Str":{"pattern":"in"}},{"Str":{"pattern":"kn"}},{"Str":{"pattern":"kp"}},{"Str":{"pattern":"lb"}},{"Str":{"pattern":"lm"}},{"Str":{"pattern":"lx"}},{"Str":{"pattern":"mi"}},{"Str":{"pattern":"oz"}},{"Str":{"pattern":"pH"}},{"Str":{"pattern":"pc"}},{"Str":{"pattern":"ph"}},{"Str":{"pattern":"pk"}},{"Str":{"pattern":"rd"}},{"Str":{"pattern":"rh"}},{"Str":{"pattern":"sb"}},{"Str":{"pattern":"sr"}},{"Str":{"pattern":"st"}},{"Str":{"pattern":"ua"}},{"Str":{"pattern":"yd"}},{"Str":{"pattern":"\""}},{"Str":{"pattern":"'"}},{"Str":{"pattern":"A"}},{"Str":{"pattern":"C"}},{"Str":{"pattern":"D"}},{"Str":{"pattern":"F"}},{"Str":{"pattern":"G"}},{"Str":{"pattern":"H"}},{"Str":{"pattern":"J"}},{"Str":{"pattern":"K"}},{"Str":{"pattern":"L"}},{"Str":{"pattern":"M"}},{"Str":{"pattern":"N"}},{"Str":{"pattern":"P"}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"S"}},{"Str":{"pattern":"T"}},{"Str":{"pattern":"V"}},{"Str":{"pattern":"W"}},{"Str":{"pattern":"a"}},{"Str":{"pattern":"c"}},{"Str":{"pattern":"d"}},{"Str":{"pattern":"e"}},{"Str":{"pattern":"g"}},{"Str":{"pattern":"h"}},{"Str":{"pattern":"l"}},{"Str":{"pattern":"m"}},{"Str":{"pattern":"s"}},{"Str":{"pattern":"t"}},{"Str":{"pattern":"u"}},{"Alternative":{"atoms":[90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362]}},{"Named":{"name":"unit","atom":363}},{"Entity":{"atom":400}},{"Str":{"pattern":"^"}},{"Entity":{"atom":398}},{"Entity":{"atom":381}},{"Entity":{"atom":375}},{"Str":{"pattern":"-"}},{"Repetition":{"atom":370,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":373}},{"Re":{"pattern":"[\\x30-\\x39]"}},{"Repetition":{"atom":372,"min":1,"max":null,"tag":"Repetition"}},{"Sequence":{"atoms":[371,374]}},{"Entity":{"atom":34}},{"Entity":{"atom":375}},{"Sequence":{"atoms":[376,377]}},{"Repetition":{"atom":378,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[369,379]}},{"Named":{"name":"integer","atom":380}},{"Entity":{"atom":6}},{"Entity":{"atom":395}},{"Entity":{"atom":6}},{"Named":{"name":"open_paren","atom":384}},{"Entity":{"atom":390}},{"Named":{"name":"int_exp","atom":383}},{"Entity":{"atom":67}},{"Sequence":{"atoms":[382,387,388]}},{"Alternative":{"atoms":[368,389]}},{"Entity":{"atom":67}},{"Named":{"name":"close_paren","atom":391}},{"Sequence":{"atoms":[385,386,392]}},{"Entity":{"atom":390}},{"Alternative":{"atoms":[393,394]}},{"Named":{"name":"int_exp","atom":383}},{"Sequence":{"atoms":[382,396,388]}},{"Alternative":{"atoms":[368,397]}},{"Named":{"name":"power_numerator","atom":367}},{"Sequence":{"atoms":[366,399]}},{"Repetition":{"atom":365,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[89,401]}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[88,403]}},{"Entity":{"atom":402}},{"Entity":{"atom":415}},{"Re":{"pattern":"[\\x00-\\u{10ffff}]"}},{"Lookahead":{"atom":407,"positive":false}},{"Entity":{"atom":38}},{"Entity":{"atom":6}},{"Entity":{"atom":67}},{"Entity":{"atom":18}},{"Alternative":{"atoms":[409,410,411,412]}},{"Lookahead":{"atom":413,"positive":true}},{"Alternative":{"atoms":[408,414]}},{"Sequence":{"atoms":[405,406]}},{"Entity":{"atom":428}},{"Str":{"pattern":"Ei"}},{"Str":{"pattern":"Gi"}},{"Str":{"pattern":"Ki"}},{"Str":{"pattern":"Mi"}},{"Str":{"pattern":"Pi"}},{"Str":{"pattern":"Ti"}},{"Str":{"pattern":"Yi"}},{"Str":{"pattern":"Zi"}},{"Str":{"pattern":"da"}},{"Alternative":{"atoms":[418,419,420,421,422,423,424,425,426]}},{"Named":{"name":"prefix","atom":427}},{"Entity":{"atom":402}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[417,429,430]}},{"Entity":{"atom":428}},{"Entity":{"atom":402}},{"Sequence":{"atoms":[432,433]}},{"Entity":{"atom":461}},{"Str":{"pattern":"1"}},{"Str":{"pattern":"E"}},{"Str":{"pattern":"G"}},{"Str":{"pattern":"M"}},{"Str":{"pattern":"P"}},{"Str":{"pattern":"Q"}},{"Str":{"pattern":"R"}},{"Str":{"pattern":"T"}},{"Str":{"pattern":"Y"}},{"Str":{"pattern":"Z"}},{"Str":{"pattern":"a"}},{"Str":{"pattern":"c"}},{"Str":{"pattern":"d"}},{"Str":{"pattern":"f"}},{"Str":{"pattern":"h"}},{"Str":{"pattern":"k"}},{"Str":{"pattern":"m"}},{"Str":{"pattern":"n"}},{"Str":{"pattern":"p"}},{"Str":{"pattern":"q"}},{"Str":{"pattern":"r"}},{"Str":{"pattern":"u"}},{"Str":{"pattern":"y"}},{"Str":{"pattern":"z"}},{"Alternative":{"atoms":[436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459]}},{"Named":{"name":"prefix","atom":460}},{"Entity":{"atom":402}},{"Entity":{"atom":85}},{"Sequence":{"atoms":[435,462,463]}},{"Entity":{"atom":461}},{"Entity":{"atom":402}},{"Sequence":{"atoms":[465,466]}},{"Entity":{"atom":481}},{"Str":{"pattern":"kcal_IT"}},{"Str":{"pattern":"kcal_th"}},{"Str":{"pattern":"mbar"}},{"Str":{"pattern":"cSt"}},{"Str":{"pattern":"kgf"}},{"Str":{"pattern":"uin"}},{"Str":{"pattern":"cP"}},{"Str":{"pattern":"dB"}},{"Str":{"pattern":"kg"}},{"Str":{"pattern":"mL"}},{"Str":{"pattern":"ml"}},{"Alternative":{"atoms":[469,470,471,472,473,474,475,476,477,478,479]}},{"Named":{"name":"unit","atom":480}},{"Entity":{"atom":400}},{"Repetition":{"atom":482,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":415}},{"Sequence":{"atoms":[468,483,484]}},{"Alternative":{"atoms":[80,87,404,416,431,434,464,467,485]}},{"Entity":{"atom":18}},{"Repetition":{"atom":487,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":490,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":513}},{"Named":{"name":"sequence","atom":492}},{"Sequence":{"atoms":[78,488,489,491,493]}},{"Entity":{"atom":68}},{"Entity":{"atom":509}},{"Named":{"name":"sequence","atom":496}},{"Repetition":{"atom":497,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[495,498]}},{"Entity":{"atom":486}},{"Entity":{"atom":505}},{"Named":{"name":"sequence","atom":501}},{"Repetition":{"atom":502,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[500,503]}},{"Alternative":{"atoms":[23,50,77,494,499,504]}},{"Named":{"name":"sequence","atom":501}},{"Repetition":{"atom":506,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[500,507]}},{"Alternative":{"atoms":[23,50,77,494,499,508]}},{"Named":{"name":"sequence","atom":496}},{"Repetition":{"atom":510,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[495,511]}},{"Alternative":{"atoms":[23,50,77,494,512,508]}},{"Named":{"name":"sequence","atom":492}},{"Sequence":{"atoms":[78,488,489,491,514]}},{"Alternative":{"atoms":[23,50,77,515,512,508]}},{"Named":{"name":"sequence","atom":75}},{"Sequence":{"atoms":[51,71,72,74,517]}},{"Alternative":{"atoms":[23,50,518,515,512,508]}},{"Alternative":{"atoms":[62,69]}},{"Named":{"name":"int_exp","atom":61}},{"Entity":{"atom":18}},{"Repetition":{"atom":522,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":67}},{"Named":{"name":"close_paren","atom":524}},{"Sequence":{"atoms":[58,60,521,523,525]}},{"Named":{"name":"int_exp","atom":56}},{"Entity":{"atom":519}},{"Entity":{"atom":85}},{"Alternative":{"atoms":[528,529]}},{"Repetition":{"atom":530,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[527,531]}},{"Entity":{"atom":519}},{"Alternative":{"atoms":[532,533]}},{"Named":{"name":"int_exp","atom":55}},{"Sequence":{"atoms":[52,54,535,65,66]}},{"Sequence":{"atoms":[51,71,72,74,517]}},{"Alternative":{"atoms":[23,50,537,515,512,508]}},{"Named":{"name":"sequence","atom":48}},{"Sequence":{"atoms":[42,44,45,47,539]}},{"Alternative":{"atoms":[23,540,537,515,512,508]}},{"Named":{"name":"sequence","atom":41}},{"Sequence":{"atoms":[30,40,542]}},{"Repetition":{"atom":29,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[3,544]}},{"Alternative":{"atoms":[545,87,404,416,431,434,464,467,485]}},{"Named":{"name":"second_set","atom":28}},{"Sequence":{"atoms":[25,27,547]}},{"Entity":{"atom":536}},{"Named":{"name":"first_int_exp_set","atom":549}},{"Entity":{"atom":18}},{"Repetition":{"atom":551,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":536}},{"Named":{"name":"second_int_exp_set","atom":553}},{"Sequence":{"atoms":[550,552,554]}},{"Entity":{"atom":546}},{"Named":{"name":"first_set","atom":556}},{"Entity":{"atom":18}},{"Repetition":{"atom":558,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":536}},{"Named":{"name":"second_int_exp_set","atom":560}},{"Sequence":{"atoms":[557,559,561]}},{"Entity":{"atom":536}},{"Named":{"name":"first_int_exp_set","atom":563}},{"Entity":{"atom":18}},{"Repetition":{"atom":565,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":546}},{"Named":{"name":"second_set","atom":567}},{"Sequence":{"atoms":[564,566,568]}},{"Alternative":{"atoms":[548,555,562,569]}},{"Named":{"name":"implicit_extended","atom":24}},{"Sequence":{"atoms":[571,44,45,47,539]}},{"Alternative":{"atoms":[23,572,537,515,512,508]}},{"Named":{"name":"sequence","atom":20}},{"Repetition":{"atom":574,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[8,19,575]}},{"Alternative":{"atoms":[576,572,537,515,512,508]}},{"Named":{"name":"sqrt","atom":7}},{"Entity":{"atom":67}},{"Sequence":{"atoms":[4,5,578,579]}},{"Sequence":{"atoms":[3,544]}},{"Alternative":{"atoms":[581,87,404,416,431,434,464,467,485]}},{"Named":{"name":"first_set","atom":2}},{"Sequence":{"atoms":[583,27,547]}},{"Alternative":{"atoms":[584,555,562,569]}},{"Named":{"name":"implicit_extended","atom":1}},{"Sequence":{"atoms":[586,19,575]}},{"Alternative":{"atoms":[587,572,537,515,512,508]}},{"Entity":{"atom":715}},{"Entity":{"atom":712}},{"Entity":{"atom":710}},{"Str":{"pattern":"sqrt"}},{"Entity":{"atom":6}},{"Entity":{"atom":707}},{"Named":{"name":"first_set","atom":590}},{"Entity":{"atom":18}},{"Named":{"name":"extender","atom":596}},{"Entity":{"atom":704}},{"Entity":{"atom":613}},{"Entity":{"atom":610}},{"Str":{"pattern":"dim_Theta"}},{"Str":{"pattern":"dim_phi"}},{"Str":{"pattern":"dim_I"}},{"Str":{"pattern":"dim_J"}},{"Str":{"pattern":"dim_L"}},{"Str":{"pattern":"dim_M"}},{"Str":{"pattern":"dim_N"}},{"Str":{"pattern":"dim_T"}},{"Alternative":{"atoms":[601,602,603,604,605,606,607,608]}},{"Named":{"name":"dimension","atom":609}},{"Entity":{"atom":400}},{"Repetition":{"atom":611,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[600,612]}},{"Alternative":{"atoms":[591,599]}},{"Entity":{"atom":702}},{"Entity":{"atom":18}},{"Repetition":{"atom":616,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":38}},{"Entity":{"atom":18}},{"Repetition":{"atom":619,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":700}},{"Named":{"name":"second_set","atom":598}},{"Entity":{"atom":697}},{"Repetition":{"atom":623,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[595,597,622,624]}},{"Entity":{"atom":628}},{"Repetition":{"atom":615,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[614,627]}},{"Named":{"name":"first_set","atom":626}},{"Entity":{"atom":18}},{"Repetition":{"atom":630,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":694}},{"Entity":{"atom":6}},{"Entity":{"atom":692}},{"Entity":{"atom":6}},{"Named":{"name":"open_paren","atom":635}},{"Entity":{"atom":678}},{"Named":{"name":"second_int_exp_set","atom":632}},{"Entity":{"atom":675}},{"Repetition":{"atom":639,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[629,631,638,640]}},{"Entity":{"atom":649}},{"Named":{"name":"int_exp","atom":634}},{"Entity":{"atom":67}},{"Entity":{"atom":647}},{"Named":{"name":"sequence","atom":621}},{"Sequence":{"atoms":[617,618,620,646]}},{"Repetition":{"atom":645,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[633,643,644,648]}},{"Named":{"name":"first_int_exp_set","atom":642}},{"Entity":{"atom":18}},{"Repetition":{"atom":651,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":628}},{"Named":{"name":"second_set","atom":653}},{"Entity":{"atom":672}},{"Repetition":{"atom":655,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[650,652,654,656]}},{"Entity":{"atom":649}},{"Named":{"name":"first_int_exp_set","atom":658}},{"Entity":{"atom":18}},{"Repetition":{"atom":660,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":649}},{"Named":{"name":"second_int_exp_set","atom":662}},{"Entity":{"atom":669}},{"Repetition":{"atom":664,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[659,661,663,665]}},{"Entity":{"atom":649}},{"Entity":{"atom":628}},{"Alternative":{"atoms":[625,641,657,666,667,668]}},{"Repetition":{"atom":664,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[659,661,663,670]}},{"Alternative":{"atoms":[625,641,657,671,667,668]}},{"Repetition":{"atom":655,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[650,652,654,673]}},{"Alternative":{"atoms":[625,641,674,671,667,668]}},{"Repetition":{"atom":639,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[629,631,638,676]}},{"Alternative":{"atoms":[625,677,674,671,667,668]}},{"Named":{"name":"int_exp","atom":637}},{"Entity":{"atom":67}},{"Named":{"name":"close_paren","atom":680}},{"Sequence":{"atoms":[636,679,681]}},{"Named":{"name":"int_exp","atom":682}},{"Entity":{"atom":18}},{"Repetition":{"atom":684,"min":0,"max":1,"tag":"Maybe"}},{"Entity":{"atom":678}},{"Entity":{"atom":647}},{"Alternative":{"atoms":[686,687]}},{"Named":{"name":"sequence","atom":688}},{"Sequence":{"atoms":[683,685,689]}},{"Entity":{"atom":678}},{"Alternative":{"atoms":[690,691]}},{"Named":{"name":"int_exp","atom":634}},{"Sequence":{"atoms":[633,693,644,648]}},{"Named":{"name":"second_int_exp_set","atom":632}},{"Sequence":{"atoms":[629,631,695,676]}},{"Alternative":{"atoms":[625,696,674,671,667,668]}},{"Repetition":{"atom":623,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[595,597,622,698]}},{"Alternative":{"atoms":[699,696,674,671,667,668]}},{"Named":{"name":"sequence","atom":621}},{"Sequence":{"atoms":[617,618,620,701]}},{"Repetition":{"atom":615,"min":0,"max":1,"tag":"Maybe"}},{"Sequence":{"atoms":[614,703]}},{"Named":{"name":"second_set","atom":598}},{"Sequence":{"atoms":[595,597,705,698]}},{"Alternative":{"atoms":[706,696,674,671,667,668]}},{"Named":{"name":"sqrt","atom":594}},{"Entity":{"atom":67}},{"Sequence":{"atoms":[592,593,708,709]}},{"Alternative":{"atoms":[591,599]}},{"Sequence":{"atoms":[711,703]}},{"Named":{"name":"first_set","atom":590}},{"Sequence":{"atoms":[713,597,705,698]}},{"Alternative":{"atoms":[714,696,674,671,667,668]}},{"Entity":{"atom":461}},{"Entity":{"atom":718}},{"Str":{"pattern":"-"}},{"Sequence":{"atoms":[716,717]}},{"Entity":{"atom":428}},{"Entity":{"atom":718}},{"Sequence":{"atoms":[720,721]}},{"Alternative":{"atoms":[0,589,719,722]}}],"root":723},"bindings":[]}},"preprocess":{},"tables":{"units":{"file":"units.yaml","rows":[{"name":"ton-force (2000 lb)"},{"name":"ton_refrigeration"},{"name":"dprime_Hg_32degF"},{"name":"dprime_Hg_60degF"},{"name":"fl oz (US label)"},{"name":"a_sidereal_year"},{"name":"a_tropical_year"},{"name":"aW (Cardelli)"},{"name":"ftH_2O_39degF"},{"name":"inH_2O_39degF"},{"name":"inH_2O_60degF"},{"name":"liq pint (US)"},{"name":"oz (US label)"},{"name":"pica_computer"},{"name":"rad_radiation"},{"name":"cmH_2O_4degC"},{"name":"ft_US_survey"},{"name":"h-bar_atomic"},{"name":"in_US_survey"},{"name":"lambda-bar_C"},{"name":"mi_US_survey"},{"name":"min_sidereal"},{"name":"pica_printer"},{"name":"yd_US_survey"},{"name":"dry pt (US)"},{"name":"dry qt (US)"},{"name":"gi_imperial"},{"name":"hp_electric"},{"name":"inHg_32degF"},{"name":"inHg_60degF"},{"name":"liq qt (US)"},{"name":"pt_computer"},{"name":"statcoulomb"},{"name":"\"Hg_32degF"},{"name":"\"Hg_60degF"},{"name":"Btu_39degF"},{"name":"Btu_59degF"},{"name":"Btu_60degF"},{"name":"cmHg_0degC"},{"name":"d_sidereal"},{"name":"dwt (troy)"},{"name":"fl oz (UK)"},{"name":"fl oz (US)"},{"name":"h-bar_eV_s"},{"name":"h_sidereal"},{"name":"m_e_atomic"},{"name":"pt_printer"},{"name":"rh_percent"},{"name":"s_sidereal"},{"name":"tbsp_label"},{"name":"cup_label"},{"name":"dprime_Hg"},{"name":"dprime_in"},{"name":"dr (avdp)"},{"name":"hp_boiler"},{"name":"hp_metric"},{"name":"prime_min"},{"name":"scr (ap.)"},{"name":"ton_short"},{"name":"tsp_label"},{"name":"Btu_mean"},{"name":"E_erlang"},{"name":"bbl (US)"},{"name":"cwt (UK)"},{"name":"cwt (US)"},{"name":"dprime_s"},{"name":"gal (UK)"},{"name":"gal (US)"},{"name":"hp_water"},{"name":"mil_nato"},{"name":"prime_Hg"},{"name":"prime_ft"},{"name":"statwatt"},{"name":"thm (EC)"},{"name":"thm (US)"},{"name":"ton_long"},{"name":"Lambert"},{"name":"bu (US)"},{"name":"lb_troy"},{"name":"oz_troy"},{"name":"pt (UK)"},{"name":"qt (UK)"},{"name":"statmho"},{"name":"statohm"},{"name":"ton_TNT"},{"name":"Btu_th"},{"name":"a_year"},{"name":"byte_B"},{"name":"cal_IT"},{"name":"cal_th"},{"name":"cmH_2O"},{"name":"dprime"},{"name":"ftH_2O"},{"name":"inH_2O"},{"name":"kayser"},{"name":"micron"},{"name":"mmH_2O"},{"name":"statWb"},{"name":"'_min"},{"name":"Aring"},{"name":"Darcy"},{"name":"abohm"},{"name":"barye"},{"name":"bel_B"},{"name":"dB_mW"},{"name":"darcy"},{"name":"fermi"},{"name":"fl dr"},{"name":"gamma"},{"name":"h-bar"},{"name":"hp_UK"},{"name":"lbmol"},{"name":"minim"},{"name":"prime"},{"name":"shake"},{"name":"statA"},{"name":"statF"},{"name":"statH"},{"name":"statT"},{"name":"statV"},{"name":"\"_in"},{"name":"'_ft"},{"name":"Hart"},{"name":"Torr"},{"name":"barn"},{"name":"cmHg"},{"name":"cmil"},{"name":"degC"},{"name":"degF"},{"name":"degK"},{"name":"degR"},{"name":"fath"},{"name":"ft.L"},{"name":"ft.c"},{"name":"ftHg"},{"name":"inHg"},{"name":"l.h."},{"name":"l.m."},{"name":"l.s."},{"name":"l.w."},{"name":"l.y."},{"name":"mmHg"},{"name":"slug"},{"name":"tbsp"},{"name":"thou"},{"name":"\"Hg"},{"name":"\"_s"},{"name":"'Hg"},{"name":"Btu"},{"name":"E_h"},{"name":"Gal"},{"name":"Ohm"},{"name":"a_0"},{"name":"abA"},{"name":"abC"},{"name":"abF"},{"name":"abH"},{"name":"abS"},{"name":"abV"},{"name":"atm"},{"name":"bar"},{"name":"bit"},{"name":"c_0"},{"name":"cal"},{"name":"cup"},{"name":"dBm"},{"name":"dec"},{"name":"deg"},{"name":"den"},{"name":"dyn"},{"name":"erg"},{"name":"fur"},{"name":"gon"},{"name":"gpm"},{"name":"kat"},{"name":"kip"},{"name":"lbf"},{"name":"lnk"},{"name":"m_e"},{"name":"mil"},{"name":"min"},{"name":"mol"},{"name":"mpg"},{"name":"oct"},{"name":"pdl"},{"name":"ppm"},{"name":"psi"},{"name":"rad"},{"name":"rem"},{"name":"rhe"},{"name":"tex"},{"name":"tsp"},{"name":"var"},{"name":"Bd"},{"name":"Bi"},{"name":"Bq"},{"name":"Ci"},{"name":"Da"},{"name":"Gi"},{"name":"Gs"},{"name":"Gy"},{"name":"Hz"},{"name":"Mx"},{"name":"Np"},{"name":"Oe"},{"name":"Pa"},{"name":"Sh"},{"name":"St"},{"name":"Sv"},{"name":"Wb"},{"name":"ac"},{"name":"as"},{"name":"at"},{"name":"cd"},{"name":"ch"},{"name":"ct"},{"name":"dr"},{"name":"eV"},{"name":"ft"},{"name":"gf"},{"name":"gi"},{"name":"gr"},{"name":"ha"},{"name":"hp"},{"name":"in"},{"name":"kn"},{"name":"kp"},{"name":"lb"},{"name":"lm"},{"name":"lx"},{"name":"mi"},{"name":"oz"},{"name":"pH"},{"name":"pc"},{"name":"ph"},{"name":"pk"},{"name":"rd"},{"name":"rh"},{"name":"sb"},{"name":"sr"},{"name":"st"},{"name":"ua"},{"name":"yd"},{"name":"\""},{"name":"'"},{"name":"A"},{"name":"C"},{"name":"D"},{"name":"F"},{"name":"G"},{"name":"H"},{"name":"J"},{"name":"K"},{"name":"L"},{"name":"M"},{"name":"N"},{"name":"P"},{"name":"R"},{"name":"S"},{"name":"T"},{"name":"V"},{"name":"W"},{"name":"a"},{"name":"c"},{"name":"d"},{"name":"e"},{"name":"g"},{"name":"h"},{"name":"l"},{"name":"m"},{"name":"s"},{"name":"t"},{"name":"u"}]},"dimensions":{"file":"dimensions.yaml","rows":[{"name":"dim_Theta"},{"name":"dim_phi"},{"name":"dim_I"},{"name":"dim_J"},{"name":"dim_L"},{"name":"dim_M"},{"name":"dim_N"},{"name":"dim_T"}]},"prefixes_double":{"file":"prefixes_double.yaml","rows":[{"name":"Ei"},{"name":"Gi"},{"name":"Ki"},{"name":"Mi"},{"name":"Pi"},{"name":"Ti"},{"name":"Yi"},{"name":"Zi"},{"name":"da"}]},"prefixes_single":{"file":"prefixes_single.yaml","rows":[{"name":"1"},{"name":"E"},{"name":"G"},{"name":"M"},{"name":"P"},{"name":"Q"},{"name":"R"},{"name":"T"},{"name":"Y"},{"name":"Z"},{"name":"a"},{"name":"c"},{"name":"d"},{"name":"f"},{"name":"h"},{"name":"k"},{"name":"m"},{"name":"n"},{"name":"p"},{"name":"q"},{"name":"r"},{"name":"u"},{"name":"y"},{"name":"z"}]},"prefixed_units":{"file":"prefixed_units.yaml","rows":[{"name":"kcal_IT"},{"name":"kcal_th"},{"name":"mbar"},{"name":"cSt"},{"name":"kgf"},{"name":"uin"},{"name":"cP"},{"name":"dB"},{"name":"kg"},{"name":"mL"},{"name":"ml"}]}},"lint":{"order_warnings":["rule forward_slashes: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule end_guard: branches 1 and 2 are order-dependent (first set not statically known)","rule slashed_number_named_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 2 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 2 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 3 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 4 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 5 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 6 and 7 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 6 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 6 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 7 and 8 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 7 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units: branches 8 and 9 are order-dependent (shared first bytes; ordered choice is decisive)","rule wrapper_prefixes_units_value: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule named_int_exp_prefixes_units: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule implicit_extended: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule implicit_extended: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule prefixes_units_int_exp: branches 4 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_named_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 1 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 2 and 6 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 3 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule dimension_rules_int_exp: branches 4 and 5 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 2 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 1 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 2 and 3 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 2 and 4 are order-dependent (shared first bytes; ordered choice is decisive)","rule expression: branches 3 and 4 are order-dependent (shared first bytes; ordered choice is decisive)"]},"default_entry":"expression","render":{},"derive":{},"tests":[{"entry":"expression","kind":"accept","input":"mm*s^-2","expect":{}},{"entry":"expression","kind":"accept","input":"sqrt(Hz)","expect":{}},{"entry":"expression","kind":"accept","input":"K/(kg*m)","expect":{}},{"entry":"expression","kind":"accept","input":"p-","expect":{}},{"entry":"expression","kind":"accept","input":"(m)(s)","expect":{}},{"entry":"expression","kind":"accept","input":"dB","expect":{}},{"entry":"expression","kind":"accept","input":"dB^2","expect":{}},{"entry":"expression","kind":"accept","input":"mbar*s^-2","expect":{}},{"entry":"expression","kind":"accept","input":"kgf","expect":{}},{"entry":"expression","kind":"accept","input":"sqrt(sqrt(m))","expect":{}},{"entry":"expression","kind":"reject","input":"que?","expect":{}},{"entry":"expression","kind":"reject","input":"m2","expect":{}},{"entry":"expression","kind":"reject","input":"dim_Ldim_M","expect":{}},{"entry":"expression","kind":"reject","input":"mm*","expect":{}},{"entry":"expression","kind":"reject","input":"m*s/","expect":{}},{"entry":"expression","kind":"reject","input":"sqrt(m)^2","expect":{}}],"docs":{},"source":"# UnitsML AsciiUnits expression grammar.\n#\n# 1:1 transcription of unitsml-ruby lib/unitsml/parse.rb +\n# lib/unitsml/intermediate_exp_rules.rb (Parslet), rule for rule, in the\n# same alternative order — PEG ordered choice makes order decisive, and the\n# quirks (trailing-extender acceptance, guard fall-through to prefixed\n# units, no power after fenced/sqrt forms) are load-bearing.\n#\n# Terminal tables are generated from UnitsDB via scripts/gen_tables.rb and\n# embedded in the artifact at compile time.\n#\n# Capture names (unit, prefix, dimension, integer, power_numerator, extender,\n# sqrt, int_exp, sequence, first_set, second_set, open_paren, close_paren)\n# mirror the Parslet .as() names so consumers can map them 1:1.\n\ngrammar UnitsmlAscii version \"0.1.0\" {\n\n ws = %x09 / %x0A / %x0B / %x0C / %x0D / %x20\n spaces = 1*ws\n lparen = \"(\"\n rparen = \")\"\n hyphen = \"-\"\n star = \"*\"\n digit = %x30-39\n forward_slashes = \"//\" / \"/\"\n extender = (forward_slashes / star) as extender\n number = [\"-\"] 1*digit\n slashed_number = (number [forward_slashes number]) as integer\n end_guard = !ANY / &(extender / lparen / rparen / spaces)\n\n unit = alt from_table \"units\" column \"name\" as unit\n prefixed_units = alt from_table \"prefixed_units\" column \"name\" as unit\n single_letter_prefixes = alt from_table \"prefixes_single\" column \"name\" as prefix\n double_letter_prefixes = alt from_table \"prefixes_double\" column \"name\" as prefix\n dimensions = alt from_table \"dimensions\" column \"name\" as dimension\n\n power = \"^\" slashed_number_int_exp as power_numerator\n slashed_number_int_exp = slashed_number / (lparen slashed_number_named_int_exp as int_exp rparen)\n slashed_number_named_int_exp = (lparen as open_paren slashed_number_int_exp rparen as close_paren) / slashed_number_int_exp\n unit_and_power = unit [power]\n sqrt_sequence = \"sqrt\" lparen prefixes_units_int_exp as sqrt rparen\n sqrt_dimensions = \"sqrt\" lparen dimension_rules_int_exp as sqrt rparen\n extended_prefixed_units = extender [spaces] prefixes_units_int_exp as sequence\n powered_dimensions = dimensions [power]\n\n prefixes_units = (sqrt_sequence [extended_prefixed_units]) / (\"1\" as unit [extended_prefixed_units]) / (unit_and_power extended_prefixed_units) / (unit_and_power end_guard) / (double_letter_prefixes unit_and_power extended_prefixed_units) / (double_letter_prefixes unit_and_power) / (single_letter_prefixes unit_and_power extended_prefixed_units) / (single_letter_prefixes unit_and_power) / (prefixed_units [power] end_guard)\n\n wrapper_prefixes_units_value = int_exp_prefixes_units / prefixes_units_int_exp\n int_exp_prefixes_units = lparen [spaces] named_int_exp_prefixes_units as int_exp [spaces] rparen\n prefixes_units_named_int_exp = (lparen as open_paren [spaces] wrapper_prefixes_units_value as int_exp [spaces] rparen as close_paren)\n named_int_exp_prefixes_units = (prefixes_units_named_int_exp as int_exp [(prefixes_units_int_exp / extended_prefixed_units)]) / prefixes_units_int_exp\n\n implicit_extended = (prefixes_units as first_set spaces as extender prefixes_units as second_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (prefixes_units as first_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] prefixes_units as second_set)\n\n prefixes_units_int_exp = (implicit_extended as implicit_extended [spaces] [prefixes_units_int_exp as sequence]) / (implicit_extended as implicit_extended [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (int_exp_prefixes_units [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (prefixes_units [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (int_exp_prefixes_units [prefixes_units_int_exp as sequence]) / (prefixes_units [prefixes_units_int_exp as sequence])\n\n dimension_rules = (sqrt_dimensions / powered_dimensions) [extended_dimension_rules]\n extended_dimension_rules = [spaces] extender [spaces] dimension_rules_int_exp as sequence\n int_exp_dimension_rules = lparen dimension_rules_named_exp as int_exp rparen [extended_dimension_rules]\n dimension_rules_named_exp = ((lparen as open_paren dimension_rules_int_exp as int_exp rparen as close_paren) as int_exp [spaces] (dimension_rules_int_exp / extended_dimension_rules) as sequence) / dimension_rules_int_exp\n\n dimension_rules_int_exp = (dimension_rules as first_set spaces as extender dimension_rules as second_set [dimension_rules_int_exp]) / (dimension_rules as first_set [spaces] int_exp_dimension_rules as second_int_exp_set [dimension_rules_int_exp]) / (int_exp_dimension_rules as first_int_exp_set [spaces] dimension_rules as second_set [dimension_rules_int_exp]) / (int_exp_dimension_rules as first_int_exp_set [spaces] int_exp_dimension_rules as second_int_exp_set [dimension_rules_int_exp]) / int_exp_dimension_rules / dimension_rules\n\n expression = prefixes_units_int_exp / dimension_rules_int_exp / (single_letter_prefixes hyphen) / (double_letter_prefixes hyphen)\n\n entry expression: expression\n\n test expression {\n accept \"mm*s^-2\"\n accept \"sqrt(Hz)\"\n accept \"K/(kg*m)\"\n accept \"p-\"\n accept \"(m)(s)\"\n accept \"dB\"\n accept \"dB^2\"\n accept \"mbar*s^-2\"\n accept \"kgf\"\n accept \"sqrt(sqrt(m))\"\n reject \"que?\"\n reject \"m2\"\n reject \"dim_Ldim_M\"\n reject \"mm*\"\n reject \"m*s/\"\n reject \"sqrt(m)^2\"\n }\n}\n","source_hash":"e9d24c02137568f4bd665c3e8769b583402b1da2e8dbd10941e801fea4f6b210","compiler_version":"1.3.108","checksum":"sha256:da65d7cb155970ca2b2492dfc464ad5407d4a3b1c951c3c60a7d2177dcaa06d9"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "grammar": "unitsml",
3
- "artifact_checksum": "sha256:b1497bdaff9a9bdf5bd92e7a0354200a8dfa54f91c9cdf3c254537e95ed883cf",
3
+ "artifact_checksum": "sha256:da65d7cb155970ca2b2492dfc464ad5407d4a3b1c951c3c60a7d2177dcaa06d9",
4
4
  "cases": [
5
5
  {
6
6
  "input": "m",
@@ -1501,30 +1501,7 @@
1501
1501
  },
1502
1502
  {
1503
1503
  "input": "mm*",
1504
- "kind": "accept",
1505
- "parsanol_tree": {
1506
- "prefix": {
1507
- "value": "m",
1508
- "offset": 0,
1509
- "length": 1,
1510
- "line": 1,
1511
- "column": 1
1512
- },
1513
- "unit": {
1514
- "value": "m",
1515
- "offset": 1,
1516
- "length": 1,
1517
- "line": 1,
1518
- "column": 2
1519
- },
1520
- "extender": {
1521
- "value": "*",
1522
- "offset": 2,
1523
- "length": 1,
1524
- "line": 1,
1525
- "column": 3
1526
- }
1527
- }
1504
+ "kind": "reject"
1528
1505
  },
1529
1506
  {
1530
1507
  "input": "k-",
@@ -2168,39 +2145,7 @@
2168
2145
  },
2169
2146
  {
2170
2147
  "input": "m*s/",
2171
- "kind": "accept",
2172
- "parsanol_tree": {
2173
- "unit": {
2174
- "value": "m",
2175
- "offset": 0,
2176
- "length": 1,
2177
- "line": 1,
2178
- "column": 1
2179
- },
2180
- "extender": {
2181
- "value": "*",
2182
- "offset": 1,
2183
- "length": 1,
2184
- "line": 1,
2185
- "column": 2
2186
- },
2187
- "sequence": {
2188
- "unit": {
2189
- "value": "s",
2190
- "offset": 2,
2191
- "length": 1,
2192
- "line": 1,
2193
- "column": 3
2194
- },
2195
- "extender": {
2196
- "value": "/",
2197
- "offset": 3,
2198
- "length": 1,
2199
- "line": 1,
2200
- "column": 4
2201
- }
2202
- }
2203
- }
2148
+ "kind": "reject"
2204
2149
  },
2205
2150
  {
2206
2151
  "input": "sqrt(sqrt(m))",
@@ -2666,6 +2611,476 @@
2666
2611
  {
2667
2612
  "input": "Sqrt(m)",
2668
2613
  "kind": "reject"
2614
+ },
2615
+ {
2616
+ "input": "dB",
2617
+ "kind": "accept",
2618
+ "parsanol_tree": {
2619
+ "unit": {
2620
+ "value": "dB",
2621
+ "offset": 0,
2622
+ "length": 2,
2623
+ "line": 1,
2624
+ "column": 1
2625
+ }
2626
+ }
2627
+ },
2628
+ {
2629
+ "input": "dB^2",
2630
+ "kind": "accept",
2631
+ "parsanol_tree": {
2632
+ "unit": {
2633
+ "value": "dB",
2634
+ "offset": 0,
2635
+ "length": 2,
2636
+ "line": 1,
2637
+ "column": 1
2638
+ },
2639
+ "power_numerator": {
2640
+ "integer": {
2641
+ "value": "2",
2642
+ "offset": 3,
2643
+ "length": 1,
2644
+ "line": 1,
2645
+ "column": 4
2646
+ }
2647
+ }
2648
+ }
2649
+ },
2650
+ {
2651
+ "input": "dB*m",
2652
+ "kind": "accept",
2653
+ "parsanol_tree": {
2654
+ "unit": {
2655
+ "value": "dB",
2656
+ "offset": 0,
2657
+ "length": 2,
2658
+ "line": 1,
2659
+ "column": 1
2660
+ },
2661
+ "extender": {
2662
+ "value": "*",
2663
+ "offset": 2,
2664
+ "length": 1,
2665
+ "line": 1,
2666
+ "column": 3
2667
+ },
2668
+ "sequence": {
2669
+ "unit": {
2670
+ "value": "m",
2671
+ "offset": 3,
2672
+ "length": 1,
2673
+ "line": 1,
2674
+ "column": 4
2675
+ }
2676
+ }
2677
+ }
2678
+ },
2679
+ {
2680
+ "input": "mbar*s^-2",
2681
+ "kind": "accept",
2682
+ "parsanol_tree": {
2683
+ "prefix": {
2684
+ "value": "m",
2685
+ "offset": 0,
2686
+ "length": 1,
2687
+ "line": 1,
2688
+ "column": 1
2689
+ },
2690
+ "unit": {
2691
+ "value": "bar",
2692
+ "offset": 1,
2693
+ "length": 3,
2694
+ "line": 1,
2695
+ "column": 2
2696
+ },
2697
+ "extender": {
2698
+ "value": "*",
2699
+ "offset": 4,
2700
+ "length": 1,
2701
+ "line": 1,
2702
+ "column": 5
2703
+ },
2704
+ "sequence": {
2705
+ "unit": {
2706
+ "value": "s",
2707
+ "offset": 5,
2708
+ "length": 1,
2709
+ "line": 1,
2710
+ "column": 6
2711
+ },
2712
+ "power_numerator": {
2713
+ "integer": {
2714
+ "value": "-2",
2715
+ "offset": 7,
2716
+ "length": 2,
2717
+ "line": 1,
2718
+ "column": 8
2719
+ }
2720
+ }
2721
+ }
2722
+ }
2723
+ },
2724
+ {
2725
+ "input": "kgf",
2726
+ "kind": "accept",
2727
+ "parsanol_tree": {
2728
+ "prefix": {
2729
+ "value": "k",
2730
+ "offset": 0,
2731
+ "length": 1,
2732
+ "line": 1,
2733
+ "column": 1
2734
+ },
2735
+ "unit": {
2736
+ "value": "gf",
2737
+ "offset": 1,
2738
+ "length": 2,
2739
+ "line": 1,
2740
+ "column": 2
2741
+ }
2742
+ }
2743
+ },
2744
+ {
2745
+ "input": "kgf*m/s^2",
2746
+ "kind": "accept",
2747
+ "parsanol_tree": {
2748
+ "prefix": {
2749
+ "value": "k",
2750
+ "offset": 0,
2751
+ "length": 1,
2752
+ "line": 1,
2753
+ "column": 1
2754
+ },
2755
+ "unit": {
2756
+ "value": "gf",
2757
+ "offset": 1,
2758
+ "length": 2,
2759
+ "line": 1,
2760
+ "column": 2
2761
+ },
2762
+ "extender": {
2763
+ "value": "*",
2764
+ "offset": 3,
2765
+ "length": 1,
2766
+ "line": 1,
2767
+ "column": 4
2768
+ },
2769
+ "sequence": {
2770
+ "unit": {
2771
+ "value": "m",
2772
+ "offset": 4,
2773
+ "length": 1,
2774
+ "line": 1,
2775
+ "column": 5
2776
+ },
2777
+ "extender": {
2778
+ "value": "/",
2779
+ "offset": 5,
2780
+ "length": 1,
2781
+ "line": 1,
2782
+ "column": 6
2783
+ },
2784
+ "sequence": {
2785
+ "unit": {
2786
+ "value": "s",
2787
+ "offset": 6,
2788
+ "length": 1,
2789
+ "line": 1,
2790
+ "column": 7
2791
+ },
2792
+ "power_numerator": {
2793
+ "integer": {
2794
+ "value": "2",
2795
+ "offset": 8,
2796
+ "length": 1,
2797
+ "line": 1,
2798
+ "column": 9
2799
+ }
2800
+ }
2801
+ }
2802
+ }
2803
+ }
2804
+ },
2805
+ {
2806
+ "input": "mbar",
2807
+ "kind": "accept",
2808
+ "parsanol_tree": {
2809
+ "prefix": {
2810
+ "value": "m",
2811
+ "offset": 0,
2812
+ "length": 1,
2813
+ "line": 1,
2814
+ "column": 1
2815
+ },
2816
+ "unit": {
2817
+ "value": "bar",
2818
+ "offset": 1,
2819
+ "length": 3,
2820
+ "line": 1,
2821
+ "column": 2
2822
+ }
2823
+ }
2824
+ },
2825
+ {
2826
+ "input": "cSt",
2827
+ "kind": "accept",
2828
+ "parsanol_tree": {
2829
+ "prefix": {
2830
+ "value": "c",
2831
+ "offset": 0,
2832
+ "length": 1,
2833
+ "line": 1,
2834
+ "column": 1
2835
+ },
2836
+ "unit": {
2837
+ "value": "St",
2838
+ "offset": 1,
2839
+ "length": 2,
2840
+ "line": 1,
2841
+ "column": 2
2842
+ }
2843
+ }
2844
+ },
2845
+ {
2846
+ "input": "uin",
2847
+ "kind": "accept",
2848
+ "parsanol_tree": {
2849
+ "prefix": {
2850
+ "value": "u",
2851
+ "offset": 0,
2852
+ "length": 1,
2853
+ "line": 1,
2854
+ "column": 1
2855
+ },
2856
+ "unit": {
2857
+ "value": "in",
2858
+ "offset": 1,
2859
+ "length": 2,
2860
+ "line": 1,
2861
+ "column": 2
2862
+ }
2863
+ }
2864
+ },
2865
+ {
2866
+ "input": "mL",
2867
+ "kind": "accept",
2868
+ "parsanol_tree": {
2869
+ "prefix": {
2870
+ "value": "m",
2871
+ "offset": 0,
2872
+ "length": 1,
2873
+ "line": 1,
2874
+ "column": 1
2875
+ },
2876
+ "unit": {
2877
+ "value": "L",
2878
+ "offset": 1,
2879
+ "length": 1,
2880
+ "line": 1,
2881
+ "column": 2
2882
+ }
2883
+ }
2884
+ },
2885
+ {
2886
+ "input": "ml",
2887
+ "kind": "accept",
2888
+ "parsanol_tree": {
2889
+ "prefix": {
2890
+ "value": "m",
2891
+ "offset": 0,
2892
+ "length": 1,
2893
+ "line": 1,
2894
+ "column": 1
2895
+ },
2896
+ "unit": {
2897
+ "value": "l",
2898
+ "offset": 1,
2899
+ "length": 1,
2900
+ "line": 1,
2901
+ "column": 2
2902
+ }
2903
+ }
2904
+ },
2905
+ {
2906
+ "input": "kcal_th/cm^2",
2907
+ "kind": "accept",
2908
+ "parsanol_tree": {
2909
+ "prefix": {
2910
+ "value": "k",
2911
+ "offset": 0,
2912
+ "length": 1,
2913
+ "line": 1,
2914
+ "column": 1
2915
+ },
2916
+ "unit": {
2917
+ "value": "cal_th",
2918
+ "offset": 1,
2919
+ "length": 6,
2920
+ "line": 1,
2921
+ "column": 2
2922
+ },
2923
+ "extender": {
2924
+ "value": "/",
2925
+ "offset": 7,
2926
+ "length": 1,
2927
+ "line": 1,
2928
+ "column": 8
2929
+ },
2930
+ "sequence": {
2931
+ "prefix": {
2932
+ "value": "c",
2933
+ "offset": 8,
2934
+ "length": 1,
2935
+ "line": 1,
2936
+ "column": 9
2937
+ },
2938
+ "unit": {
2939
+ "value": "m",
2940
+ "offset": 9,
2941
+ "length": 1,
2942
+ "line": 1,
2943
+ "column": 10
2944
+ },
2945
+ "power_numerator": {
2946
+ "integer": {
2947
+ "value": "2",
2948
+ "offset": 11,
2949
+ "length": 1,
2950
+ "line": 1,
2951
+ "column": 12
2952
+ }
2953
+ }
2954
+ }
2955
+ }
2956
+ },
2957
+ {
2958
+ "input": "kcal_IT",
2959
+ "kind": "accept",
2960
+ "parsanol_tree": {
2961
+ "prefix": {
2962
+ "value": "k",
2963
+ "offset": 0,
2964
+ "length": 1,
2965
+ "line": 1,
2966
+ "column": 1
2967
+ },
2968
+ "unit": {
2969
+ "value": "cal_IT",
2970
+ "offset": 1,
2971
+ "length": 6,
2972
+ "line": 1,
2973
+ "column": 2
2974
+ }
2975
+ }
2976
+ },
2977
+ {
2978
+ "input": "cP*s^-1",
2979
+ "kind": "accept",
2980
+ "parsanol_tree": {
2981
+ "prefix": {
2982
+ "value": "c",
2983
+ "offset": 0,
2984
+ "length": 1,
2985
+ "line": 1,
2986
+ "column": 1
2987
+ },
2988
+ "unit": {
2989
+ "value": "P",
2990
+ "offset": 1,
2991
+ "length": 1,
2992
+ "line": 1,
2993
+ "column": 2
2994
+ },
2995
+ "extender": {
2996
+ "value": "*",
2997
+ "offset": 2,
2998
+ "length": 1,
2999
+ "line": 1,
3000
+ "column": 3
3001
+ },
3002
+ "sequence": {
3003
+ "unit": {
3004
+ "value": "s",
3005
+ "offset": 3,
3006
+ "length": 1,
3007
+ "line": 1,
3008
+ "column": 4
3009
+ },
3010
+ "power_numerator": {
3011
+ "integer": {
3012
+ "value": "-1",
3013
+ "offset": 5,
3014
+ "length": 2,
3015
+ "line": 1,
3016
+ "column": 6
3017
+ }
3018
+ }
3019
+ }
3020
+ }
3021
+ },
3022
+ {
3023
+ "input": "kg*m^(-2)",
3024
+ "kind": "accept",
3025
+ "parsanol_tree": {
3026
+ "prefix": {
3027
+ "value": "k",
3028
+ "offset": 0,
3029
+ "length": 1,
3030
+ "line": 1,
3031
+ "column": 1
3032
+ },
3033
+ "unit": {
3034
+ "value": "g",
3035
+ "offset": 1,
3036
+ "length": 1,
3037
+ "line": 1,
3038
+ "column": 2
3039
+ },
3040
+ "extender": {
3041
+ "value": "*",
3042
+ "offset": 2,
3043
+ "length": 1,
3044
+ "line": 1,
3045
+ "column": 3
3046
+ },
3047
+ "sequence": {
3048
+ "unit": {
3049
+ "value": "m",
3050
+ "offset": 3,
3051
+ "length": 1,
3052
+ "line": 1,
3053
+ "column": 4
3054
+ },
3055
+ "power_numerator": {
3056
+ "int_exp": {
3057
+ "integer": {
3058
+ "value": "-2",
3059
+ "offset": 6,
3060
+ "length": 2,
3061
+ "line": 1,
3062
+ "column": 7
3063
+ }
3064
+ }
3065
+ }
3066
+ }
3067
+ }
3068
+ },
3069
+ {
3070
+ "input": "dB-",
3071
+ "kind": "reject"
3072
+ },
3073
+ {
3074
+ "input": "dB/",
3075
+ "kind": "reject"
3076
+ },
3077
+ {
3078
+ "input": "db",
3079
+ "kind": "reject"
3080
+ },
3081
+ {
3082
+ "input": "Db",
3083
+ "kind": "reject"
2669
3084
  }
2670
3085
  ]
2671
3086
  }
@@ -200,7 +200,7 @@
200
200
  },
201
201
  {
202
202
  "input": "mm*",
203
- "kind": "accept"
203
+ "kind": "reject"
204
204
  },
205
205
  {
206
206
  "input": "k-",
@@ -280,7 +280,7 @@
280
280
  },
281
281
  {
282
282
  "input": "m*s/",
283
- "kind": "accept"
283
+ "kind": "reject"
284
284
  },
285
285
  {
286
286
  "input": "sqrt(sqrt(m))",
@@ -497,6 +497,82 @@
497
497
  {
498
498
  "input": "Sqrt(m)",
499
499
  "kind": "reject"
500
+ },
501
+ {
502
+ "input": "dB",
503
+ "kind": "accept"
504
+ },
505
+ {
506
+ "input": "dB^2",
507
+ "kind": "accept"
508
+ },
509
+ {
510
+ "input": "dB*m",
511
+ "kind": "accept"
512
+ },
513
+ {
514
+ "input": "mbar*s^-2",
515
+ "kind": "accept"
516
+ },
517
+ {
518
+ "input": "kgf",
519
+ "kind": "accept"
520
+ },
521
+ {
522
+ "input": "kgf*m/s^2",
523
+ "kind": "accept"
524
+ },
525
+ {
526
+ "input": "mbar",
527
+ "kind": "accept"
528
+ },
529
+ {
530
+ "input": "cSt",
531
+ "kind": "accept"
532
+ },
533
+ {
534
+ "input": "uin",
535
+ "kind": "accept"
536
+ },
537
+ {
538
+ "input": "mL",
539
+ "kind": "accept"
540
+ },
541
+ {
542
+ "input": "ml",
543
+ "kind": "accept"
544
+ },
545
+ {
546
+ "input": "kcal_th/cm^2",
547
+ "kind": "accept"
548
+ },
549
+ {
550
+ "input": "kcal_IT",
551
+ "kind": "accept"
552
+ },
553
+ {
554
+ "input": "cP*s^-1",
555
+ "kind": "accept"
556
+ },
557
+ {
558
+ "input": "kg*m^(-2)",
559
+ "kind": "accept"
560
+ },
561
+ {
562
+ "input": "dB-",
563
+ "kind": "reject"
564
+ },
565
+ {
566
+ "input": "dB/",
567
+ "kind": "reject"
568
+ },
569
+ {
570
+ "input": "db",
571
+ "kind": "reject"
572
+ },
573
+ {
574
+ "input": "Db",
575
+ "kind": "reject"
500
576
  }
501
577
  ]
502
578
  }
@@ -52,7 +52,7 @@ ACCEPT ((m))
52
52
  ACCEPT dim_L dim_M
53
53
  ACCEPT (dim_L)(dim_M)
54
54
  ACCEPT (dim_L)*dim_M
55
- ACCEPT mm*
55
+ REJECT mm*
56
56
  ACCEPT k-
57
57
  ACCEPT da-
58
58
  ACCEPT M-
@@ -72,7 +72,7 @@ ACCEPT sqrt(m*s^-1)
72
72
  ACCEPT cm^(3)
73
73
  ACCEPT cal_th/cm^2 h
74
74
  ACCEPT (a_year*s^-1)
75
- ACCEPT m*s/
75
+ REJECT m*s/
76
76
  ACCEPT sqrt(sqrt(m))
77
77
  ACCEPT ton-force (2000 lb)
78
78
  ACCEPT ton-force (2000 lb)*m
@@ -127,3 +127,22 @@ REJECT k
127
127
  REJECT TON
128
128
  REJECT SQRT(m)
129
129
  REJECT Sqrt(m)
130
+ ACCEPT dB
131
+ ACCEPT dB^2
132
+ ACCEPT dB*m
133
+ ACCEPT mbar*s^-2
134
+ ACCEPT kgf
135
+ ACCEPT kgf*m/s^2
136
+ ACCEPT mbar
137
+ ACCEPT cSt
138
+ ACCEPT uin
139
+ ACCEPT mL
140
+ ACCEPT ml
141
+ ACCEPT kcal_th/cm^2
142
+ ACCEPT kcal_IT
143
+ ACCEPT cP*s^-1
144
+ ACCEPT kg*m^(-2)
145
+ REJECT dB-
146
+ REJECT dB/
147
+ REJECT db
148
+ REJECT Db
@@ -29,20 +29,21 @@ grammar UnitsmlAscii version "0.1.0" {
29
29
  end_guard = !ANY / &(extender / lparen / rparen / spaces)
30
30
 
31
31
  unit = alt from_table "units" column "name" as unit
32
+ prefixed_units = alt from_table "prefixed_units" column "name" as unit
32
33
  single_letter_prefixes = alt from_table "prefixes_single" column "name" as prefix
33
34
  double_letter_prefixes = alt from_table "prefixes_double" column "name" as prefix
34
35
  dimensions = alt from_table "dimensions" column "name" as dimension
35
36
 
36
37
  power = "^" slashed_number_int_exp as power_numerator
37
38
  slashed_number_int_exp = slashed_number / (lparen slashed_number_named_int_exp as int_exp rparen)
38
- slashed_number_named_int_exp = (lparen slashed_number_int_exp rparen) / slashed_number_int_exp
39
+ slashed_number_named_int_exp = (lparen as open_paren slashed_number_int_exp rparen as close_paren) / slashed_number_int_exp
39
40
  unit_and_power = unit [power]
40
41
  sqrt_sequence = "sqrt" lparen prefixes_units_int_exp as sqrt rparen
41
42
  sqrt_dimensions = "sqrt" lparen dimension_rules_int_exp as sqrt rparen
42
43
  extended_prefixed_units = extender [spaces] prefixes_units_int_exp as sequence
43
44
  powered_dimensions = dimensions [power]
44
45
 
45
- prefixes_units = (sqrt_sequence [extended_prefixed_units]) / ("1" as unit [extended_prefixed_units]) / (unit_and_power extended_prefixed_units) / (unit_and_power end_guard) / (double_letter_prefixes unit_and_power extended_prefixed_units) / (double_letter_prefixes unit_and_power) / (single_letter_prefixes unit_and_power extended_prefixed_units) / (single_letter_prefixes unit_and_power)
46
+ prefixes_units = (sqrt_sequence [extended_prefixed_units]) / ("1" as unit [extended_prefixed_units]) / (unit_and_power extended_prefixed_units) / (unit_and_power end_guard) / (double_letter_prefixes unit_and_power extended_prefixed_units) / (double_letter_prefixes unit_and_power) / (single_letter_prefixes unit_and_power extended_prefixed_units) / (single_letter_prefixes unit_and_power) / (prefixed_units [power] end_guard)
46
47
 
47
48
  wrapper_prefixes_units_value = int_exp_prefixes_units / prefixes_units_int_exp
48
49
  int_exp_prefixes_units = lparen [spaces] named_int_exp_prefixes_units as int_exp [spaces] rparen
@@ -51,7 +52,7 @@ grammar UnitsmlAscii version "0.1.0" {
51
52
 
52
53
  implicit_extended = (prefixes_units as first_set spaces as extender prefixes_units as second_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (prefixes_units as first_set [spaces] int_exp_prefixes_units as second_int_exp_set) / (int_exp_prefixes_units as first_int_exp_set [spaces] prefixes_units as second_set)
53
54
 
54
- prefixes_units_int_exp = (implicit_extended as implicit_extended [spaces] [prefixes_units_int_exp as sequence]) / (implicit_extended as implicit_extended [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (int_exp_prefixes_units [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (prefixes_units [spaces] extender [spaces] [prefixes_units_int_exp as sequence]) / (int_exp_prefixes_units [prefixes_units_int_exp as sequence]) / (prefixes_units [prefixes_units_int_exp as sequence])
55
+ prefixes_units_int_exp = (implicit_extended as implicit_extended [spaces] [prefixes_units_int_exp as sequence]) / (implicit_extended as implicit_extended [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (int_exp_prefixes_units [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (prefixes_units [spaces] extender [spaces] prefixes_units_int_exp as sequence) / (int_exp_prefixes_units [prefixes_units_int_exp as sequence]) / (prefixes_units [prefixes_units_int_exp as sequence])
55
56
 
56
57
  dimension_rules = (sqrt_dimensions / powered_dimensions) [extended_dimension_rules]
57
58
  extended_dimension_rules = [spaces] extender [spaces] dimension_rules_int_exp as sequence
@@ -70,10 +71,16 @@ grammar UnitsmlAscii version "0.1.0" {
70
71
  accept "K/(kg*m)"
71
72
  accept "p-"
72
73
  accept "(m)(s)"
73
- accept "mm*"
74
+ accept "dB"
75
+ accept "dB^2"
76
+ accept "mbar*s^-2"
77
+ accept "kgf"
74
78
  accept "sqrt(sqrt(m))"
75
79
  reject "que?"
76
80
  reject "m2"
77
81
  reject "dim_Ldim_M"
82
+ reject "mm*"
83
+ reject "m*s/"
84
+ reject "sqrt(m)^2"
78
85
  }
79
86
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Asciiunits
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
@@ -16,9 +16,15 @@ suite smoke for entry expression {
16
16
  accept "sqrt(sqrt(m))"
17
17
  accept "ton-force (2000 lb)"
18
18
  accept "dim_Theta*dim_L^2"
19
+ accept "dB"
20
+ accept "dB^2"
21
+ accept "mbar*s^-2"
22
+ accept "kgf"
19
23
  reject "que?"
20
24
  reject "m2"
21
25
  reject "dim_Ldim_M"
22
26
  reject "(cm)^3"
23
27
  reject "sqrt(m)^2"
28
+ reject "mm*"
29
+ reject "m*s/"
24
30
  }
@@ -0,0 +1,12 @@
1
+ ---
2
+ - name: kcal_IT
3
+ - name: kcal_th
4
+ - name: mbar
5
+ - name: cSt
6
+ - name: kgf
7
+ - name: uin
8
+ - name: cP
9
+ - name: dB
10
+ - name: kg
11
+ - name: mL
12
+ - name: ml
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciiunits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
@@ -45,6 +45,7 @@ files:
45
45
  - lib/asciiunits/version.rb
46
46
  - suites/unitsml.pgtest
47
47
  - tables/dimensions.yaml
48
+ - tables/prefixed_units.yaml
48
49
  - tables/prefixes_double.yaml
49
50
  - tables/prefixes_single.yaml
50
51
  - tables/units.yaml