mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-29 17:22:56 +08:00
debug compiler for top package
This commit is contained in:
parent
43c9aa5d3b
commit
0f5bc44efd
@ -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>
|
||||
|
@ -1,7 +1,7 @@
|
||||
import STM32
|
||||
import PikaPiZero
|
||||
import PikaStdLib
|
||||
import PikaMath
|
||||
import STM32
|
||||
import PikaPiZero
|
||||
|
||||
time = STM32.Time()
|
||||
uart = STM32.UART()
|
||||
|
@ -1,5 +1,5 @@
|
||||
pikascript-core==v1.0.0
|
||||
PikaStdLib==latest
|
||||
PikaStdLib==v1.1.0
|
||||
PikaStdDevice==latest
|
||||
STM32==v1.2.0
|
||||
PikaPiZero==latest
|
||||
|
Binary file not shown.
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
Loading…
x
Reference in New Issue
Block a user