new literal types

This commit is contained in:
ProgramSnail 2023-08-12 15:08:53 +03:00
parent c9bef5a02e
commit 2cb4ebd03d
4 changed files with 179 additions and 72 deletions

View file

@ -86,14 +86,14 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(name_expression
(reference_expression
(array_access
(simple_name_identifier)
(number_literal)))
(index_literal)))
(simple_name_identifier))
(number_literal))))
(index_literal))))
(empty_lines)
(match
(name_definition
@ -101,7 +101,7 @@ test_k 'n 'k : Int Int -> Bool = {
(case
(name_expression
(simple_name_identifier)
(number_literal))))
(index_literal))))
(empty_lines)
(match
(operator_expression
@ -113,12 +113,12 @@ test_k 'n 'k : Int Int -> Bool = {
(case
(name_expression
(simple_name_identifier)
(number_literal)
(index_literal)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(index_literal)))))
(empty_lines)
(operator_expression
(name_expression
@ -136,13 +136,13 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_type
(simple_type_identifier))
(simple_name_identifier)
(number_literal))
(index_literal))
(simple_name_identifier)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(index_literal)))))
(empty_lines)
(match
(name_definition
@ -173,21 +173,21 @@ test_k 'n 'k : Int Int -> Bool = {
(name_definition
(simple_name_identifier))
(operator_expression
(number_literal)
(index_literal)
(operator)
(operator_expression
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(operator_tail1)
(number_literal)))
(index_literal)))
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(block
(empty_lines)
(condition
@ -196,7 +196,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(operator_tail1)
(name_expression
(simple_name_identifier)))
@ -211,7 +211,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(operator)
(string_literal))
(operator_tail1)
@ -220,7 +220,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(simple_name_identifier))))
(name_expression
(simple_name_identifier)
@ -235,15 +235,15 @@ test_k 'n 'k : Int Int -> Bool = {
(loop
(placeholder)
(operator_expression
(number_literal)
(index_literal)
(operator)
(operator_expression
(number_literal)
(index_literal)
(operator)
(name_expression
(simple_name_identifier)
(simple_name_identifier)
(number_literal))))
(index_literal))))
(char_literal)))
(operator)
(string_literal))
@ -276,14 +276,14 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(argument_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(return
(operator_expression
(name_expression
(simple_type
(simple_type_identifier))
(simple_name_identifier)
(number_literal))
(index_literal))
(operator)
(name_expression
(simple_type
@ -303,7 +303,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(argument_name_identifier)))
(operator_tail1)
(number_literal))))
(index_literal))))
(empty_lines)
(match
(operator_expression
@ -365,13 +365,13 @@ test_k 'n 'k : Int Int -> Bool = {
(name_definition
(simple_name_identifier))
(case
(number_literal)))
(index_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(number_literal)))
(index_literal)))
(empty_lines)
(loop
(name_expression
@ -393,7 +393,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(empty_lines)))
(empty_lines)
(loop
@ -405,7 +405,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier)))
(operator_tail1)
(number_literal))
(index_literal))
(block
(empty_lines)
(match
@ -420,7 +420,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier)))
(operator_tail1)
(number_literal))))
(index_literal))))
(empty_lines)
(condition
(name_expression
@ -463,7 +463,7 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(return
(bool_literal)))
(empty_lines)
@ -481,10 +481,10 @@ test_k 'n 'k : Int Int -> Bool = {
(simple_name_identifier)
(simple_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(operator_tail1)
(operator_expression
(float_number_literal)
(double_literal)
(operator)
(name_expression
(simple_name_identifier)
@ -510,6 +510,6 @@ test_k 'n 'k : Int Int -> Bool = {
(name_expression
(simple_name_identifier))
(operator)
(number_literal))))
(index_literal))))
(empty_lines)))
(empty_lines))

View file

@ -232,6 +232,21 @@ tuple_argument_test 'x : (A & B & C) = do_something;
// ((A1 & A2) | B | C) same to Variant[Tuple[A1 A2] B C]
variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
literals_test = {
%float_number_literal := 1.0f;
%double_number_literal := 1.0;
%int_literal := 1i;
%long_literal := 1l;
%index_literal := 1;
%string_literal := "";
%unicode_string_literal := ""u;
%char_literal := ''a'';
%unicode_literal := ''↪''u;
%bool_literal := true;
%unit_literal := ();
%null_literal := null;
}
--------------------------------------------------------------------------------
(source_file
@ -285,7 +300,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(block
(empty_lines)
(name_expression
@ -297,9 +312,9 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_definition
(simple_name_identifier))
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(index_literal))
(block
(empty_lines)
(name_expression
@ -341,14 +356,14 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(block
(empty_lines)
(operator_expression
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(empty_lines)
(name_expression
(simple_name_identifier)
@ -423,7 +438,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(argument_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(simple_name_identifier)
(argument_name_identifier)
(annotation_identifier)
@ -436,10 +451,10 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(argument_name_identifier))
(case
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(number_literal))
(index_literal))
(index_literal))
(case
(placeholder)
(operator_expression
@ -449,7 +464,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(argument_name_identifier))
(operator)
(number_literal)))
(index_literal)))
(operator)
(name_expression
(simple_name_identifier)
@ -497,29 +512,29 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(simple_name_identifier))
(case
(lambda
(number_literal))))
(index_literal))))
(empty_lines)
(match
(name_expression
(simple_name_identifier))
(case
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(index_literal))
(string_literal))
(case
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(index_literal))
(string_literal))
(case
(operator_expression
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(index_literal))
(operator)
(name_expression
(simple_name_identifier)))
@ -527,7 +542,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal))
(index_literal))
(string_literal))
(case
(placeholder)
@ -571,7 +586,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(annotation_identifier)
(string_literal)
(annotation_identifier)
(float_number_literal))))
(double_literal))))
(empty_lines)
(extra)
(empty_lines)
@ -669,8 +684,8 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(case
(name_expression
(operator)
(number_literal)
(number_literal))))
(index_literal)
(index_literal))))
(empty_lines)
(extra)
(empty_lines)
@ -680,17 +695,17 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(case
(operator_expression
(operator_expression
(number_literal)
(index_literal)
(operator)
(number_literal))
(index_literal))
(operator)
(number_literal))))
(index_literal))))
(empty_lines)
(name_expression
(simple_name_identifier)
(tuple_access
(simple_name_identifier)
(number_literal)))
(index_literal)))
(empty_lines)))
(empty_lines)
(function_definition
@ -795,7 +810,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_definition
(simple_name_identifier))
(operator_expression
(number_literal)
(index_literal)
(operator)
(name_expression
(argument_name_identifier)
@ -814,7 +829,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal))))
(index_literal))))
(name_expression
(simple_name_identifier)
(array_access
@ -827,7 +842,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(index_literal)))))
(operator_expression
(name_expression
(simple_name_identifier))
@ -868,7 +883,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_definition
(simple_name_identifier))
(operator_expression
(number_literal)
(index_literal)
(operator)
(name_expression
(argument_name_identifier)
@ -887,7 +902,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal))))
(index_literal))))
(name_expression
(simple_name_identifier)
(array_access
@ -900,7 +915,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(simple_name_identifier))
(operator)
(number_literal)))))
(index_literal)))))
(operator_expression
(name_expression
(simple_name_identifier))
@ -1054,7 +1069,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(reference_expression
(array_access
(simple_name_identifier)
(number_literal)))))
(index_literal)))))
(empty_lines)))
(empty_lines)
(extra)
@ -1310,7 +1325,7 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(name_expression
(argument_name_identifier))
(operator)
(number_literal))
(index_literal))
(name_expression
(simple_name_identifier)
(string_literal))
@ -1362,4 +1377,81 @@ variant_argument_test 'x : ((A1 & A2) | B | C) = do_something;
(simple_type_identifier)))
(name_expression
(simple_name_identifier)))
(empty_lines)
(function_definition
(simple_name_identifier)
(block
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(float_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(double_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(int_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(long_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(index_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(string_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(unicode_string_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(char_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(unicode_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(bool_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(unit_literal)))
(empty_lines)
(match
(name_definition
(simple_name_identifier))
(case
(null_literal)))
(empty_lines)))
(empty_lines))

View file

@ -201,10 +201,15 @@ OPERATOR_TAIL1 : [+\-*/%^!?|&,<>=]+\. ;
OPERATOR_TAIL2 : [+\-*/%^!?|&,<>=]+\.\. ;
OPERATOR_TAIL3 : [+\-*/%^!?|&,<>=]+\.\.\. ;
FLOAT_NUMBER_LITERAL : [0-9]+ '.' [0-9]+ ;
NUMBER_LITERAL : [0-9]+ ;
STRING_LITERAL : \"([^\\\"]|(\\.))*\" ;
CHAR_LITERAL : '\'' '\'' ([^\\\'] | ( '\\' [\u0000-\u00FF])) '\'' '\'' ;
FLOAT_NUMBER_LITERAL : [0-9]+ '.' [0-9]+ 'f' ;
DOUBLE_NUMBER_LITERAL : [0-9]+ '.' [0-9]+ ;
INT_LITERAL : [0-9]+ 'i' ;
LONG_LITERAL : [0-9]+ 'l' ;
INDEX_LITERAL : [0-9]+ ;
STRING_LITERAL : '\"' ([^\\\'] | ( '\\' [\u0000-\u00FF]))* '\"' ;
UNICODE_STRING_LITERAL : '\"' ([^\\\'] | ( '\\' [\u0000-\uFFFF]))* '\"u';
CHAR_LITERAL : '\'\'' ([^\\\'] | ( '\\' [\u0000-\u00FF])) '\'\'' ;
UNICODE_LITERAL : '\'\'' ([^\\\'] | ( '\\' [\u0000-\uFFFF])) '\'\'u' ;
BOOL_LITERAL : 'true' | 'false' ;
UNIT_LITERAL : '()' ;
NULL_LITERAL : 'null' ;

View file

@ -140,7 +140,7 @@ module.exports = grammar({
array_access: $ => seq($._scoped_expression, '[', $._super_expression, ']'),
tuple_access: $ => seq($._scoped_expression, '.', $.number_literal),
tuple_access: $ => seq($._scoped_expression, '.', $.index_literal),
loop_control: $ => choice('break', 'continue'),
@ -306,19 +306,29 @@ module.exports = grammar({
operator_tail2: $ => /[+\-*/%^!?|&,<>=]+\.\./,
operator_tail3: $ => /[+\-*/%^!?|&,<>=]+\.\.\./,
float_number_literal: $ => /[0-9]+\.[0-9]+/,
number_literal: $ => /[0-9]+/,
float_literal: $ => /[0-9]+\.[0-9]+f/,
double_literal: $ => /[0-9]+\.[0-9]+/,
int_literal: $ => /\-?[0-9]+i/,
long_literal: $ => /\-?[0-9]+l/,
index_literal: $ => /[0-9]+/,
string_literal: $ => seq('\"', /([^\\\"]|(\\.))*/, '\"'),
unicode_string_literal: $ => seq('\"', /([^\\\"]|(\\.))*/, '\"u'),
char_literal: $ => seq('\'\'', /[^\\\']|(\\.)/, '\'\''),
unicode_literal: $ => seq('\'\'', /[^\\\']|(\\.)/, '\'\'u'),
bool_literal: $ => choice('true', 'false'),
unit_literal: $ => '()',
null_literal: $ => 'null',
_literal: $ => choice(
$.float_number_literal,
$.number_literal,
$.float_literal,
$.double_literal,
$.int_literal,
$.long_literal,
$.index_literal,
$.string_literal,
$.unicode_string_literal,
$.char_literal,
$.unicode_literal,
$.bool_literal,
$.unit_literal,
$.null_literal,