Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Grammar railroad diagram #33

Open
mingodad opened this issue May 26, 2024 · 0 comments
Open

Grammar railroad diagram #33

mingodad opened this issue May 26, 2024 · 0 comments

Comments

@mingodad
Copy link

Looking at bif.y there is several conflicts:

bif.y: warning: 125 shift/reduce conflicts [-Wconflicts-sr]
bif.y: warning: 141 reduce/reduce conflicts [-Wconflicts-rr]

The navigable railroad diagram shown bellow can help fix/debug/develop/document the grammar:

//
// EBNF to be viewd at
//    (IPV6) https://www.bottlecaps.de/rr/ui
//    (IPV4) https://rr.red-dove.com/ui
//
// Copy and paste this at one of the urls shown above in the 'Edit Grammar' tab
// then click the 'View Diagram' tab.
//

bif ::=
	group_list

group_list ::=
	/*empty*/
	| group_list bifoptions

bifoptions ::=
	INCLUDE COLON filename

bifoptions ::=
	WORD COLON OBRACE file_list EBRACE

file_list ::=
	/*empty*/
	| file_list file_spec
	| file_list other_spec
	| file_list image_spec
	| file_list metahdr_spec
	| file_list new_pdi_spec
	| file_list new_file_spec
	| file_list partition_spec

metahdr_spec ::=
	METAHEADER OBRACE  metahdr_attr_list EBRACE

metahdr_attr_list ::=
	metahdr_attr
	| metahdr_attr COMMA metahdr_attr_list
	| metahdr_attr metahdr_attr_list

metahdr_attr ::=
	/*empty*/
	| ENCRYPTION EQUAL encrvalue
	| KEYSRC_ENCRYPTION EQUAL key_src
	| AES_KEY_FILE EQUAL filename
	| AUTHENTICATION EQUAL authvalue
	| PPK_FILE EQUAL filename
	| PSK_FILE EQUAL filename
	| SPK_FILE EQUAL filename
	| SSK_FILE EQUAL filename
	| SPK_SIGNATURE_FILE EQUAL filename
	| PRESIGN EQUAL filename
	| REVOKE_ID EQUAL expression
	| CHECKSUM EQUAL checkvalue
	| DPA_CM
	| BLOCKS EQUAL metahdr_blk
	| PUFHD_LOC

optional_data ::=
	optional_data_attr
	| optional_data_attr SEMICOLON optional_data

optional_data_attr ::=
	filename COMMA ID EQUAL expression
	| /*empty*/

metahdr_blk ::=
	metahdr_blk_attr
	| metahdr_blk_attr SEMICOLON metahdr_blk

metahdr_blk_attr ::=
	expression
	| expression LPAREN expression RPAREN
	| expression LPAREN ASTERISK RPAREN

new_pdi_spec ::=
	ID EQUAL expression
	| PARENT_ID EQUAL expression
	| ID_CODE EQUAL expression
	| EXT_ID_CODE EQUAL expression
	| other_file_attr EQUAL filename
	| KEYSRC_ENCRYPTION EQUAL key_src
	| PARTITION_TYPE EQUAL ptypevalue
	| REVOKE_ID EQUAL expression

image_spec ::=
	image_list
	| image_spec image_list

image_list ::=
	IMAGE OBRACE image_content EBRACE

image_content ::=
	/*empty*/
	| image_content image_attributes_list
	| image_content file_spec
	| image_content partition_spec

image_attributes_list ::=
	image_attributes
	| image_attributes COMMA image_attributes_list
	| image_attributes image_attributes_list

image_attributes ::=
	ID EQUAL expression
	| NAME EQUAL WORD
	| DELAY_HANDOFF
	| DELAY_LOAD
	| INIT
	| COPY EQUAL expression
	| PARTITION_TYPE EQUAL ptypevalue
	| UNIQUE_ID EQUAL expression
	| PARENT_UNIQUE_ID EQUAL expression
	| FUNCTION_ID EQUAL expression
	| PCR_NUMBER EQUAL expression
	| PCR_MEASUREMENT_INDEX EQUAL expression

partition_spec ::=
	PARTITION partition_content
	| partition_content

partition_content ::=
	/*empty*/
	| partition_content file_spec
	| partition_content new_file_spec

other_spec ::=
	OBRACKET KEYSRC_ENCRYPTION EBRACKET key_src

other_spec ::=
	OBRACKET FSBL_CONFIG EBRACKET fsbl_attr_list
	| FSBL_CONFIG OBRACE fsbl_attr_list EBRACE
	| BOOT_DEVICE OBRACE sec_boot_attr_list EBRACE
	| OBRACKET BOOT_DEVICE EBRACKET boot_device_type
	| BOOT_DEVICE EQUAL boot_device_type
	| OBRACKET AUTH_PARAMS EBRACKET auth_parameters
	| OBRACKET SPLIT EBRACKET split_options
	| OBRACKET BOOTVECTORS EBRACKET bootvectors_list
	| AUTHJTAG_CONFIG OBRACE authjtag_attr_list EBRACE
	| OPTIONAL_DATA OBRACE optional_data EBRACE

sec_boot_attr_list ::=
	sec_boot_attr
	| sec_boot_attr COMMA sec_boot_attr_list

sec_boot_attr ::=
	boot_device_type
	| IMAGE_STORE
	| ADDRESS EQUAL expression

fsbl_attr_list ::=
	fsbl_attr
	| fsbl_attr COMMA fsbl_attr_list

authjtag_attr_list ::=
	authjtag_attr
	| authjtag_attr COMMA authjtag_attr_list
	| authjtag_attr authjtag_attr_list

authjtag_attr ::=
	REVOKE_ID EQUAL expression
	| DEVICE_DNA EQUAL HEXWORD
	| JTAG_TIMEOUT EQUAL expression

fsbl_attr ::=
	core
	| bh_rsa
	| auth_hash
	| int_hash
	| pufhd_loc
	| auth_only
	| opt_key
	| PUF4KMODE
	| SHUTTER EQUAL expression
	| dpa_cm
	| SMAP_WIDTH EQUAL expression
	| BYPASS_IDCODE_CHECK
	| A_HWROT
	| S_HWROT
	| PUFROSWAP EQUAL expression
	| DICE

file_spec ::=
	OBRACKET attribute_list EBRACKET filename
	| filename

new_file_spec ::=
	OBRACE new_attribute_list EBRACE

new_attribute_list ::=
	attribute
	| new_attribute
	| new_attribute COMMA new_attribute_list
	| attribute COMMA new_attribute_list
	| new_attribute new_attribute_list
	| attribute new_attribute_list

new_attribute ::=
	PFILE EQUAL filename
	| ID EQUAL expression
	| IMAGE_STORE EQUAL expression
	| PARTITION_TYPE EQUAL boolattr
	| PARTITION_TYPE EQUAL PMCDATA
	| BIF_SECTION EQUAL WORD

attribute_list ::=
	attribute
	| attribute COMMA attribute_list

attribute ::=
	boolattr
	| optattr
	| numattr
	| fileattr
	| blocksattr_list

blocksattr_list ::=
	BLOCKS EQUAL blocksattr
	| AUTHBLOCKS EQUAL authblockattr

blocksattr ::=
	blockattr
	| blockattr SEMICOLON blocksattr

bootvectors_list ::=
	bootvector
	| bootvector COMMA bootvectors_list

bootvector ::=
	expression

authblockattr ::=
	expression

boolattr ::=
	BOOTLOADER
	| BOOT
	| USER
	| STATIC
	| NOAUTOSTART
	| MULTIBOOT
	| PROTECTED
	| EARLY_HANDOFF
	| HIVEC
	| XIP_MODE
	| INIT
	| BOOTIMAGE
	| key_file
	| other_files
	| ptypevalue
	| LOCKSTEP

trustzone_type ::=
	TRUSTZONE
	| TRUSTZONE EQUAL TRUSTZONE_TYPE

blockattr ::=
	expression
	| expression LPAREN expression RPAREN
	| expression LPAREN ASTERISK RPAREN

optattr ::=
	AUTHENTICATION EQUAL authvalue
	| ENCRYPTION EQUAL encrvalue
	| CHECKSUM EQUAL checkvalue
	| PARTITION_OWNER EQUAL pownervalue
	| DEST_CPU EQUAL dest_cpu_type
	| DEST_DEVICE EQUAL dest_device_type
	| EXCEPTION_LEVEL EQUAL exception_level_type
	| AES_KEY_FILE EQUAL filename
	| PPK_FILE EQUAL filename
	| PSK_FILE EQUAL filename
	| SPK_FILE EQUAL filename
	| SSK_FILE EQUAL filename
	| SPK_SELECT EQUAL spkselect
	| SPK_ID EQUAL expression
	| SPK_SIGNATURE_FILE EQUAL filename
	| trustzone_type
	| PARTITION_TYPE EQUAL ptypevalue
	| KEYSRC_ENCRYPTION EQUAL key_src
	| REVOKE_ID EQUAL expression
	| DPA_CM
	| SLR_NUM EQUAL expression
	| CLUSTER_NUM EQUAL expression
	| PUFHD_LOC
	| DELAY_AUTH
	| TCM_BOOT

other_file_attr ::=
	INIT
	| key_file
	| BH_KEK_IV
	| BBRAM_KEK_IV
	| EFUSE_KEK_IV
	| EFUSE_USER_KEK0_IV
	| EFUSE_USER_KEK1_IV
	| USER_KEYS

authvalue ::=
	NONE
	| AUTHVALUE

encrvalue ::=
	NONE
	| ENCRVALUE

checkvalue ::=
	NONE
	| CHECKSUMVALUE

pownervalue ::=
	POWNERVALUE

ptypevalue ::=
	PTYPEVALUE

key_src ::=
	KEY_SRC

core ::=
	CORE

bh_rsa ::=
	BH_RSA

dpa_cm ::=
	DPA_CM

auth_hash ::=
	AUTH_HASH

int_hash ::=
	INT_HASH

pufhd_loc ::=
	PUFHD_LOC

opt_key ::=
	OPT_KEY

auth_only ::=
	AUTH_ONLY

boot_device_type ::=
	BOOT_DEVICE_TYPE

dest_cpu_type ::=
	DEST_CPU_TYPE

dest_device_type ::=
	DEST_DEVICE_TYPE

exception_level_type ::=
	EXCEPTION_LEVEL_TYPE

numattr ::=
	ALIGNMENT EQUAL expression
	| OFFSET EQUAL expression
	| RESERVE_LEGACY EQUAL expression
	| RESERVE EQUAL expression
	| LOAD EQUAL expression
	| STARTUP EQUAL expression
	| BIGENDIAN
	| A32_MODE
	| PARTITION_NUM EQUAL expression
	| TCM_A_REGION EQUAL expression
	| TCM_B_REGION EQUAL expression
	| TCM_C_REGION EQUAL expression

fileattr ::=
	PRESIGN EQUAL filename
	| UDF_DATA EQUAL filename

key_file ::=
	AES_KEY_FILE
	| rsa_key_file
	| SPK_SIGNATURE_FILE
	| BH_SIGNATURE_FILE
	| HEADER_SIGNATURE_FILE
	| BH_KEY_FILE
	| PUF_HELPER_FILE
	| BH_KEY_IV
	| FAMILY_KEY

rsa_key_file ::=
	PPK_FILE
	| PSK_FILE
	| SPK_FILE
	| SSK_FILE

other_files ::=
	PMUFW_IMAGE
	| PMCDATA
	| UDF_BH

auth_parameters ::=
	PPK_SELECT EQUAL expression
	| SPK_SELECT EQUAL spkselect
	| SPK_ID EQUAL expression
	| HEADER_AUTH
	| auth_parameters SEMICOLON auth_parameters

spkselect ::=
	SPKSELECT

split_options ::=
	SPLIT_MODE EQUAL splitmode
	| SPLIT_FMT EQUAL splitfmt
	| split_options COMMA split_options

splitmode ::=
	SPLITMODE

splitfmt ::=
	MCS
	| BIN

filename ::=
	FILENAME
	| QFILENAME

number ::=
	HEXVALUE
	| DECVALUE
	| LPAREN expression RPAREN

unary_expression ::=
	number
	| PLUS unary_expression
	| NEGATION unary_expression

multiplicative_expression ::=
	unary_expression
	| multiplicative_expression MULT unary_expression
	| multiplicative_expression DIVIDE unary_expression
	| multiplicative_expression MODULO unary_expression

additive_expression ::=
	multiplicative_expression
	| additive_expression PLUS multiplicative_expression
	| additive_expression MINUS multiplicative_expression

shift_expression ::=
	additive_expression
	| shift_expression LSHIFT additive_expression
	| shift_expression RSHIFT additive_expression

and_expression ::=
	shift_expression
	| and_expression AND shift_expression

xor_expression ::=
	and_expression
	| xor_expression XOR and_expression

expression ::=
	xor_expression
	| expression OR xor_expression


//Tokens

BOOTLOADER ::= "bootloader"
PRESIGN ::= "presign"
UDF_DATA ::= "udf_data"
XIP_MODE ::= "xip_mode"
BOOT ::= "boot"
USER ::= "user"
STATIC ::= "static"
NOAUTOSTART ::= "noautostart"
MULTIBOOT ::= "multiboot"
PROTECTED ::= "protected"
ALIGNMENT ::= "alignment"
EARLY_HANDOFF ::= "early_handoff"
DELAY_HANDOFF ::= "delay_handoff"
DELAY_LOAD ::= "delay_load"
DELAY_AUTH ::= "delay_auth"
HIVEC ::= "hivec"
BLOCKS ::= "blocks"
AUTHBLOCKS ::= "authblocks"
BIGENDIAN ::= "big_endian"
A32_MODE ::= "aarch32_mode"
PARTITION ::= "partition"
IMAGE ::= "image"
METAHEADER ::= "metaheader"
BIF_SECTION ::= "section"
LOCKSTEP ::= "lockstep"
INCLUDE ::= "include"
TCM_BOOT ::= "tcmboot"
OPTIONAL_DATA ::= "optionaldata"

OFFSET ::= "offset"
RESERVE_LEGACY ::= "reserve_legacy"
RESERVE ::= "reserve"
LOAD ::= "load"
COPY ::= "copy"
STARTUP ::= "startup"
PARTITION_NUM ::= "pid"
INIT ::= "init"
UDF_BH ::= "udf_bh"
AES_KEY_FILE ::= "aeskeyfile"
PPK_FILE ::= "ppkfile"
PSK_FILE ::= "pskfile"
SPK_FILE ::= "spkfile"
SSK_FILE ::= "sskfile"
SPK_SIGNATURE_FILE ::= "spksignature"
BH_SIGNATURE_FILE ::= "bhsignature"
HEADER_SIGNATURE_FILE ::= "headersignature"
BOOTVECTORS ::= "bootvectors"
BOOTIMAGE ::= "bootimage"
PARENT_ID ::= "parent_id"
ID_CODE ::= "id_code"
EXT_ID_CODE ::= "extended_id_code"
ID ::= "id"
NAME ::= "name"
PFILE ::= "file"
BH_KEY_FILE ::= "bh_keyfile"
PUF_HELPER_FILE ::= "puf_file"
PMUFW_IMAGE ::= "pmufw_image"
PMCDATA ::= "pmcdata"
BH_KEY_IV ::= "bh_key_iv"
UNIQUE_ID ::= "uid"
PARENT_UNIQUE_ID ::= "parent_uid"
FUNCTION_ID ::= "function_id"
PCR_NUMBER ::= "pcr"
PCR_MEASUREMENT_INDEX ::= "pcr_mindex"
IMAGE_STORE ::= "imagestore"
TCM_A_REGION ::= "tcm_a_region"
TCM_B_REGION ::= "tcm_b_region"
TCM_C_REGION ::= "tcm_c_region"

BBRAM_KEK_IV ::= "bbram_kek_iv"
BH_KEK_IV ::= "bh_kek_iv"
EFUSE_KEK_IV ::= "efuse_kek_iv"
EFUSE_USER_KEK0_IV ::= "efuse_user_kek0_iv"
EFUSE_USER_KEK1_IV ::= "efuse_user_kek1_iv"
USER_KEYS ::= "userkeys"

FAMILY_KEY ::= "familykey"

ENCRYPTION ::= "encryption"
NONE ::= "none"
ENCRVALUE ::= "aes"

AUTHENTICATION ::= "authentication"
AUTHVALUE ::= "rsa"
AUTHVALUE ::= "ecdsa"
AUTHVALUE ::= "ecdsa-p384"
AUTHVALUE ::= "ecdsa-p521"

CHECKSUM ::= "checksum"
CHECKSUMVALUE ::= "md5"
CHECKSUMVALUE ::= "sha2"
CHECKSUMVALUE ::= "sha3"

PARTITION_OWNER ::= "partition_owner"
PARTITION_OWNER ::= "owner"
POWNERVALUE ::= "fsbl"
POWNERVALUE ::= "uboot"
POWNERVALUE ::= "pmc"
POWNERVALUE ::= "non-pmc"
POWNERVALUE ::= "plm"
POWNERVALUE ::= "non-plm"

PARTITION_TYPE ::= "partition_type"
PARTITION_TYPE ::= "type"
PTYPEVALUE ::= "cdo"
PTYPEVALUE ::= "raw"
PTYPEVALUE ::= "cfi"
PTYPEVALUE ::= "cfi-gsc"
PTYPEVALUE ::= "slr-boot"
PTYPEVALUE ::= "slr-config"
PTYPEVALUE ::= "slr-slave"
PTYPEVALUE ::= "slr-slave-boot"
PTYPEVALUE ::= "slr-slave-config"
PTYPEVALUE ::= "elf"

KEYSRC_ENCRYPTION ::= "keysrc_encryption"
KEYSRC_ENCRYPTION ::= "keysrc"
KEY_SRC ::= "efuse"
KEY_SRC ::= "bbram"
KEY_SRC ::= "efuse_red_key"
KEY_SRC ::= "efuse_blk_key"
KEY_SRC ::= "efuse_gry_key"
KEY_SRC ::= "bbram_red_key"
KEY_SRC ::= "bbram_blk_key"
KEY_SRC ::= "bbram_gry_key"
KEY_SRC ::= "bh_gry_key"
KEY_SRC ::= "bh_blk_key"
KEY_SRC ::= "user_key0"
KEY_SRC ::= "user_key1"
KEY_SRC ::= "user_key2"
KEY_SRC ::= "user_key3"
KEY_SRC ::= "user_key4"
KEY_SRC ::= "user_key5"
KEY_SRC ::= "user_key6"
KEY_SRC ::= "user_key7"
KEY_SRC ::= "efuse_user_key0"
KEY_SRC ::= "efuse_user_blk_key0"
KEY_SRC ::= "efuse_user_gry_key0"
KEY_SRC ::= "efuse_user_key1"
KEY_SRC ::= "efuse_user_blk_key1"
KEY_SRC ::= "efuse_user_gry_key1"
KEY_SRC ::= "kup_key"

FSBL_CONFIG ::= "fsbl_config"
FSBL_CONFIG ::= "boot_config"
FSBL_CONFIG ::= "image_config"
CORE ::= "r5_single"
CORE ::= "a53_x32"
CORE ::= "a5x_x32"
CORE ::= "a53_x64"
CORE ::= "a5x_x64"
CORE ::= "r5_dual"
BH_RSA ::= "bh_auth_enable"
AUTH_HASH ::= "auth_sha2_enable"
INT_HASH ::= "INT_HASH"
PUFHD_LOC ::= "pufhd_bh"
AUTH_ONLY ::= "auth_only"
OPT_KEY ::= "opt_key"
PUF4KMODE ::= "puf4kmode"
SHUTTER ::= "shutter"
PUFROSWAP ::= "puf_ro_swap"
DPA_CM ::= "dpacm_enable"
DICE ::= "dice_enable"
SMAP_WIDTH ::= "smap_width"
BYPASS_IDCODE_CHECK ::= "bypass_idcode_check"
A_HWROT ::= "a_hwrot"
S_HWROT ::= "s_hwrot"

BOOT_DEVICE ::= "boot_device"
ADDRESS ::= "address"
BOOT_DEVICE_TYPE ::= "qspi32"
BOOT_DEVICE_TYPE ::= "qspi24"
BOOT_DEVICE_TYPE ::= "nand"
BOOT_DEVICE_TYPE ::= "sd0"
BOOT_DEVICE_TYPE ::= "sd1"
BOOT_DEVICE_TYPE ::= "sd-ls"
BOOT_DEVICE_TYPE ::= "mmc"
BOOT_DEVICE_TYPE ::= "usb"
BOOT_DEVICE_TYPE ::= "ethernet"
BOOT_DEVICE_TYPE ::= "pcie"
BOOT_DEVICE_TYPE ::= "sata"
BOOT_DEVICE_TYPE ::= "ospi"
BOOT_DEVICE_TYPE ::= "smap"
BOOT_DEVICE_TYPE ::= "sbi"
BOOT_DEVICE_TYPE ::= "sd0-raw"
BOOT_DEVICE_TYPE ::= "sd1-raw"
BOOT_DEVICE_TYPE ::= "sd-ls-raw"
BOOT_DEVICE_TYPE ::= "mmc-raw"
BOOT_DEVICE_TYPE ::= "mmc0"
BOOT_DEVICE_TYPE ::= "mmc0-raw"

DEST_CPU ::= "destination_cpu"
DEST_CPU ::= "core"
DEST_CPU_TYPE ::= "a53-0"
DEST_CPU_TYPE ::= "a72-0"
DEST_CPU_TYPE ::= "a78-0"
DEST_CPU_TYPE ::= "a5x-0"
DEST_CPU_TYPE ::= "a53-1"
DEST_CPU_TYPE ::= "a72-1"
DEST_CPU_TYPE ::= "a78-1"
DEST_CPU_TYPE ::= "a5x-1"
DEST_CPU_TYPE ::= "a53-2"
DEST_CPU_TYPE ::= "a78-2"
DEST_CPU_TYPE ::= "a5x-2"
DEST_CPU_TYPE ::= "a53-3"
DEST_CPU_TYPE ::= "a78-3"
DEST_CPU_TYPE ::= "a5x-3"
DEST_CPU_TYPE ::= "r5-0"
DEST_CPU_TYPE ::= "r52-0"
DEST_CPU_TYPE ::= "r5-1"
DEST_CPU_TYPE ::= "r52-1"
DEST_CPU_TYPE ::= "r5-lockstep"
DEST_CPU_TYPE ::= "pmu"
DEST_CPU_TYPE ::= "psm"
DEST_CPU_TYPE ::= "aie"
CLUSTER_NUM ::= "cluster"

DEST_DEVICE ::= "destination_device"
DEST_DEVICE_TYPE ::= "ps"
DEST_DEVICE_TYPE ::= "pl"
DEST_DEVICE_TYPE ::= "pmufw"
DEST_DEVICE_TYPE ::= "xip"

EXCEPTION_LEVEL ::= "exception_level"
EXCEPTION_LEVEL_TYPE ::= "el-0"
EXCEPTION_LEVEL_TYPE ::= "el-1"
EXCEPTION_LEVEL_TYPE ::= "el-2"
EXCEPTION_LEVEL_TYPE ::= "el-3"

TRUSTZONE ::= "trustzone"
TRUSTZONE_TYPE ::= "secure"
TRUSTZONE_TYPE ::= "nonsecure"

SLR_NUM ::= "slr"

AUTH_PARAMS ::= "auth_params"
PPK_SELECT ::= "ppk_select"
SPK_SELECT ::= "spk_select"
SPKSELECT ::= "spk-efuse"
SPKSELECT ::= "user-efuse"
SPK_ID ::= "spk_id"
HEADER_AUTH ::= "header_auth"

REVOKE_ID ::= "revoke_id"

SPLIT ::= "split"
SPLIT_MODE ::= "mode"
SPLITMODE ::= "slaveboot"
SPLITMODE ::= "normal"
SPLIT_FMT ::= "fmt"
MCS ::= "mcs"
BIN ::= "bin"

AUTHJTAG_CONFIG ::= "authjtag_config"
DEVICE_DNA ::= "device_dna"
JTAG_TIMEOUT ::= "jtag_timeout"


COLON ::= ":"
SEMICOLON ::= ";"
EQUAL ::= "="
COMMA ::= ","
OBRACKET ::= "["
EBRACKET ::= "]"
OBRACE ::= "{"
EBRACE ::= "}"
LPAREN ::= "("
RPAREN ::= ")"
ASTERISK ::= "*"

PLUS ::= "+"
MINUS ::= "-"
LSHIFT ::= "<<"
RSHIFT ::= ">>"
MULT ::= "*"
DIVIDE ::= "/"
MODULO ::= "%"
NEGATION ::= "~"
AND ::= "&"
OR ::= "|"
XOR ::= "^"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant