diff --git a/grammar.js b/grammar.js index e3b4863..938e017 100644 --- a/grammar.js +++ b/grammar.js @@ -33,7 +33,7 @@ module.exports = grammar({ star : $ => "*", square : $ => choice('□', '[]'), - sort : $ => choice($.star, $.square, seq($.square, /[0-9]+/)), + sort : $ => choice($.star, $.square, seq($.square, /[0-9₀₁₂₃₄₅₆₇₈₉]+/)), labs : $ => seq( choice('λ', 'fun'), diff --git a/src/grammar.json b/src/grammar.json index 4920766..83fa290 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -114,7 +114,7 @@ }, { "type": "PATTERN", - "value": "[0-9]+" + "value": "[0-9₀₁₂₃₄₅₆₇₈₉]+" } ] } diff --git a/src/parser.c b/src/parser.c index 3a233bd..0db4882 100644 --- a/src/parser.c +++ b/src/parser.c @@ -555,7 +555,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(0); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + (0x2080 <= lookahead && lookahead <= 0x2089)) ADVANCE(52); END_STATE(); case 1: if (lookahead == '\n') SKIP(1); @@ -581,7 +582,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(2); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + (0x2080 <= lookahead && lookahead <= 0x2089)) ADVANCE(52); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(44); @@ -596,7 +598,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 0x25a1) ADVANCE(50); if (('\t' <= lookahead && lookahead <= '\r') || lookahead == ' ') SKIP(3); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + (0x2080 <= lookahead && lookahead <= 0x2089)) ADVANCE(52); if (('A' <= lookahead && lookahead <= 'Z') || lookahead == '_' || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(44); @@ -822,7 +825,8 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { END_STATE(); case 52: ACCEPT_TOKEN(aux_sym_sort_token1); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + (0x2080 <= lookahead && lookahead <= 0x2089)) ADVANCE(52); END_STATE(); case 53: ACCEPT_TOKEN(anon_sym_u03bb); diff --git a/test/corpus/sorts.txt b/test/corpus/sorts.txt new file mode 100644 index 0000000..e477404 --- /dev/null +++ b/test/corpus/sorts.txt @@ -0,0 +1,72 @@ +===== +Sorts +===== + +def foo (A : *) (B : □) (C : □₁) (D : []) (E : []1) (F : □1) (G : □₁₂₃) := A; + +--- + +(program + (definition + (identifier) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (star))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (param_block + (identifier) + (expr + (app_term + (app + (term + (sort + (square))))))) + (expr + (app_term + (app + (term + (identifier)))))))