成功测试identifier和Punctutation , 增加界符;

This commit is contained in:
Guan Inf 2025-06-04 21:46:05 +08:00
parent 0a3bfc4a08
commit 3ea3dfde27
6 changed files with 222 additions and 4 deletions

52
include/input.txt Normal file
View File

@ -0,0 +1,52 @@
//Merge Sort
struct Point {
x:i8;
y:i8;
}
// Struct
/*
ababa
*/
[Point:105] tmp;
fn MergeSort([Point:20] v,i8 l,i8 r) -> {
if l>r {
return ;
}
var mid = l + r >>1;
MergeSort(v,l,mid);
MergeSort(v,mid+1,r);
i8 i=l,j=mid+1,k=l;
for ;i <= mid && j <= r;k+=1 {
if v[l] < v[r]
{
tmp[k] = v[l];
l +=1;
}
else{
tmp[k] = v[r];
r += 1;
}
}
for ; i<=mid; {
tmp[k] = tmp[i];
k += 1,i+=1;
}
for ; j <=r ; {
tmp[k] = tmp[j];
k +=1 , j += 1;
}
}
fn main()->i8{
[Point:20] d;
[Point] d;
for i8 i = 0;i< 20; i++ {
d[i] = {x:i * i,y:i};
}
MergeSort(d,d+20);
0
}

View File

@ -140,13 +140,15 @@ private:
is_number(module.s_cursor.source[module.s_cursor.guard])) &&
!at_eof()) {
guard_advance();
}
return gen_word();
}
inline token_type_t special_char() {
char c = guard_advance();
char c = module.s_cursor.source[module.s_cursor.guard];
guard_advance();
switch (c) {
case '(':
return TOKEN_LEFT_PAREN;
@ -637,7 +639,6 @@ private:
inline token_t item() {
module.s_cursor.length = 0; // 重置长度
module.s_cursor.current = module.s_cursor.guard; // 重置游标位置
if (is_alpha(module.s_cursor.source[module.s_cursor.guard])) {
std::string word = ident_advance();
return token_t(scanner_ident(word, word.size()),word, module.s_cursor.line, module.s_cursor.column);
@ -662,6 +663,11 @@ private:
word = bin_number_advance();
decimal = number_convert(word, 2);
}
else {
word = number_advance();
if (word.size() > 1) word = word.substr(1, word.size() - 1);
decimal = number_convert(word,10);
}
} else {
word = number_advance();
decimal = number_convert(word, 10);

52
input.txt Normal file
View File

@ -0,0 +1,52 @@
//Merge Sort
struct Point {
x:i8;
y:i8;
}
// Struct
/*
ababa
*/
[Point:105] tmp;
fn MergeSort([Point:20] v,i8 l,i8 r) -> {
if l>r {
return ;
}
var mid = l + r >>1;
MergeSort(v,l,mid);
MergeSort(v,mid+1,r);
i8 i=l,j=mid+1,k=l;
for ;i <= mid && j <= r;k+=1 {
if v[l] < v[r]
{
tmp[k] = v[l];
l +=1;
}
else{
tmp[k] = v[r];
r += 1;
}
}
for ; i<=mid; {
tmp[k] = tmp[i];
k += 1,i+=1;
}
for ; j <=r ; {
tmp[k] = tmp[j];
k +=1 , j += 1;
}
}
fn main()->i8{
[Point:20] d;
[Point] d;
for i8 i = 0;i< 20; i++ {
d[i] = {x:i * i,y:i};
}
MergeSort(d,d+20);
0
}

52
src/input.txt Normal file
View File

@ -0,0 +1,52 @@
//Merge Sort
struct Point {
x:i8;
y:i8;
}
// Struct
/*
ababa
*/
[Point:105] tmp;
fn MergeSort([Point:20] v,i8 l,i8 r) -> {
if l>r {
return ;
}
var mid = l + r >>1;
MergeSort(v,l,mid);
MergeSort(v,mid+1,r);
i8 i=l,j=mid+1,k=l;
for ;i <= mid && j <= r;k+=1 {
if v[l] < v[r]
{
tmp[k] = v[l];
l +=1;
}
else{
tmp[k] = v[r];
r += 1;
}
}
for ; i<=mid; {
tmp[k] = tmp[i];
k += 1,i+=1;
}
for ; j <=r ; {
tmp[k] = tmp[j];
k +=1 , j += 1;
}
}
fn main()->i8{
[Point:20] d;
[Point] d;
for i8 i = 0;i< 20; i++ {
d[i] = {x:i * i,y:i};
}
MergeSort(d,d+20);
0
}

52
unit/input.txt Normal file
View File

@ -0,0 +1,52 @@
//Merge Sort
struct Point {
x:i8;
y:i8;
}
// Struct
/*
ababa
*/
[Point:105] tmp;
fn MergeSort([Point:20] v,i8 l,i8 r) -> {
if l>r {
return ;
}
var mid = l + r >>1;
MergeSort(v,l,mid);
MergeSort(v,mid+1,r);
i8 i=l,j=mid+1,k=l;
for ;i <= mid && j <= r;k+=1 {
if v[l] < v[r]
{
tmp[k] = v[l];
l +=1;
}
else{
tmp[k] = v[r];
r += 1;
}
}
for ; i<=mid; {
tmp[k] = tmp[i];
k += 1,i+=1;
}
for ; j <=r ; {
tmp[k] = tmp[j];
k +=1 , j += 1;
}
}
fn main()->i8{
[Point:20] d;
[Point] d;
for i8 i = 0;i< 20; i++ {
d[i] = {x:i * i,y:i};
}
MergeSort(d,d+20);
0
}

View File

@ -8,7 +8,11 @@
using std::string,std::vector;
TEST_CASE("Scanner test") {
module_t module("{}");
std::ifstream t("input.txt");
std::stringstream buffer;
buffer<<t.rdbuf();
std::cout<<buffer.str();
module_t module(buffer.str());
Scanner scanner(module);
scanner.scan();