步骤1:VAR_TEMP 词法+语法支持(token/关键字/VarSection::Temp/保留字放行)+ 测试

This commit is contained in:
2026-08-26 17:53:25 +08:00
parent 6fa4eda020
commit aa0c66780c
6 changed files with 51 additions and 5 deletions
+1
View File
@@ -35,6 +35,7 @@ namespace compiler {
VAR_OUTPUT, ///< 输出变量段起始
VAR_GLOBAL, ///< 全局变量段起始
VAR_EXTERNAL, ///< 外部变量段起始
VAR_TEMP, ///< 临时变量段起始(VAR_TEMP
END_VAR, ///< 变量段结束
BOOL, ///< 布尔类型
BYTE, ///< 位串类型(8 位)
+2 -2
View File
@@ -53,9 +53,9 @@ namespace compiler {
/**
* @brief 变量段种类。
* @details 枚举值:Local=VAR、Input=VAR_INPUT、Output=VAR_OUTPUT、
* Global=VAR_GLOBAL、External=VAR_EXTERNAL。
* Global=VAR_GLOBAL、External=VAR_EXTERNAL、Temp=VAR_TEMP
*/
enum class VarSection { Local, Input, Output, Global, External };
enum class VarSection { Local, Input, Output, Global, External, Temp };
/**
* @brief 一段 VAR_* … END_VAR:段种类 + 声明列表。
+1
View File
@@ -60,6 +60,7 @@ namespace {
{"var_output", Tok::VAR_OUTPUT},
{"var_global", Tok::VAR_GLOBAL},
{"var_external", Tok::VAR_EXTERNAL},
{"var_temp", Tok::VAR_TEMP},
{"end_var", Tok::END_VAR},
// 类型(V219 种 IEC 类型)
{"bool", Tok::BOOL},
+5 -3
View File
@@ -64,7 +64,7 @@ namespace {
* 用户标识符(详见 Doc/compiler/语法.md)。
*/
const char* const kForbidden[] = {
"var_in_out", "var_temp", "ref", "class", "any",
"var_in_out", "ref", "class", "any",
"pointer", "interface", "method",
};
@@ -306,8 +306,8 @@ namespace {
}
/**
* @brief 当前 token 是否为种变量段关键字之一
* @return true 为 VAR / VAR_INPUT / VAR_OUTPUT / VAR_GLOBAL / VAR_EXTERNAL
* @brief 当前 token 是否为种变量段关键字之一
* @return true 为 VAR / VAR_INPUT / VAR_OUTPUT / VAR_GLOBAL / VAR_EXTERNAL / VAR_TEMP
*/
bool is_var_section() const {
switch (type()) {
@@ -316,6 +316,7 @@ namespace {
case Tok::VAR_OUTPUT:
case Tok::VAR_GLOBAL:
case Tok::VAR_EXTERNAL:
case Tok::VAR_TEMP:
return true;
default:
return false;
@@ -358,6 +359,7 @@ namespace {
case Tok::VAR_OUTPUT: b->section = VarSection::Output; break;
case Tok::VAR_GLOBAL: b->section = VarSection::Global; break;
case Tok::VAR_EXTERNAL: b->section = VarSection::External; break;
case Tok::VAR_TEMP: b->section = VarSection::Temp; break;
default:
return fail("expected variable section");
}