Skip to content

Parsing the An+B microsyntax

Hey,

I'm curious to know if you are open to a change to help aid in parsing the An+B microsyntax as I am having some trouble filtering out invalid values due to the defined grammar assuming that the language can distinguish between signed and unsigned numbers.

The grammar refers to <signed-integers> and <signless-integers>, but it currently isn't possible to tell them apart when consuming tokens containing positive numbers or -0, as any explicitly provided sign gets lost when converting the string to a number. Additionally, it would be helpful to be able to access the Dimension token's numeric and unit values separately, so that the user doesn't have to try to parse the combined value.

I am proposing the following:

  1. Store the sign found in Step 2. of consume a number, or null if no sign was explicitly given, on TNumber and add a new method along the lines of getSign(): ?string, which returns the sign or null if it was unsigned. A method such as isSigned(): bool is another option, assuming that no other part of the spec needs to know what the sign is, just that the number is signed or not.
  2. Add a new method to Dimension that exposes the TNumber token allowing the user to access its value and sign and determine the type of number.
    • I'm open to suggestions for the method name; maybe something like getToken, getNumber, or getNumberToken?
  3. Add a new method such as getUnit(): string to Dimension that exposes the unit portion of the dimension.

Basically, I need to be able to tell the difference between "4n - 4" and "4n - +4", as the former string is valid, but the later one is not.