UNPKG

@yinyinfurong_zmr/dbc-can

Version:

A general purpose CAN (Controller Area Network) toolbox with support for .dbc file parsing, CAN message decoding, and more

1 lines 63.8 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).candied={})}(this,(function(t){"use strict";function e(t){const e=t.matchAll(/(?<value>[0-9-]+) "(?<description>(?:[^"\\]|\\.)*)"/gi),a=new Map;for(const t of e)t.groups&&a.set(parseInt(t.groups.value,10),t.groups.description);return a}function a(t){return t.replace(";","").replace(/"/gi,"").trim()}function n(t,e){let a=0;switch(t){case"FLOAT":const t=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);t&&t.groups&&(a=parseFloat(t.groups.min));break;case"STRING":case"ENUM":break;case"HEX":const n=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);n&&n.groups&&(a=parseFloat(n.groups.min));break;case"INT":const i=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);i&&i.groups&&(a=parseFloat(i.groups.min))}return a}function i(t,e){let a=0;switch(t){case"FLOAT":const t=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);t&&t.groups&&(a=parseFloat(t.groups.max));break;case"STRING":case"ENUM":break;case"HEX":const n=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);n&&n.groups&&(a=parseFloat(n.groups.max));break;case"INT":const i=e.match(/\s*(?<min>[0-9.]+)\s(?<max>[0-9.]+)\s*;/);i&&i.groups&&(a=parseFloat(i.groups.max))}return a}function r(t,e){if("ENUM"!==t)return[];return e.replace(";","").split(",").map((t=>t.replace(/"/gi,"").trim()))}var s;!function(t){t.Choice_1="Choice_1",t.Choice_2="Choice_2",t.Choice_3="Choice_3",t.Choice_4="Choice_4",t.Choice_5="Choice_5",t.Choice_6="Choice_6",t.Choice_7="Choice_7",t.Choice_8="Choice_8",t.Choice_9="Choice_9",t.Choice_10="Choice_10",t.Choice_11="Choice_11",t.Choice_12="Choice_12",t.Choice_13="Choice_13",t.Choice_14="Choice_14",t.Choice_15="Choice_15",t.Choice_16="Choice_16",t.Choice_17="Choice_17",t.Choice_18="Choice_18",t.Choice_19="Choice_19",t.Choice_20="Choice_20",t.Choice_21="Choice_21",t.Choice_22="Choice_22",t.Choice_23="Choice_23",t.Choice_24="Choice_24",t.Choice_25="Choice_25",t.Choice_26="Choice_26",t.Choice_27="Choice_27",t.Choice_28="Choice_28",t.Choice_29="Choice_29",t.BlankLine="BlankLine",t.CanSignalGroup="CanSignalGroup",t.CanSignalGroup_$0="CanSignalGroup_$0",t.CanSignalGroup_$1="CanSignalGroup_$1",t.CanSignalGroup_$2="CanSignalGroup_$2",t.CanSignalGroup_$3="CanSignalGroup_$3",t.MessageTransmitter="MessageTransmitter",t.MessageTransmitter_$0="MessageTransmitter_$0",t.MessageTransmitter_$1="MessageTransmitter_$1",t.CanEnvironmentVariable="CanEnvironmentVariable",t.CanEnvironmentVariable_$0="CanEnvironmentVariable_$0",t.CanEnvironmentVariable_$1="CanEnvironmentVariable_$1",t.CanEnvironmentVariable_$2="CanEnvironmentVariable_$2",t.CanEnvironmentVariable_$3="CanEnvironmentVariable_$3",t.CanEnvironmentVariable_$4="CanEnvironmentVariable_$4",t.CanEnvironmentVariable_$5="CanEnvironmentVariable_$5",t.CanEnvironmentVariable_$6="CanEnvironmentVariable_$6",t.CanEnvironmentVariable_$7="CanEnvironmentVariable_$7",t.CanEnvironmentVariable_$8="CanEnvironmentVariable_$8",t.EnvironmentVarData="EnvironmentVarData",t.EnvironmentVarData_$0="EnvironmentVarData_$0",t.EnvironmentVarData_$1="EnvironmentVarData_$1",t.EnvironmentVariableComment="EnvironmentVariableComment",t.EnvironmentVariableComment_$0="EnvironmentVariableComment_$0",t.EnvironmentVariableComment_$1="EnvironmentVariableComment_$1",t.Version="Version",t.Version_$0="Version_$0",t.NewSymbol="NewSymbol",t.BusSpeed="BusSpeed",t.NewSymbolValue="NewSymbolValue",t.NewSymbolValue_$0="NewSymbolValue_$0",t.CanNode="CanNode",t.CanNode_$0="CanNode_$0",t.CanMessage="CanMessage",t.CanMessage_$0="CanMessage_$0",t.CanMessage_$1="CanMessage_$1",t.CanMessage_$2="CanMessage_$2",t.CanMessage_$3="CanMessage_$3",t.CanSignal="CanSignal",t.CanSignal_$0="CanSignal_$0",t.CanSignal_$1="CanSignal_$1",t.CanSignal_$2="CanSignal_$2",t.CanSignal_$3="CanSignal_$3",t.CanSignal_$4="CanSignal_$4",t.CanSignal_$5="CanSignal_$5",t.CanSignal_$6="CanSignal_$6",t.CanSignal_$7="CanSignal_$7",t.CanSignal_$8="CanSignal_$8",t.CanSignal_$9="CanSignal_$9",t.CanSignal_$10="CanSignal_$10",t.CanSignal_$11="CanSignal_$11",t.SignalMultiplexVal="SignalMultiplexVal",t.SignalMultiplexVal_$0="SignalMultiplexVal_$0",t.SignalMultiplexVal_$1="SignalMultiplexVal_$1",t.SignalMultiplexVal_$2="SignalMultiplexVal_$2",t.SignalMultiplexVal_$3="SignalMultiplexVal_$3",t.ValTable="ValTable",t.ValTable_$0="ValTable_$0",t.ValTable_$1="ValTable_$1",t.Val="Val",t.Val_$0="Val_$0",t.Val_$1="Val_$1",t.Val_$2="Val_$2",t.EnvironmentVal="EnvironmentVal",t.EnvironmentVal_$0="EnvironmentVal_$0",t.EnvironmentVal_$1="EnvironmentVal_$1",t.Comment="Comment",t.Comment_$0="Comment_$0",t.SignalComment="SignalComment",t.SignalComment_$0="SignalComment_$0",t.SignalComment_$1="SignalComment_$1",t.SignalComment_$2="SignalComment_$2",t.MessageComment="MessageComment",t.MessageComment_$0="MessageComment_$0",t.MessageComment_$1="MessageComment_$1",t.NodeComment="NodeComment",t.NodeComment_$0="NodeComment_$0",t.NodeComment_$1="NodeComment_$1",t.GlobalAttribute="GlobalAttribute",t.GlobalAttribute_$0="GlobalAttribute_$0",t.GlobalAttribute_$1="GlobalAttribute_$1",t.GlobalAttribute_$2="GlobalAttribute_$2",t.MessageAttribute="MessageAttribute",t.MessageAttribute_$0="MessageAttribute_$0",t.MessageAttribute_$1="MessageAttribute_$1",t.MessageAttribute_$2="MessageAttribute_$2",t.EnvironmentAttribute="EnvironmentAttribute",t.EnvironmentAttribute_$0="EnvironmentAttribute_$0",t.EnvironmentAttribute_$1="EnvironmentAttribute_$1",t.EnvironmentAttribute_$2="EnvironmentAttribute_$2",t.NodeAttribute="NodeAttribute",t.NodeAttribute_$0="NodeAttribute_$0",t.NodeAttribute_$1="NodeAttribute_$1",t.NodeAttribute_$2="NodeAttribute_$2",t.SignalAttribute="SignalAttribute",t.SignalAttribute_$0="SignalAttribute_$0",t.SignalAttribute_$1="SignalAttribute_$1",t.SignalAttribute_$2="SignalAttribute_$2",t.AttributeDefault="AttributeDefault",t.AttributeDefault_$0="AttributeDefault_$0",t.AttributeDefault_$1="AttributeDefault_$1",t.AttributeValue="AttributeValue",t.AttributeValue_$0="AttributeValue_$0",t.AttributeValue_$1="AttributeValue_$1",t.SigValType="SigValType",t.SigValType_$0="SigValType_$0",t.SigValType_$1="SigValType_$1",t.SigValType_$2="SigValType_$2",t.$EOF="$EOF"}(s||(s={}));class l{constructor(t,e,a,n){this.kind=s.CanSignalGroup,this.raw_id=t,this.name=e,this.raw_group_number=a,this.raw_signal_string=n,this.signals=n.replace(";","").split(" "),this.id=parseInt(t,10),this.group_number=parseInt(a,10)}}class c{constructor(t,e){this.kind=s.MessageTransmitter,this.raw_id=t,this.raw_nodes=e,this.id=parseInt(t,10),this.nodes=e.replace(";","").split(",")}}class h{constructor(t,e,n,i,r,l,c,h,o){this.kind=s.CanEnvironmentVariable,this.name=t,this.type=e,this.raw_min=n,this.raw_max=i,this.raw_unit=r,this.raw_inital_value=l,this.raw_ev_id=c,this.access_type=h,this.node=o,this.min=parseFloat(n),this.max=parseFloat(i),this.unit=a(r),this.initial_value=parseFloat(l),this.ev_id=parseInt(c,10)}}class o{constructor(t,e){this.kind=s.EnvironmentVarData,this.name=t,this.raw_value=e,this.value=parseInt(e)}}class u{constructor(t,e){this.kind=s.EnvironmentVariableComment,this.name=t,this.raw_comment=e,this.comment=a(e)}}class m{constructor(t){this.kind=s.Version,this.raw_version=t,this.version=a(t)}}class g{constructor(t){this.kind=s.CanNode,this.raw_node_string=t,this.node_names=t.split(" ")}}class d{constructor(t,e,a,n){this.kind=s.CanMessage,this.raw_id=t,this.name=e,this.raw_dlc=a,this.node=n,this.id=parseInt(t,10),this.dlc=parseInt(a,10)}}class p{constructor(t,e,n,i,r,l,c,h,o,u,m,g){this.kind=s.CanSignal,this.name=t,this.multiplex=e,this.raw_start_bit=n,this.raw_length=i,this.raw_endian=r,this.raw_signed=l,this.raw_factor=c,this.raw_offset=h,this.raw_min=o,this.raw_max=u,this.raw_unit=m,this.raw_node_str=g,this.multiplexer=e.includes("M"),this.unit=a(m),this.nodes=g.trim().split(","),this.start_bit=parseInt(n,10),this.length=parseInt(i,10),this.endian="1"===r?"Intel":"Motorola",this.signed="-"===l,this.factor=parseFloat(c),this.offset=parseFloat(h),this.min=parseFloat(o),this.max=parseFloat(u)}}class _{constructor(t,e,a,n){this.kind=s.SignalMultiplexVal,this.raw_id=t,this.name=e,this.switch_name=a,this.raw_value_ranges=n,this.id=parseInt(t,10),this.value_ranges=n.replace(";","").replace(/\s/g,"").split(",").map((t=>t.split("-")))}}class S{constructor(t,a){this.kind=s.ValTable,this.name=t,this.raw_table=a,this.enum=e(a.replace(";",""))}}class b{constructor(t,a,n){this.kind=s.Val,this.raw_id=t,this.name=a,this.raw_table=n,this.id=parseInt(t,10),this.enum=e(n.replace(";",""))}}class w{constructor(t,a){this.kind=s.EnvironmentVal,this.name=t,this.raw_table=a,this.enum=e(a.replace(";",""))}}class A{constructor(t){this.kind=s.Comment,this.raw_comment=t,this.comment=a(t)}}class ${constructor(t,e,n){this.kind=s.SignalComment,this.raw_id=t,this.name=e,this.raw_comment=n,this.comment=a(n),this.id=parseInt(t,10)}}class C{constructor(t,e){this.kind=s.MessageComment,this.raw_id=t,this.raw_comment=e,this.comment=a(e),this.id=parseInt(t,10)}}class x{constructor(t,e){this.kind=s.NodeComment,this.name=t,this.raw_comment=e,this.comment=a(e)}}class f{constructor(t,e,a){this.kind=s.GlobalAttribute,this.name=t,this.type=e,this.raw_value=a,this.min=n(e,a),this.max=i(e,a),this.enum=r(e,a)}}class V{constructor(t,e,a){this.kind=s.MessageAttribute,this.name=t,this.type=e,this.raw_value=a,this.min=n(e,a),this.max=i(e,a),this.enum=r(e,a)}}class v{constructor(t,e,a){this.kind=s.EnvironmentAttribute,this.name=t,this.type=e,this.raw_value=a,this.min=n(e,a),this.max=i(e,a),this.enum=r(e,a)}}class E{constructor(t,e,a){this.kind=s.NodeAttribute,this.name=t,this.type=e,this.raw_value=a,this.min=n(e,a),this.max=i(e,a),this.enum=r(e,a)}}class y{constructor(t,e,a){this.kind=s.SignalAttribute,this.name=t,this.type=e,this.raw_value=a,this.min=n(e,a),this.max=i(e,a),this.enum=r(e,a)}}class M{constructor(t,e){this.kind=s.AttributeDefault,this.name=t,this.raw_value=e,this.value=a(e)}}class T{constructor(t,e){this.kind=s.AttributeValue,this.name=t,this.raw=e,this.type=function(t){const e=t.match(/BO_|BU_|SG_|EV_/);if(!e)return"Global";switch(null==e?void 0:e.toString()){case"BO_":return"Message";case"BU_":return"Node";case"SG_":return"Signal";case"EV_":return"EnvironmentVariable";default:return"Global"}}(e),this.node=(()=>function(t,e){let a;switch(t){case"Message":case"Signal":return"";case"Node":if(a=e.match(/BU_\s(?<node>[a-zA-Z0-9_]+)\s(?<value>.*)\s*;/),a&&a.groups)return a.groups.node;case"Global":return"";case"EnvironmentVariable":if(a=e.match(/EV_\s(?<node>[a-zA-Z0-9_]+)\s(?<value>.*)\s*;/),a&&a.groups)return a.groups.node;default:return""}}(this.type,e))(),this.id=(()=>parseInt(function(t,e){let a;switch(t){case"Message":if(a=e.match(/BO_\s(?<id>[0-9]+)\s(?<value>.*);/),a&&a.groups)return a.groups.id;case"Signal":if(a=e.match(/SG_\s(?<id>[0-9]+)\s(?<signalName>[a-zA-Z0-9_]+)\s(?<value>.*);/),a&&a.groups)return a.groups.id;default:return""}}(this.type,e),10))(),this.signal=(()=>function(t,e){let a,n="";switch(t){case"Message":break;case"Signal":a=e.match(/SG_\s(?<id>[0-9]+)\s(?<signalName>[a-zA-Z0-9_]+)\s(?<value>.*);/),a&&a.groups&&(n=a.groups.signalName)}return n}(this.type,e))(),this.value=(()=>function(t,e){let n;switch(t){case"Message":if(n=e.match(/BO_\s(?<id>[0-9]+)\s(?<value>.*);/),n&&n.groups)return a(n.groups.value);case"Signal":if(n=e.match(/SG_\s(?<id>[0-9]+)\s(?<signalName>[a-zA-Z0-9_]+)\s(?<value>.*);/),n&&n.groups)return a(n.groups.value);case"Node":if(n=e.match(/BU_\s(?<node>[a-zA-Z0-9_]+)\s(?<value>.*)\s*;/),n&&n.groups)return a(n.groups.value);case"Global":if(n=e.match(/(?<value>.*)\s*;/),n&&n.groups)return a(n.groups.value);case"EnvironmentVariable":if(n=e.match(/EV_\s(?<node>[a-zA-Z0-9_]+)\s(?<value>.*)\s*;/),n&&n.groups)return a(n.groups.value);default:return""}}(this.type,e))()}}class N{constructor(t,e,a){this.kind=s.SigValType,this.raw_id=t,this.name=e,this.raw_type=a,this.id=parseInt(t,10),this.type=parseInt(a,10)}}class k{constructor(t){this.negating=!1,this.memoSafe=!0,this.pos={overallPos:0,line:1,offset:0},this.input=t}reset(t){this.pos=t}finished(){return this.pos.overallPos===this.input.length}clearMemos(){}matchChoice(t,e){return this.choice([()=>this.matchChoice_1(t+1,e),()=>this.matchChoice_2(t+1,e),()=>this.matchChoice_3(t+1,e),()=>this.matchChoice_4(t+1,e),()=>this.matchChoice_5(t+1,e),()=>this.matchChoice_6(t+1,e),()=>this.matchChoice_7(t+1,e),()=>this.matchChoice_8(t+1,e),()=>this.matchChoice_9(t+1,e),()=>this.matchChoice_10(t+1,e),()=>this.matchChoice_11(t+1,e),()=>this.matchChoice_12(t+1,e),()=>this.matchChoice_13(t+1,e),()=>this.matchChoice_14(t+1,e),()=>this.matchChoice_15(t+1,e),()=>this.matchChoice_16(t+1,e),()=>this.matchChoice_17(t+1,e),()=>this.matchChoice_18(t+1,e),()=>this.matchChoice_19(t+1,e),()=>this.matchChoice_20(t+1,e),()=>this.matchChoice_21(t+1,e),()=>this.matchChoice_22(t+1,e),()=>this.matchChoice_23(t+1,e),()=>this.matchChoice_24(t+1,e),()=>this.matchChoice_25(t+1,e),()=>this.matchChoice_26(t+1,e),()=>this.matchChoice_27(t+1,e),()=>this.matchChoice_28(t+1,e),()=>this.matchChoice_29(t+1,e)])}matchChoice_1(t,e){return this.matchCanNode(t+1,e)}matchChoice_2(t,e){return this.matchCanMessage(t+1,e)}matchChoice_3(t,e){return this.matchSignalMultiplexVal(t+1,e)}matchChoice_4(t,e){return this.matchCanSignal(t+1,e)}matchChoice_5(t,e){return this.matchValTable(t+1,e)}matchChoice_6(t,e){return this.matchVal(t+1,e)}matchChoice_7(t,e){return this.matchSignalComment(t+1,e)}matchChoice_8(t,e){return this.matchMessageComment(t+1,e)}matchChoice_9(t,e){return this.matchNodeComment(t+1,e)}matchChoice_10(t,e){return this.matchGlobalAttribute(t+1,e)}matchChoice_11(t,e){return this.matchMessageAttribute(t+1,e)}matchChoice_12(t,e){return this.matchSignalAttribute(t+1,e)}matchChoice_13(t,e){return this.matchNodeAttribute(t+1,e)}matchChoice_14(t,e){return this.matchAttributeDefault(t+1,e)}matchChoice_15(t,e){return this.matchAttributeValue(t+1,e)}matchChoice_16(t,e){return this.matchVersion(t+1,e)}matchChoice_17(t,e){return this.matchNewSymbolValue(t+1,e)}matchChoice_18(t,e){return this.matchBlankLine(t+1,e)}matchChoice_19(t,e){return this.matchNewSymbol(t+1,e)}matchChoice_20(t,e){return this.matchBusSpeed(t+1,e)}matchChoice_21(t,e){return this.matchComment(t+1,e)}matchChoice_22(t,e){return this.matchCanEnvironmentVariable(t+1,e)}matchChoice_23(t,e){return this.matchEnvironmentVarData(t+1,e)}matchChoice_24(t,e){return this.matchEnvironmentVariableComment(t+1,e)}matchChoice_25(t,e){return this.matchMessageTransmitter(t+1,e)}matchChoice_26(t,e){return this.matchEnvironmentAttribute(t+1,e)}matchChoice_27(t,e){return this.matchEnvironmentVal(t+1,e)}matchChoice_28(t,e){return this.matchCanSignalGroup(t+1,e)}matchChoice_29(t,e){return this.matchSigValType(t+1,e)}matchBlankLine(t,e){return this.run(t,(()=>{let a=null;return null!==this.regexAccept(String.raw`(?:)`,"",t+1,e)&&null!==this.match$EOF(e)&&(a={kind:s.BlankLine}),a}))}matchCanSignalGroup(t,e){return this.run(t,(()=>{let a,n,i,r,s=null;return null!==this.regexAccept(String.raw`(?:SIG_GROUP_\s+)`,"",t+1,e)&&null!==(a=this.matchCanSignalGroup_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(n=this.matchCanSignalGroup_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(i=this.matchCanSignalGroup_$2(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+:\s*)`,"",t+1,e)&&null!==(r=this.matchCanSignalGroup_$3(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&(s=new l(a,n,i,r)),s}))}matchCanSignalGroup_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanSignalGroup_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchCanSignalGroup_$2(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanSignalGroup_$3(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_\s]*)`,"",t+1,e)}matchMessageTransmitter(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:BO_TX_BU_\s+)`,"",t+1,e)&&null!==(a=this.matchMessageTransmitter_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*:\s*)`,"",t+1,e)&&null!==(n=this.matchMessageTransmitter_$1(t+1,e))&&(i=new c(a,n)),i}))}matchMessageTransmitter_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchMessageTransmitter_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchCanEnvironmentVariable(t,e){return this.run(t,(()=>{let a,n,i,r,s,l,c,o,u,m=null;return null!==this.regexAccept(String.raw`(?:EV_\s+)`,"",t+1,e)&&null!==(a=this.matchCanEnvironmentVariable_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*:\s*)`,"",t+1,e)&&null!==(n=this.matchCanEnvironmentVariable_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+\[)`,"",t+1,e)&&null!==(i=this.matchCanEnvironmentVariable_$2(t+1,e))&&null!==this.regexAccept(String.raw`(?:\|)`,"",t+1,e)&&null!==(r=this.matchCanEnvironmentVariable_$3(t+1,e))&&null!==this.regexAccept(String.raw`(?:\]\s)`,"",t+1,e)&&null!==(s=this.matchCanEnvironmentVariable_$4(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(l=this.matchCanEnvironmentVariable_$5(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(c=this.matchCanEnvironmentVariable_$6(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(o=this.matchCanEnvironmentVariable_$7(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(u=this.matchCanEnvironmentVariable_$8(t+1,e))&&(m=new h(a,n,i,r,s,l,c,o,u)),m}))}matchCanEnvironmentVariable_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchCanEnvironmentVariable_$1(t,e){return this.regexAccept(String.raw`(?:0|1|2)`,"",t+1,e)}matchCanEnvironmentVariable_$2(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanEnvironmentVariable_$3(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanEnvironmentVariable_$4(t,e){return this.regexAccept(String.raw`(?:".*")`,"",t+1,e)}matchCanEnvironmentVariable_$5(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanEnvironmentVariable_$6(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanEnvironmentVariable_$7(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchCanEnvironmentVariable_$8(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchEnvironmentVarData(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:ENVVAR_DATA_\s+)`,"",t+1,e)&&null!==(a=this.matchEnvironmentVarData_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*:\s*)`,"",t+1,e)&&null!==(n=this.matchEnvironmentVarData_$1(t+1,e))&&(i=new o(a,n)),i}))}matchEnvironmentVarData_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchEnvironmentVarData_$1(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchEnvironmentVariableComment(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:CM_ EV_\s+)`,"",t+1,e)&&null!==(a=this.matchEnvironmentVariableComment_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchEnvironmentVariableComment_$1(t+1,e))&&(i=new u(a,n)),i}))}matchEnvironmentVariableComment_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchEnvironmentVariableComment_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchVersion(t,e){return this.run(t,(()=>{let a,n=null;return null!==this.regexAccept(String.raw`(?:VERSION)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(a=this.matchVersion_$0(t+1,e))&&(n=new m(a)),n}))}matchVersion_$0(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchNewSymbol(t,e){return this.regexAccept(String.raw`(?:NS_\s*:)`,"",t+1,e)}matchBusSpeed(t,e){return this.regexAccept(String.raw`(?:BS_:)`,"",t+1,e)}matchNewSymbolValue(t,e){return this.run(t,(()=>{let a,n=null;return null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(a=this.matchNewSymbolValue_$0(t+1,e))&&(this.regexAccept(String.raw`(?:$)`,"",t+1,e),1)&&(n={kind:s.NewSymbolValue,symbol:a}),n}))}matchNewSymbolValue_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z_]+_)`,"",t+1,e)}matchCanNode(t,e){return this.run(t,(()=>{let a,n=null;return null!==this.regexAccept(String.raw`(?:BU_:\s*)`,"",t+1,e)&&null!==(a=this.matchCanNode_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&(this.regexAccept(String.raw`(?:;)`,"",t+1,e),1)&&(n=new g(a)),n}))}matchCanNode_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_\s]*)`,"",t+1,e)}matchCanMessage(t,e){return this.run(t,(()=>{let a,n,i,r,s=null;return null!==this.regexAccept(String.raw`(?:BO_\s)`,"",t+1,e)&&null!==(a=this.matchCanMessage_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(n=this.matchCanMessage_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?::\s*)`,"",t+1,e)&&null!==(i=this.matchCanMessage_$2(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(r=this.matchCanMessage_$3(t+1,e))&&(s=new d(a,n,i,r)),s}))}matchCanMessage_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanMessage_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]*)`,"",t+1,e)}matchCanMessage_$2(t,e){return this.regexAccept(String.raw`(?:[0-9])`,"",t+1,e)}matchCanMessage_$3(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]*)`,"",t+1,e)}matchCanSignal(t,e){return this.run(t,(()=>{let a,n,i,r,s,l,c,h,o,u,m,g,d=null;return null!==this.regexAccept(String.raw`(?:\s*SG_\s)`,"",t+1,e)&&null!==(a=this.matchCanSignal_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(n=this.matchCanSignal_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*:\s)`,"",t+1,e)&&null!==(i=this.matchCanSignal_$2(t+1,e))&&null!==this.regexAccept(String.raw`(?:\|)`,"",t+1,e)&&null!==(r=this.matchCanSignal_$3(t+1,e))&&null!==this.regexAccept(String.raw`(?:@)`,"",t+1,e)&&null!==(s=this.matchCanSignal_$4(t+1,e))&&null!==(l=this.matchCanSignal_$5(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s\()`,"",t+1,e)&&null!==(c=this.matchCanSignal_$6(t+1,e))&&null!==this.regexAccept(String.raw`(?:,)`,"",t+1,e)&&null!==(h=this.matchCanSignal_$7(t+1,e))&&null!==this.regexAccept(String.raw`(?:\)\s\[)`,"",t+1,e)&&null!==(o=this.matchCanSignal_$8(t+1,e))&&null!==this.regexAccept(String.raw`(?:\|)`,"",t+1,e)&&null!==(u=this.matchCanSignal_$9(t+1,e))&&null!==this.regexAccept(String.raw`(?:\]\s)`,"",t+1,e)&&null!==(m=this.matchCanSignal_$10(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(g=this.matchCanSignal_$11(t+1,e))&&(d=new p(a,n,i,r,s,l,c,h,o,u,m,g)),d}))}matchCanSignal_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchCanSignal_$1(t,e){return this.regexAccept(String.raw`(?:M|[m0-9M]*|\s)`,"",t+1,e)}matchCanSignal_$2(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanSignal_$3(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchCanSignal_$4(t,e){return this.regexAccept(String.raw`(?:[1|0])`,"",t+1,e)}matchCanSignal_$5(t,e){return this.regexAccept(String.raw`(?:[+|-])`,"",t+1,e)}matchCanSignal_$6(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanSignal_$7(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanSignal_$8(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanSignal_$9(t,e){return this.regexAccept(String.raw`(?:[\-0-9.]+)`,"",t+1,e)}matchCanSignal_$10(t,e){return this.regexAccept(String.raw`(?:".*")`,"",t+1,e)}matchCanSignal_$11(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchSignalMultiplexVal(t,e){return this.run(t,(()=>{let a,n,i,r,s=null;return null!==this.regexAccept(String.raw`(?:SG_MUL_VAL_\s)`,"",t+1,e)&&null!==(a=this.matchSignalMultiplexVal_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(n=this.matchSignalMultiplexVal_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(i=this.matchSignalMultiplexVal_$2(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*)`,"",t+1,e)&&null!==(r=this.matchSignalMultiplexVal_$3(t+1,e))&&(s=new _(a,n,i,r)),s}))}matchSignalMultiplexVal_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchSignalMultiplexVal_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchSignalMultiplexVal_$2(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchSignalMultiplexVal_$3(t,e){return this.regexAccept(String.raw`(?:[0-9-,\s]+;)`,"",t+1,e)}matchValTable(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:VAL_TABLE_\s)`,"",t+1,e)&&null!==(a=this.matchValTable_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchValTable_$1(t+1,e))&&(i=new S(a,n)),i}))}matchValTable_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchValTable_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchVal(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:VAL_\s)`,"",t+1,e)&&null!==(a=this.matchVal_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchVal_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(i=this.matchVal_$2(t+1,e))&&(r=new b(a,n,i)),r}))}matchVal_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchVal_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchVal_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchEnvironmentVal(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:VAL_\s)`,"",t+1,e)&&null!==this.negate((()=>this.regexAccept(String.raw`(?:0-9)`,"",t+1,e)))&&null!==(a=this.matchEnvironmentVal_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchEnvironmentVal_$1(t+1,e))&&(i=new w(a,n)),i}))}matchEnvironmentVal_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchEnvironmentVal_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchComment(t,e){return this.run(t,(()=>{let a,n=null;return null!==this.regexAccept(String.raw`(?:CM_\s)`,"",t+1,e)&&null!==this.negate((()=>this.regexAccept(String.raw`(?:[SG_|BO_|BU_|EV_])`,"",t+1,e)))&&null!==(a=this.matchComment_$0(t+1,e))&&(n=new A(a)),n}))}matchComment_$0(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchSignalComment(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:CM_ SG_\s)`,"",t+1,e)&&null!==(a=this.matchSignalComment_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchSignalComment_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(i=this.matchSignalComment_$2(t+1,e))&&(r=new $(a,n,i)),r}))}matchSignalComment_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchSignalComment_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchSignalComment_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchMessageComment(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:CM_ BO_\s)`,"",t+1,e)&&null!==(a=this.matchMessageComment_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchMessageComment_$1(t+1,e))&&(i=new C(a,n)),i}))}matchMessageComment_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchMessageComment_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchNodeComment(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:CM_ BU_\s)`,"",t+1,e)&&null!==(a=this.matchNodeComment_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchNodeComment_$1(t+1,e))&&(i=new x(a,n)),i}))}matchNodeComment_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchNodeComment_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchGlobalAttribute(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchGlobalAttribute_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchGlobalAttribute_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(i=this.matchGlobalAttribute_$2(t+1,e))&&(r=new f(a,n,i)),r}))}matchGlobalAttribute_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchGlobalAttribute_$1(t,e){return this.regexAccept(String.raw`(?:[A-Z]+)`,"",t+1,e)}matchGlobalAttribute_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchMessageAttribute(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_ BO_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchMessageAttribute_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchMessageAttribute_$1(t+1,e))&&(this.regexAccept(String.raw`(?:\s)`,"",t+1,e),1)&&null!==(i=this.matchMessageAttribute_$2(t+1,e))&&(r=new V(a,n,i)),r}))}matchMessageAttribute_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchMessageAttribute_$1(t,e){return this.regexAccept(String.raw`(?:[A-Z]+)`,"",t+1,e)}matchMessageAttribute_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchEnvironmentAttribute(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_ EV_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchEnvironmentAttribute_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchEnvironmentAttribute_$1(t+1,e))&&(this.regexAccept(String.raw`(?:\s)`,"",t+1,e),1)&&null!==(i=this.matchEnvironmentAttribute_$2(t+1,e))&&(r=new v(a,n,i)),r}))}matchEnvironmentAttribute_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchEnvironmentAttribute_$1(t,e){return this.regexAccept(String.raw`(?:[A-Z]+)`,"",t+1,e)}matchEnvironmentAttribute_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchNodeAttribute(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_ BU_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchNodeAttribute_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchNodeAttribute_$1(t+1,e))&&(this.regexAccept(String.raw`(?:\s)`,"",t+1,e),1)&&null!==(i=this.matchNodeAttribute_$2(t+1,e))&&(r=new E(a,n,i)),r}))}matchNodeAttribute_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchNodeAttribute_$1(t,e){return this.regexAccept(String.raw`(?:[A-Z]+)`,"",t+1,e)}matchNodeAttribute_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchSignalAttribute(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_ SG_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchSignalAttribute_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchSignalAttribute_$1(t+1,e))&&(this.regexAccept(String.raw`(?:\s)`,"",t+1,e),1)&&null!==(i=this.matchSignalAttribute_$2(t+1,e))&&(r=new y(a,n,i)),r}))}matchSignalAttribute_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchSignalAttribute_$1(t,e){return this.regexAccept(String.raw`(?:[A-Z]+)`,"",t+1,e)}matchSignalAttribute_$2(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchAttributeDefault(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:BA_DEF_DEF_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchAttributeDefault_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchAttributeDefault_$1(t+1,e))&&(i=new M(a,n)),i}))}matchAttributeDefault_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchAttributeDefault_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchAttributeValue(t,e){return this.run(t,(()=>{let a,n,i=null;return null!==this.regexAccept(String.raw`(?:BA_\s+)`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==(a=this.matchAttributeValue_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:")`,"",t+1,e)&&null!==this.regexAccept(String.raw`(?:\s)`,"",t+1,e)&&null!==(n=this.matchAttributeValue_$1(t+1,e))&&(i=new T(a,n)),i}))}matchAttributeValue_$0(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchAttributeValue_$1(t,e){return this.regexAccept(String.raw`(?:.*)`,"",t+1,e)}matchSigValType(t,e){return this.run(t,(()=>{let a,n,i,r=null;return null!==this.regexAccept(String.raw`(?:SIG_VALTYPE_\s+)`,"",t+1,e)&&null!==(a=this.matchSigValType_$0(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s+)`,"",t+1,e)&&null!==(n=this.matchSigValType_$1(t+1,e))&&null!==this.regexAccept(String.raw`(?:\s*:\s*)`,"",t+1,e)&&null!==(i=this.matchSigValType_$2(t+1,e))&&(r=new N(a,n,i)),r}))}matchSigValType_$0(t,e){return this.regexAccept(String.raw`(?:[0-9]+)`,"",t+1,e)}matchSigValType_$1(t,e){return this.regexAccept(String.raw`(?:[a-zA-Z0-9_]+)`,"",t+1,e)}matchSigValType_$2(t,e){return this.regexAccept(String.raw`(?:1|2)`,"",t+1,e)}test(){const t=this.mark(),e=null!==this.matchChoice(0);return this.reset(t),e}parse(){const t=this.mark(),e=this.matchChoice(0);if(e)return{ast:e,errs:[]};this.reset(t);const a=new G;this.clearMemos(),this.matchChoice(0,a);const n=a.getErr();return{ast:e,errs:null!==n?[n]:[]}}mark(){return this.pos}loopPlus(t){return this.loop(t,1,-1)}loop(t,e,a){const n=this.mark(),i=[];for(;-1===a||i.length<a;){const e=this.mark(),a=t();if(null===a||this.pos.overallPos===e.overallPos)break;i.push(a)}return i.length>=e?i:(this.reset(n),null)}run(t,e){const a=this.mark(),n=e();return null!==n?n:(this.reset(a),null)}choice(t){for(const e of t){const t=e();if(null!==t)return t}return null}regexAccept(t,e,a,n){return this.run(a,(()=>{const a=new RegExp(t,"y"+e),i=this.mark();a.lastIndex=i.overallPos;const r=this.tryConsume(a);return n&&n.record(i,r,{kind:"RegexMatch",literal:t.substring(3,t.length-1),negated:this.negating}),r}))}tryConsume(t){const e=t.exec(this.input);if(e){let a=0,n=-1;for(let t=0;t<e[0].length;++t)"\n"===e[0][t]&&(++a,n=t);return this.pos={overallPos:t.lastIndex,line:this.pos.line+a,offset:-1===n?this.pos.offset+e[0].length:e[0].length-n-1},e[0]}return null}noConsume(t){const e=this.mark(),a=t();return this.reset(e),a}negate(t){const e=this.mark(),a=this.negating;this.negating=!a;const n=t();return this.negating=a,this.reset(e),null===n||null}memoise(t,e){const a=this.mark(),n=e.get(a.overallPos);if(this.memoSafe&&void 0!==n)return this.reset(n[1]),n[0];const i=t();return this.memoSafe&&e.set(a.overallPos,[i,this.mark()]),i}match$EOF(t){const e=this.finished()?{kind:s.$EOF}:null;return t&&t.record(this.mark(),e,{kind:"EOF",negated:this.negating}),e}}class I{constructor(t,e){this.pos=t,this.expmatches=[...e]}toString(){return`Syntax Error at line ${this.pos.line}:${this.pos.offset}. Expected one of ${this.expmatches.map((t=>"EOF"===t.kind?" EOF":` ${t.negated?"not ":""}'${t.literal}'`))}`}}class G{constructor(){this.mxpos={overallPos:-1,line:-1,offset:-1},this.regexset=new Set,this.pmatches=[]}record(t,e,a){null===e!==a.negated&&(t.overallPos>this.mxpos.overallPos&&(this.mxpos=t,this.pmatches=[],this.regexset.clear()),this.mxpos.overallPos===t.overallPos&&("RegexMatch"===a.kind?(this.regexset.has(a.literal)||this.pmatches.push(a),this.regexset.add(a.literal)):this.pmatches.push(a)))}getErr(){return-1!==this.mxpos.overallPos?new I(this.mxpos,this.pmatches):null}}const B=(t,e,a=!1)=>{if(64===t&&a)return"double";if(32===t&&a)return"float";if(t<=8)return e?"int8":"uint8";if(t<=16)return e?"int16":"uint16";if(t<=32)return e?"int32":"uint32";if(t<=64)return e?"int64":"uint64";if(t>64)return"unknown";throw new Error(`Could not compute data type from inputs: bits ->${t} signed-> ${e} float ->${a}`)};class D extends Error{constructor(t){super(t),this.__proto__=Error,Object.setPrototypeOf(this,D.prototype)}}const L=2147483648;class F{isIdExtended(t){return(t&L)>>>0===L}setExtendedFlag(t){return(t|L)>>>0}unsetExtendedFlag(t){return(536870911&t)>>>0}bitGet(t,e){return this.uint8ToBinary(t).split("")[e]}bitSet(t,e,a){return t[t.length-e-1]=a,t}bin2decSigned(t){if("1"===t[0]){let e="";for(let a=0;a<t.length;a++)e+="0"===t[a]?"1":"0";return-1*(parseInt(e,2)+1)}return parseInt(t,2)}bin2dec(t){return parseInt(t,2)}dec2bin(t,e){return(t>>>0).toString(2).padStart(e,"0")}dec2binSigned(t,e){return t<0&&(t=(1<<e)+t),t.toString(2).padStart(e,"0")}uint8ToBinary(t){const e="000000000"+(t>>>0).toString(2);return e.substring(e.length-8)}payload2Binary(t,e){let a;a="Intel"===e?t.slice().reverse():t;return a.reduce(((t,e)=>t+this.uint8ToBinary(e)),"").split("")}binary2Payload(t,e){const a=[];for(let e=0;e<t.length;e+=8)a.push(parseInt(t.slice(e,e+8).join(""),2));return"Intel"===e?a.reverse():a}getStartOfBit(t,e,a,n){let i;if("Intel"===n)i=t-e-a;else{i=8*Math.floor(e/8)+(7-e%8)-a+1}return i}extractBitRange(t,e,a,n){let i;return i=this.getStartOfBit(t.length,e,a,n),t.slice(i,i+a)}insertBitRange(t,e,a,n,i){let r;r=this.getStartOfBit(t.length,a,n,i);for(let a=0;a<n;a++)t[r+a]=e[a]||"0";return t}}class R extends F{constructor(){super(),this.idMap=new Map}set database(t){this._database=t,this.idMap=this.messageMapTransform(this._database.messages)}messageMapTransform(t){const e=new Map;for(const[a,n]of t)e.set(n.id,n);return e}createFrame(t,e,a=!1){if(e.length>8)throw new D(`Can not have payloads over 8 bytes: ${e}`);if(0===e.length)throw new D(`Payload is either empty or undefined: ${e}`);const n=new Uint8ClampedArray(e);return{id:a?this.setExtendedFlag(t):t,dlc:e.length,isExtended:a,payload:Array.from(n)}}decode(t){if(void 0===this._database)throw new Error("No database is attached to class instance");const e=this.getMessageById(t.id);if(!e)return e;if(e.dlc!==t.dlc)return;const a=new Map;for(const[n,i]of e.signals){const e=this.decodeSignal(t.payload,i);a.set(n,e)}return{name:e.name,id:e.id,boundSignals:a,boundData:{frame:t,message:e},setSignalValue:(t,e)=>({})}}encode(t){if(void 0===this._database)throw new Error("No database is attached to class instance");const e=this.getMessageById(t.id);if(!e)throw new Error(`Message with ID ${t.id} not found in database`);const a=new Array(e.dlc).fill(0);for(const e of t.boundSignals.values())this.encodeSignal(a,e);return this.createFrame(t.id,a,t.boundData.frame.isExtended)}getMessageById(t){return this.idMap.get(t)}applyPropsToSignalValue(t,e){let a,n=e*t.factor+t.offset;if(0===t.min&&0===t.max||(n<t.min?n=t.min:n>t.max&&(n=t.max)),t.valueTable){const e=t.valueTable.get(n);a=e||n.toString()+(t.unit?" "+t.unit:"")}else a=n.toString()+(t.unit?" "+t.unit:"");return{rawValue:e,prcValue:n,physValue:a}}decodeSignal(t,e){const a=this.extractValFromPayload(t,e.startBit,e.length,e.endian,e.signed),n=this.applyPropsToSignalValue(e,a);return{boundData:{payload:t,signal:e},setValue:t=>({}),value:n.prcValue,rawValue:n.rawValue,physValue:n.physValue}}encodeSignal(t,e){const a=e.boundData.signal,n=e.value,i=Math.round((n-a.offset)/a.factor);this.insertValToPayload(t,i,a.startBit,a.length,a.endian,a.signed)}extractValFromPayload(t,e,a,n,i){const r=this.payload2Binary(t,n),s=this.extractBitRange(r,e,a,n);let l;return l=Number(i?this.bin2decSigned(s.join("")):this.bin2dec(s.join(""))),l}insertValToPayload(t,e,a,n,i,r){let s=r?this.dec2binSigned(e,n):this.dec2bin(e,n);s=s.slice(-n);let l=this.payload2Binary(t,i);l=this.insertBitRange(l,s,a,n,i);const c=this.binary2Payload(l,i);for(let e=0;e<t.length;e++)t[e]=c[e];return t}setSignalValues(){return null}createBoundSignal(t,e,a=0){const n=this.applyPropsToSignalValue(t,a),i={boundData:{signal:t,payload:e},value:n.prcValue,rawValue:n.rawValue,physValue:n.physValue,setValue:e=>{const a=this.applyPropsToSignalValue(t,e);i.value=a.prcValue,i.rawValue=a.rawValue,i.physValue=a.physValue}};return i}createBoundMessage(t,e=null){let a,n;if(e&&e.payload){if(e.payload.length!==t.dlc)throw new Error(`Supplied payload length: ${e.payload.length} does not match message DLC length: ${t.dlc}`);a=e.payload}else a=new Array(t.dlc).fill(0);n=!(!e||!e.isExtended)&&e.isExtended;const i=this.createFrame(t.id,a,n),r=new Map;t.signals.forEach((t=>{r.set(t.name,this.createBoundSignal(t,a,0))}));const s={name:t.name,id:t.id,boundSignals:r,boundData:{frame:i,message:t},setSignalValue:(t,e)=>{const a=s.boundSignals.get(t);a&&a.setValue(e)}};return s}}class O extends k{constructor(t){super(t),this.parseResult=this.parse()}updateData(t){if(this.hasKindProp(this.parseResult.ast))switch(this.parseResult.ast,this.parseResult.ast.kind){case s.CanMessage:this.addMessage(t,this.parseResult.ast);break;case s.SignalMultiplexVal:this.addSignalMultiplexValue(t,this.parseResult.ast);break;case s.CanSignal:this.addSignal(t,this.parseResult.ast);break;case s.Version:this.addVersion(t,this.parseResult.ast);break;case s.NewSymbolValue:this.addNewSymbolValue(t,this.parseResult.ast);break;case s.Val:this.addVal(t,this.parseResult.ast);break;case s.ValTable:this.addValTable(t,this.parseResult.ast);break;case s.AttributeValue:this.addAttributeValue(t,this.parseResult.ast);break;case s.AttributeDefault:this.addAttributeDefaultValue(t,this.parseResult.ast);break;case s.GlobalAttribute:this.addGlobalAttribute(t,this.parseResult.ast);break;case s.MessageAttribute:this.addMessageAttribute(t,this.parseResult.ast);break;case s.SignalAttribute:this.addSignalAttribute(t,this.parseResult.ast);break;case s.NodeAttribute:this.addNodeAttribute(t,this.parseResult.ast);break;case s.CanNode:this.addNode(t,this.parseResult.ast);break;case s.SignalComment:this.addSignalComment(t,this.parseResult.ast);break;case s.MessageComment:this.addMessageComment(t,this.parseResult.ast);break;case s.NodeComment:this.addNodeComment(t,this.parseResult.ast);break;case s.Comment:this.addComment(t,this.parseResult.ast);break;case s.CanEnvironmentVariable:this.addEnvironmentVariable(t,this.parseResult.ast);break;case s.EnvironmentAttribute:this.addEnvironmentAttribute(t,this.parseResult.ast);break;case s.EnvironmentVal:this.addEnvironmentVal(t,this.parseResult.ast);break;case s.EnvironmentVariableComment:this.addEnvironmentVariableComment(t,this.parseResult.ast);break;case s.EnvironmentVarData:this.addEnvironmentVariableData(t,this.parseResult.ast);break;case s.MessageTransmitter:this.addMessageTransmitter(t,this.parseResult.ast);break;case s.CanSignalGroup:this.addSignalGroup(t,this.parseResult.ast);break;case s.SigValType:this.addSignalValType(t,this.parseResult.ast)}return t}addComment(t,e){t.description=e.comment}addNode(t,e){e.node_names.forEach((e=>{const a={};a.name=e,a.description=null,a.attributes=new Map,""!==a.name&&t.nodes.set(e,a)}))}addEnvironmentVariableData(t,e){const a=t.environmentVariables.get(e.name);a&&(a.dataBytesLength=e.value)}addEnvironmentVariable(t,e){const a={};a.name=e.name,a.type=this.convert2EnvType(e.type),a.initialValue=e.initial_value,a.min=e.min,a.max=e.max,a.evId=e.ev_id,a.accessNode=e.node,a.accessType=this.convert2AccessType(e.access_type),a.attributes=new Map,a.valueTable=null,a.dataBytesLength=null,a.description=null,a.unit=e.unit,t.environmentVariables.set(a.name,a)}addMessage(t,e){const a=new R,n={};n.id=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,n.extended=a.isIdExtended(e.id),n.dlc=e.dlc,n.name=e.name,n.sendingNode=e.node,n.signals=new Map,n.baseSignals=new Map,n.multiplexSignals=new Map,n.description=null,n.attributes=new Map,n.signalGroups=new Map,t.messages.set(n.name,n)}addSignalMultiplexValue(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,i=Array.from(t.messages.values()).find((t=>t.id===n));if(i){const t=i.multiplexSignals.get(e.switch_name),a=i.multiplexSignals.get(e.name),n=i.signals.get(e.name);if(t&&n){let r={};a?(r=a,i.multiplexSignals.delete(e.name)):(r={},r.signal=n,r.children=new Map),e.value_ranges.forEach((e=>{const a=parseInt(e[0],10),n=parseInt(e[1],10);for(let e=a;e<=n;e++){let a=t.children.get(e);a||(t.children.set(e,[]),a=t.children.get(e)),null==a||a.push(r)}}))}}}addSignal(t,e){var a;const n={};n.name=e.name,n.endian="Motorola"===e.endian?"Motorola":"Intel",n.startBit=e.start_bit,n.length=e.length,n.signed=e.signed,n.max=e.max,n.min=e.min,n.factor=e.factor,n.offset=e.offset,n.multiplex=e.multiplex,n.multiplexer=e.multiplexer,n.receivingNodes=e.nodes,n.unit=e.unit,n.valueTable=null,n.description=null,n.attributes=new Map,n.dataType=B(n.length,n.signed);const i=Array.from(t.messages.keys()),r=i[i.length-1];let s;if(t.messages.has(r))if(s=t.messages.get(r),null==s||s.signals.set(n.name,n),n.multiplexer||0!==(null!==(a=n.multiplex)&&void 0!==a?a:"").length){if(n.multiplexer){const t={};t.signal=n,t.children=new Map,null==s||s.multiplexSignals.set(t.signal.name,t)}}else null==s||s.baseSignals.set(n.name,n)}addSignalComment(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,i=this.getMessageNameFromId(t,n);if(i){const a=t.messages.get(i),n=null==a?void 0:a.signals.get(e.name);n&&(n.description=e.comment)}}addEnvironmentVariableComment(t,e){const a=t.environmentVariables.get(e.name);a&&(a.description=e.comment)}addMessageComment(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,i=this.getMessageNameFromId(t,n);if(i){const a=t.messages.get(i);a&&(a.description=e.comment)}}addNodeComment(t,e){const a=t.nodes.get(e.name);a&&(a.description=e.comment)}addVersion(t,e){t.version=e.version}addNewSymbolValue(t,e){t.newSymbols.push(e.symbol)}addEnvironmentVal(t,e){const a=t.environmentVariables.get(e.name);a&&(a.valueTable=e.enum)}addVal(t,e){for(const[a,n]of t.messages){const n=t.messages.get(a),i=new R,r=i.isIdExtended(e.id)?i.unsetExtendedFlag(e.id):e.id;if(n&&n.id===r){const t=n.signals.get(e.name),a=e.enum;return void(t&&(t.valueTable=a))}}}addValTable(t,e){var a;const n=e.enum;null===(a=t.valueTables)||void 0===a||a.set(e.name,n)}convert2AttributeType(t){switch(t){case"INT":return"INT";case"STRING":default:return"STRING";case"FLOAT":return"FLOAT";case"ENUM":return"ENUM";case"HEX":return"HEX"}}addGlobalAttribute(t,e){const a={},n=this.convert2AttributeType(e.type);a.name=e.name,a.type="Global",a.dataType=n,a.options=new Array,a.defaultValue=null,a.value=null,a.min="FLOAT"===n||"INT"===n||"HEX"===n?e.min:null,a.max="FLOAT"===n||"INT"===n||"HEX"===n?e.max:null,a.options="ENUM"===n?e.enum:null,a.name&&""!==a.name&&t.attributes.set(a.name,a)}addMessageAttribute(t,e){const a={},n=this.convert2AttributeType(e.type);a.name=e.name,a.type="Message",a.dataType=this.convert2AttributeType(e.type),a.options=new Array,a.defaultValue=null,a.value=null,a.min="FLOAT"===n||"INT"===n||"HEX"===n?e.min:null,a.max="FLOAT"===n||"INT"===n||"HEX"===n?e.max:null,a.options="ENUM"===n?e.enum:null,a.name&&""!==a.name&&t.attributes.set(a.name,a)}addSignalAttribute(t,e){const a={},n=this.convert2AttributeType(e.type);a.name=e.name,a.type="Signal",a.dataType=this.convert2AttributeType(e.type),a.options=new Array,a.defaultValue=null,a.value=null,a.min="FLOAT"===n||"INT"===n||"HEX"===n?e.min:null,a.max="FLOAT"===n||"INT"===n||"HEX"===n?e.max:null,a.options="ENUM"===n?e.enum:null,a.name&&""!==a.name&&t.attributes.set(a.name,a)}addNodeAttribute(t,e){const a={},n=this.convert2AttributeType(e.type);a.name=e.name,a.type="Node",a.dataType=this.convert2AttributeType(e.type),a.options=new Array,a.defaultValue=null,a.value=null,a.min="FLOAT"===n||"INT"===n||"HEX"===n?e.min:null,a.max="FLOAT"===n||"INT"===n||"HEX"===n?e.max:null,a.options="ENUM"===n?e.enum:null,a.name&&""!==a.name&&t.attributes.set(a.name,a)}addEnvironmentAttribute(t,e){const a={},n=this.convert2AttributeType(e.type);a.name=e.name,a.type="EnvironmentVariable",a.dataType=this.convert2AttributeType(e.type),a.options=new Array,a.defaultValue=null,a.value=null,a.min="FLOAT"===n||"INT"===n||"HEX"===n?e.min:null,a.max="FLOAT"===n||"INT"===n||"HEX"===n?e.max:null,a.options="ENUM"===n?e.enum:null,a.name&&""!==a.name&&t.attributes.set(a.name,a)}addAttributeDefaultValue(t,e){const a=t.attributes.get(e.name);a&&(a.defaultValue=e.value,a.value=e.value)}addAttributeValue(t,e){if(!t.attributes.has(e.name))return;const a=Object.assign({},t.attributes.get(e.name),{value:e.value});a.value=e.value;const n=new R,i=n.isIdExtended(e.id)?n.unsetExtendedFlag(e.id):e.id,r=this.getMessageNameFromId(t,i);switch(e.type){case"Signal":if(r){const n=t.messages.get(r);if(n){const t=n.signals.get(e.signal);t&&t.attributes.set(a.name,a)}}break;case"Message":if(r){const e=t.messages.get(r);e&&e.attributes.set(a.name,a)}break;case"Node":const n=t.nodes.get(e.node);n&&n.attributes.set(a.name,a);break;case"Global":t.attributes.set(e.name,a);break;case"EnvironmentVariable":const i=t.environmentVariables.get(e.node);i&&i.attributes.set(a.name,a)}}addMessageTransmitter(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id;t.networkBridges.set(n,e.nodes)}addSignalGroup(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,i=this.getMessageNameFromId(t,n);if(i){const a=t.messages.get(i);if(a){const t={name:e.name,id:n,groupId:e.group_number,signals:e.signals};a.signalGroups.set(e.name,t)}}}addSignalValType(t,e){const a=new R,n=a.isIdExtended(e.id)?a.unsetExtendedFlag(e.id):e.id,i=this.getMessageNameFromId(t,n);if(i){const a=t.messages.get(i);if(a){const t=a.signals.get(e.name);if(t)switch(e.type){ca