debug compiler for top package

This commit is contained in:
lyon1998 2021-10-19 08:15:01 +08:00
parent 43c9aa5d3b
commit 0f5bc44efd
6 changed files with 131 additions and 128 deletions

View File

@ -645,6 +645,41 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\pikaScript.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_MemChecker-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdLib_MemChecker-api.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_SysObj-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdLib_SysObj-api.c</FilePath>
</File>
<File>
<FileName>PikaMath_Operator-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaMath_Operator-api.c</FilePath>
</File>
<File>
<FileName>PikaMath-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaMath-api.c</FilePath>
</File>
<File>
<FileName>PikaStdLib-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdLib-api.c</FilePath>
</File>
<File>
<FileName>PikaPiZero_RGB-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaPiZero_RGB-api.c</FilePath>
</File>
<File>
<FileName>PikaPiZero-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaPiZero-api.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_ADC-api.c</FileName>
<FileType>1</FileType>
@ -655,6 +690,11 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdDevice_GPIO-api.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_PWM-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdDevice_PWM-api.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_Time-api.c</FileName>
<FileType>1</FileType>
@ -665,16 +705,6 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdDevice_UART-api.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_MemChecker-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdLib_MemChecker-api.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_SysObj-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdLib_SysObj-api.c</FilePath>
</File>
<File>
<FileName>STM32_ADC-api.c</FileName>
<FileType>1</FileType>
@ -685,6 +715,11 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\STM32_GPIO-api.c</FilePath>
</File>
<File>
<FileName>STM32_PWM-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\STM32_PWM-api.c</FilePath>
</File>
<File>
<FileName>STM32_Time-api.c</FileName>
<FileType>1</FileType>
@ -696,30 +731,40 @@
<FilePath>..\pikascript\pikascript-api\STM32_UART-api.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_PWM-api.c</FileName>
<FileName>STM32-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaStdDevice_PWM-api.c</FilePath>
</File>
<File>
<FileName>STM32_PWM-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\STM32_PWM-api.c</FilePath>
</File>
<File>
<FileName>PikaPiZero_RGB-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaPiZero_RGB-api.c</FilePath>
</File>
<File>
<FileName>PikaMath_Operator-api.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-api\PikaMath_Operator-api.c</FilePath>
<FilePath>..\pikascript\pikascript-api\STM32-api.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>pikascript-lib</GroupName>
<Files>
<File>
<FileName>PikaStdLib_MemChecker.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_MemChecker.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_SysObj.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_SysObj.c</FilePath>
</File>
<File>
<FileName>RGB_ASM.lib</FileName>
<FileType>4</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaPiZero\RGB_ASM.lib</FilePath>
</File>
<File>
<FileName>PikaMath_Operator.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaMath\PikaMath_Operator.c</FilePath>
</File>
<File>
<FileName>PikaPiZero_RGB.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaPiZero\PikaPiZero_RGB.c</FilePath>
</File>
<File>
<FileName>PikaStdDeivce_GPIO.c</FileName>
<FileType>1</FileType>
@ -730,6 +775,11 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_ADC.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_PWM.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_PWM.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_Time.c</FileName>
<FileType>1</FileType>
@ -740,21 +790,16 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_UART.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_MemChecker.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_MemChecker.c</FilePath>
</File>
<File>
<FileName>PikaStdLib_SysObj.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdLib\PikaStdLib_SysObj.c</FilePath>
</File>
<File>
<FileName>STM32_ADC.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_ADC.c</FilePath>
</File>
<File>
<FileName>STM32_Code.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_Code.c</FilePath>
</File>
<File>
<FileName>STM32_common.c</FileName>
<FileType>1</FileType>
@ -765,6 +810,11 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_GPIO.c</FilePath>
</File>
<File>
<FileName>STM32_PWM.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_PWM.c</FilePath>
</File>
<File>
<FileName>STM32_Time.c</FileName>
<FileType>1</FileType>
@ -775,56 +825,6 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_UART.c</FilePath>
</File>
<File>
<FileName>STM32_PWM.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_PWM.c</FilePath>
</File>
<File>
<FileName>PikaStdDevice_PWM.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaStdDevice\PikaStdDevice_PWM.c</FilePath>
</File>
<File>
<FileName>PikaPiZero_RGB.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaPiZero\PikaPiZero_RGB.c</FilePath>
</File>
<File>
<FileName>RGB_ASM.lib</FileName>
<FileType>4</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaPiZero\RGB_ASM.lib</FilePath>
</File>
<File>
<FileName>STM32_Code.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\STM32\STM32_Code.c</FilePath>
</File>
<File>
<FileName>PikaMath_Operator.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaMath\PikaMath_Operator.c</FilePath>
</File>
<File>
<FileName>PikaBlock.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaRunExternControl\PikaBlock.c</FilePath>
</File>
<File>
<FileName>PikaIf.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaRunExternControl\PikaIf.c</FilePath>
</File>
<File>
<FileName>PikaRunExternContral.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaRunExternControl\PikaRunExternContral.c</FilePath>
</File>
<File>
<FileName>PikaWhile.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-lib\PikaRunExternControl\PikaWhile.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -910,6 +910,11 @@
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-core\PikaVM.c</FilePath>
</File>
<File>
<FileName>dataStack.c</FileName>
<FileType>1</FileType>
<FilePath>..\pikascript\pikascript-core\dataStack.c</FilePath>
</File>
</Files>
</Group>
<Group>

View File

@ -1,7 +1,7 @@
import STM32
import PikaPiZero
import PikaStdLib
import PikaMath
import STM32
import PikaPiZero
time = STM32.Time()
uart = STM32.UART()

View File

@ -1,5 +1,5 @@
pikascript-core==v1.0.0
PikaStdLib==latest
PikaStdLib==v1.1.0
PikaStdDevice==latest
STM32==v1.2.0
PikaPiZero==latest

View File

@ -48,17 +48,17 @@ impl Compiler {
let package_name = my_string::get_last_token(&line, ' ').unwrap();
let package_obj_define = format!("{} = {}()", package_name, package_name);
class_now.push_object(package_obj_define, &file_name);
return compiler;
return Compiler::analyze_file(compiler, package_name.to_string(), true);
}
class_now.script_list.add(&line);
return compiler;
}
pub fn analyze_file(mut compiler: Compiler, file_name: String) -> Compiler {
pub fn analyze_file(mut compiler: Compiler, file_name: String, is_top_pkg: bool) -> Compiler {
println!("analyzing file: {}{}.py", compiler.source_path, file_name);
let mut file = File::open(format!("{}{}.py", compiler.source_path, file_name)).unwrap();
/* solve package as top class */
if file_name != "main" {
if file_name != "main" && is_top_pkg {
let pkg_define = format!("class {}(TinyObj):", &file_name);
let pacakge_now = match ClassInfo::new(&String::from(""), &pkg_define, true) {
Some(s) => s,
@ -77,12 +77,17 @@ impl Compiler {
let lines: Vec<&str> = file_str.split('\n').collect();
/* analyze each line of pikascript-api.py */
for line in lines.iter() {
compiler = Compiler::analyze_line(compiler, line.to_string(), &file_name);
compiler = Compiler::analyze_line(compiler, line.to_string(), &file_name, is_top_pkg);
}
return compiler;
}
pub fn analyze_line(mut compiler: Compiler, line: String, file_name: &String) -> Compiler {
pub fn analyze_line(
mut compiler: Compiler,
line: String,
file_name: &String,
is_top_pkg: bool,
) -> Compiler {
let line = line.replace("\r", "");
if file_name == "main" {
compiler = Compiler::analyze_main_line(compiler, &line);
@ -91,7 +96,7 @@ impl Compiler {
if line.starts_with("import ") {
let tokens: Vec<&str> = line.split(" ").collect();
let file = tokens[1];
return Compiler::analyze_file(compiler, file.to_string());
return Compiler::analyze_file(compiler, file.to_string(), false);
}
if line.starts_with("#") {
@ -110,20 +115,24 @@ impl Compiler {
.or_insert(class_now);
compiler.class_now_name = Some(class_name.clone());
/* solve the class as method of package*/
let package_now_name = match compiler.package_now_name.clone() {
Some(s) => s,
None => return compiler,
};
let package_now = compiler.class_list.get_mut(&package_now_name).unwrap();
let class_name_without_file = match my_string::get_last_token(&class_name, '_') {
Some(s) => s,
None => return compiler,
};
let package_new_object_method = format!("def {}()->any:", class_name_without_file);
package_now.push_method(package_new_object_method);
if is_top_pkg {
/* solve the class as method of top package*/
let package_now_name = match compiler.package_now_name.clone() {
Some(s) => s,
None => return compiler,
};
let package_now = compiler.class_list.get_mut(&package_now_name).unwrap();
let class_name_without_file = match my_string::get_last_token(&class_name, '_') {
Some(s) => s,
None => return compiler,
};
let package_new_object_method = format!("def {}()->any:", class_name_without_file);
package_now.push_method(package_new_object_method);
}
return compiler;
}
if line.starts_with(" def ") {
let line = line.strip_prefix(" ").unwrap().to_string();
let class_now = compiler
@ -147,15 +156,6 @@ impl Compiler {
class_now.push_object(line, &file_name);
return compiler;
}
if line.starts_with(" ") && line.contains("(") && line.contains(")") {
let line = line.strip_prefix(" ").unwrap().to_string();
let class_now = compiler
.class_list
.get_mut(&compiler.class_now_name.clone().unwrap())
.unwrap();
class_now.push_import(line, &file_name);
return compiler;
}
return compiler;
}
@ -171,31 +171,29 @@ mod tests {
compiler,
String::from("class Test(SuperTest):"),
&"Pkg".to_string(),
false,
);
let compiler = Compiler::analyze_line(
compiler,
String::from(" def test()"),
&"Pkg".to_string(),
false,
);
let compiler =
Compiler::analyze_line(compiler, String::from(" def test()"), &"Pkg".to_string());
let compiler = Compiler::analyze_line(
compiler,
String::from(" testObj = TestObj()"),
&"Pkg".to_string(),
);
let compiler = Compiler::analyze_line(
compiler,
String::from(" TestImport()"),
&"Pkg".to_string(),
false,
);
let class_info = compiler.class_list.get("Pkg_Test").unwrap();
let method_info = class_info.method_list.get("test").unwrap();
let object_info = class_info.object_list.get("testObj").unwrap();
let import_info = class_info.import_list.get("Pkg_TestImport").unwrap();
assert_eq!(class_info.this_class_name, "Pkg_Test");
assert_eq!(class_info.super_class_name, "Pkg_SuperTest");
assert_eq!(method_info.name, "test");
assert_eq!(method_info.class_name, "Pkg_Test");
assert_eq!(object_info.name, "testObj");
assert_eq!(object_info.class_name, "Pkg_Test");
assert_eq!(import_info.class_name, "Pkg_Test");
assert_eq!(import_info.import_class_name, "Pkg_TestImport");
}
}

View File

@ -14,7 +14,7 @@ use std::io::prelude::*;
fn main() {
let mut compiler = Compiler::new(String::from(""), String::from("pikascript-api/"));
compiler = Compiler::analyze_file(compiler, String::from("main"));
compiler = Compiler::analyze_file(compiler, String::from("main"), false);
/* write to compiler-info about the info */
let mut compiler_info_file =
File::create(format!("{}compiler-info.txt", compiler.dist_path)).unwrap();