From d26dcf29e48c98b5a81d9b4633c6272b3b452c8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=83=9C?= Date: Thu, 29 Feb 2024 23:03:21 -0800 Subject: [PATCH] =?UTF-8?q?=E6=BC=94=E7=A4=BA=E8=A7=A3=E6=9E=90=E6=95=B0?= =?UTF-8?q?=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\345\210\206\350\257\215\345\231\250.py" | 2 +- ...55\346\263\225\345\210\206\350\257\215.py" | 42 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git "a/rply/\345\210\206\350\257\215\345\231\250.py" "b/rply/\345\210\206\350\257\215\345\231\250.py" index 1b0f560..f3bfde0 100644 --- "a/rply/\345\210\206\350\257\215\345\231\250.py" +++ "b/rply/\345\210\206\350\257\215\345\231\250.py" @@ -1,7 +1,7 @@ from rply.报错 import 分词报错, 按语法分词报错 from rply.词 import 字符位置, 词 -调试细节 = 0 +调试细节 = 1 class 分词器(object): def __init__(自身, 词规则, 略过规则): 自身.词规则 = 词规则 diff --git "a/tests/test_\346\214\211\350\257\255\346\263\225\345\210\206\350\257\215.py" "b/tests/test_\346\214\211\350\257\255\346\263\225\345\210\206\350\257\215.py" index e089835..7ef57e1 100644 --- "a/tests/test_\346\214\211\350\257\255\346\263\225\345\210\206\350\257\215.py" +++ "b/tests/test_\346\214\211\350\257\255\346\263\225\345\210\206\350\257\215.py" @@ -728,4 +728,44 @@ def 常量(片段): assert 分析器.按语法分词(分词器.分词( '添加读者记录,邮箱为“test@example.com”,出生年为2000。'), 25) \ - == 'INSERT INTO 读者 (邮箱, 出生年) VALUES ("test@example.com", 2000);' \ No newline at end of file + == 'INSERT INTO 读者 (邮箱, 出生年) VALUES ("test@example.com", 2000);' + + + def test_数组(self): + 分词母机 = 分词器母机() + 分词母机.添了("左括号", r"\[") + 分词母机.添了("右括号", r"\]") + 分词母机.添了("减", r"-") + 分词母机.添了("数", r"\d\s*") + + 分析器母机 = 语法分析器母机(["数", "左括号", "右括号", "减"]) + + @分析器母机.语法规则("数组 : 左括号 数列 右括号") + def 数组(p): + return p[1] + + @分析器母机.语法规则("数列 : 正负数") + @分析器母机.语法规则("数列 : 数列 正负数") + def 数列(片段): + if len(片段) == 1: + return [片段[0]] + if len(片段) == 2: + return 片段[0] + [片段[1]] + + @分析器母机.语法规则("正负数 : 数") + @分析器母机.语法规则("正负数 : 减 数") + def 正负数(片段): + if len(片段) == 1: + return int(片段[0].getstr().strip()) + if len(片段) == 2: + return -int(片段[1].getstr().strip()) + + 分词器 = 分词母机.产出() + 分析器 = 分析器母机.产出() + + assert 分析器.按语法分词(分词器.分词('[1]')) == [1] + assert 分析器.按语法分词(分词器.分词('[-1]')) == [-1] + assert 分析器.按语法分词(分词器.分词('[1 3]')) == [1, 3] + assert 分析器.按语法分词(分词器.分词('[-1 3]')) == [-1, 3] + assert 分析器.按语法分词(分词器.分词('[1 -2 3]')) == [1, -2, 3] + assert 分析器.按语法分词(分词器.分词('[1 -2 3 -4 5 6 -7]')) == [1, -2, 3, -4, 5, 6, -7]