Skip to content

Commit 3fe900b

Browse files
committed
[assembler] Support super/subscript multiplication sign (×).
1 parent 93d7adb commit 3fe900b

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

assembler/src/asmlib/lexer.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ pub(crate) enum Token {
128128
// @plus@ is actually not the correct glyph name, following sub.py.
129129
Plus(Script),
130130
Minus(Script),
131-
Times,
131+
Times(Script),
132132
LogicalOr(Script),
133133
LogicalAnd(Script),
134134

@@ -194,7 +194,7 @@ impl Display for Token {
194194
Token::Solidus(script) => write_elevated(script, "/"),
195195
Token::Plus(script) => write_elevated(script, "+"),
196196
Token::Minus(script) => write_elevated(script, "-"),
197-
Token::Times => f.write_char('×'),
197+
Token::Times(script) => write_elevated(script, "×"),
198198
Token::LogicalOr(script) => write_elevated(script, "∨"),
199199
Token::LogicalAnd(script) => write_elevated(script, "∧"),
200200
Token::Digits(script, numeric_literal) => {
@@ -493,7 +493,7 @@ mod lexer_impl_new {
493493
todo!("double-pipe (which is a symex terminator) does not yet have a token")
494494
}
495495
GlyphShape::Solidus => Some(Token::Solidus(script)),
496-
GlyphShape::Times => only_normal(Token::Times),
496+
GlyphShape::Times => Some(Token::Times(script)),
497497
GlyphShape::Hash => Some(Token::Hash(script)),
498498
GlyphShape::Arrow => Some(match script {
499499
Script::Super | Script::Sub => unimplemented!(),

assembler/src/asmlib/lexer/tests.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -976,8 +976,22 @@ fn test_solidus() {
976976

977977
#[test]
978978
fn test_times() {
979-
assert_eq!(scan_tokens_only("×"), Ok(vec![Token::Times,]));
980-
assert_eq!(scan_tokens_only("@times@"), Ok(vec![Token::Times,]));
979+
assert_eq!(
980+
scan_tokens_only("×"),
981+
Ok(vec![Token::Times(Script::Normal),])
982+
);
983+
assert_eq!(
984+
scan_tokens_only("@times@"),
985+
Ok(vec![Token::Times(Script::Normal),])
986+
);
987+
assert_eq!(
988+
scan_tokens_only("@sup_times@"),
989+
Ok(vec![Token::Times(Script::Super),])
990+
);
991+
assert_eq!(
992+
scan_tokens_only("@sub_times@"),
993+
Ok(vec![Token::Times(Script::Sub),])
994+
);
981995
}
982996

983997
#[test]

assembler/src/asmlib/parser.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@ where
203203
// "Word Assembly" for details.
204204
Tok::Solidus(script) if script_required == script => Operator::Divide,
205205
Tok::Plus(Script::Normal) => Operator::Add,
206-
// TODO: support subscript/superscript for times
207-
Tok::Times if script_required == Script::Normal => Operator::Multiply,
206+
Tok::Times(got) if got == script_required => Operator::Multiply,
208207
Tok::LogicalOr(got) if got == script_required => Operator::LogicalOr,
209208
Tok::LogicalAnd(got) if got == script_required => Operator::LogicalAnd,
210209
Tok::Minus(got) if script_required == got => Operator::Subtract,
@@ -324,7 +323,7 @@ where
324323
just(Tok::Intersection).to('∩'),
325324
just(Tok::Union).to('∪'),
326325
just(Tok::Solidus(Script::Normal)).to('/'),
327-
just(Tok::Times).to('×'),
326+
just(Tok::Times(Script::Normal)).to('×'),
328327
just(Tok::LogicalOr(Script::Normal)).to('∨'),
329328
just(Tok::LogicalAnd(Script::Normal)).to('∧'),
330329
))

0 commit comments

Comments
 (0)