duan 1.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- duan-1.7.0/LICENSE +21 -0
- duan-1.7.0/PKG-INFO +301 -0
- duan-1.7.0/README.md +258 -0
- duan-1.7.0/antlrparser/DuanLang.interp +280 -0
- duan-1.7.0/antlrparser/DuanLang.tokens +189 -0
- duan-1.7.0/antlrparser/DuanLangLexer.g4 +300 -0
- duan-1.7.0/antlrparser/DuanLangLexer.interp +501 -0
- duan-1.7.0/antlrparser/DuanLangLexer.py +629 -0
- duan-1.7.0/antlrparser/DuanLangLexer.tokens +298 -0
- duan-1.7.0/antlrparser/DuanLangParser.g4 +495 -0
- duan-1.7.0/antlrparser/DuanLangParser.interp +404 -0
- duan-1.7.0/antlrparser/DuanLangParser.py +8021 -0
- duan-1.7.0/antlrparser/DuanLangParser.tokens +298 -0
- duan-1.7.0/antlrparser/DuanLangParserListener.py +672 -0
- duan-1.7.0/antlrparser/DuanLangParserVisitor.py +381 -0
- duan-1.7.0/antlrparser/__init__.py +22 -0
- duan-1.7.0/antlrparser/_test_async.py +122 -0
- duan-1.7.0/antlrparser/_test_basic.py +36 -0
- duan-1.7.0/antlrparser/_test_regex.py +16 -0
- duan-1.7.0/antlrparser/_test_repl.py +44 -0
- duan-1.7.0/antlrparser/_test_stdlib.py +366 -0
- duan-1.7.0/antlrparser/antlrparser/DuanLangParser.py +7572 -0
- duan-1.7.0/antlrparser/antlrparser/DuanLangParserVisitor.py +381 -0
- duan-1.7.0/antlrparser/cli.py +620 -0
- duan-1.7.0/antlrparser/compile_runtime.py +22 -0
- duan-1.7.0/antlrparser/duan_ast.py +503 -0
- duan-1.7.0/antlrparser/duan_builtins.py +855 -0
- duan-1.7.0/antlrparser/duan_bytecode.py +761 -0
- duan-1.7.0/antlrparser/duan_cli.py +211 -0
- duan-1.7.0/antlrparser/duan_compiler.py +108 -0
- duan-1.7.0/antlrparser/duan_error_handler.py +212 -0
- duan-1.7.0/antlrparser/duan_interpreter.py +125 -0
- duan-1.7.0/antlrparser/duan_llvm.py +149 -0
- duan-1.7.0/antlrparser/duan_module.py +250 -0
- duan-1.7.0/antlrparser/duan_parser/DuanLangLexer.py +629 -0
- duan-1.7.0/antlrparser/duan_parser/DuanLangParser.py +8021 -0
- duan-1.7.0/antlrparser/duan_parser/DuanLangParserListener.py +636 -0
- duan-1.7.0/antlrparser/duan_parser/DuanLangParserVisitor.py +381 -0
- duan-1.7.0/antlrparser/duan_parser2/DuanLangLexer.py +391 -0
- duan-1.7.0/antlrparser/duan_parser2/DuanLangParser.py +3949 -0
- duan-1.7.0/antlrparser/duan_parser2/DuanLangParserVisitor.py +246 -0
- duan-1.7.0/antlrparser/duan_parser_new/DuanLangParserVisitor.py +296 -0
- duan-1.7.0/antlrparser/duan_repl.py +301 -0
- duan-1.7.0/antlrparser/duan_tokenizer.py +764 -0
- duan-1.7.0/antlrparser/duan_visitor.py +869 -0
- duan-1.7.0/antlrparser/indent_preprocessor.py +288 -0
- duan-1.7.0/antlrparser/interpreter_core.py +1230 -0
- duan-1.7.0/antlrparser/llvm_codegen.py +1036 -0
- duan-1.7.0/antlrparser/llvm_core.py +272 -0
- duan-1.7.0/antlrparser/main.py +153 -0
- duan-1.7.0/antlrparser/modules/data_models.duan +41 -0
- duan-1.7.0/antlrparser/modules/math_utils.duan +32 -0
- duan-1.7.0/antlrparser/modules/string_utils.duan +28 -0
- duan-1.7.0/antlrparser/operations.py +96 -0
- duan-1.7.0/antlrparser/runtime/duan_runtime.c +478 -0
- duan-1.7.0/antlrparser/self_hosted/ast.duan +156 -0
- duan-1.7.0/antlrparser/self_hosted/bootstrap_test.duan +104 -0
- duan-1.7.0/antlrparser/self_hosted/interpreter.duan +609 -0
- duan-1.7.0/antlrparser/self_hosted/llvm_codegen.duan +390 -0
- duan-1.7.0/antlrparser/self_hosted/parser.duan +1491 -0
- duan-1.7.0/antlrparser/self_hosted/run_bootstrap_test.py +102 -0
- duan-1.7.0/antlrparser/self_hosted/simple_test.duan +33 -0
- duan-1.7.0/antlrparser/self_hosted/stdlib.duan +788 -0
- duan-1.7.0/antlrparser/self_hosted/test_basic.py +203 -0
- duan-1.7.0/antlrparser/self_hosted/test_bootstrap.duan +43 -0
- duan-1.7.0/antlrparser/self_hosted/test_comprehensive.py +615 -0
- duan-1.7.0/antlrparser/self_hosted/test_duan_interpreter.py +139 -0
- duan-1.7.0/antlrparser/self_hosted/test_enhancements.py +290 -0
- duan-1.7.0/antlrparser/self_hosted/test_enhancements_simple.py +163 -0
- duan-1.7.0/antlrparser/self_hosted/test_final.py +300 -0
- duan-1.7.0/antlrparser/self_hosted/test_full_bootstrap.py +282 -0
- duan-1.7.0/antlrparser/self_hosted/test_integration.py +391 -0
- duan-1.7.0/antlrparser/self_hosted/test_interpreter.py +60 -0
- duan-1.7.0/antlrparser/self_hosted/test_parser.py +299 -0
- duan-1.7.0/antlrparser/self_hosted/test_python_interpreter.py +87 -0
- duan-1.7.0/antlrparser/self_hosted/test_stdlib.py +74 -0
- duan-1.7.0/antlrparser/self_hosted/test_summary.py +147 -0
- duan-1.7.0/antlrparser/self_hosted/test_syntax.duan +5 -0
- duan-1.7.0/antlrparser/self_hosted/test_tokenizer.py +167 -0
- duan-1.7.0/antlrparser/self_hosted/tokenizer.duan +468 -0
- duan-1.7.0/antlrparser/test/mod_advanced.duan +16 -0
- duan-1.7.0/antlrparser/test/mod_greet.duan +10 -0
- duan-1.7.0/antlrparser/test/mod_math.duan +27 -0
- duan-1.7.0/antlrparser/test/mod_util.duan +13 -0
- duan-1.7.0/antlrparser/test/sample_basic.duan +20 -0
- duan-1.7.0/antlrparser/test/sample_controlflow.duan +46 -0
- duan-1.7.0/antlrparser/test/sample_quicksort.duan +19 -0
- duan-1.7.0/antlrparser/test/sample_types.duan +58 -0
- duan-1.7.0/antlrparser/test/test_antlr_comprehensive.duan +101 -0
- duan-1.7.0/antlrparser/test/test_antlr_comprehensive.py +80 -0
- duan-1.7.0/antlrparser/test/test_antlr_validation.py +279 -0
- duan-1.7.0/antlrparser/test/test_class_parse.py +41 -0
- duan-1.7.0/antlrparser/test/test_compile.py +177 -0
- duan-1.7.0/antlrparser/test/test_controlflow.py +324 -0
- duan-1.7.0/antlrparser/test/test_debug.py +34 -0
- duan-1.7.0/antlrparser/test/test_debug_eval.py +32 -0
- duan-1.7.0/antlrparser/test/test_debug_expr.py +32 -0
- duan-1.7.0/antlrparser/test/test_debug_module.py +40 -0
- duan-1.7.0/antlrparser/test/test_debug_new.py +25 -0
- duan-1.7.0/antlrparser/test/test_dict.py +314 -0
- duan-1.7.0/antlrparser/test/test_dual_backend.py +176 -0
- duan-1.7.0/antlrparser/test/test_final_antlr.duan +14 -0
- duan-1.7.0/antlrparser/test/test_final_antlr.py +36 -0
- duan-1.7.0/antlrparser/test/test_interface_parse.py +52 -0
- duan-1.7.0/antlrparser/test/test_interpreter.py +583 -0
- duan-1.7.0/antlrparser/test/test_list_dict.py +161 -0
- duan-1.7.0/antlrparser/test/test_module.py +280 -0
- duan-1.7.0/antlrparser/test/test_oop_comprehensive.py +51 -0
- duan-1.7.0/antlrparser/test/test_oop_features.py +57 -0
- duan-1.7.0/antlrparser/test/test_parse_tree.py +25 -0
- duan-1.7.0/antlrparser/test/test_parser.py +186 -0
- duan-1.7.0/antlrparser/test/test_parser_debug.py +45 -0
- duan-1.7.0/antlrparser/test/test_simple_oop.py +37 -0
- duan-1.7.0/antlrparser/test/test_src_features.py +53 -0
- duan-1.7.0/antlrparser/test/test_tokenizer.py +30 -0
- duan-1.7.0/antlrparser/test/test_tokenizer2.py +32 -0
- duan-1.7.0/antlrparser/test/test_tokenizer_new.py +16 -0
- duan-1.7.0/antlrparser/test/test_types.py +513 -0
- duan-1.7.0/antlrparser/test_list_len.duan +33 -0
- duan-1.7.0/antlrparser/test_oop.duan +50 -0
- duan-1.7.0/antlrparser/test_oop_full.duan +38 -0
- duan-1.7.0/antlrparser/test_program.duan +46 -0
- duan-1.7.0/antlrparser/test_program_simple.duan +21 -0
- duan-1.7.0/antlrparser/test_program_simple2.duan +28 -0
- duan-1.7.0/antlrparser/test_stdlib.duan +49 -0
- duan-1.7.0/antlrparser/test_stdlib2.duan +50 -0
- duan-1.7.0/antlrparser/visitor_decl.py +684 -0
- duan-1.7.0/antlrparser/visitor_expr.py +830 -0
- duan-1.7.0/antlrparser/visitor_stmt.py +369 -0
- duan-1.7.0/antlrparser/web_playground/_test_examples.py +26 -0
- duan-1.7.0/antlrparser/web_playground/server.py +421 -0
- duan-1.7.0/antlrparser/web_playground/test_api.py +29 -0
- duan-1.7.0/cli/__init__.py +11 -0
- duan-1.7.0/cli/duan.py +540 -0
- duan-1.7.0/cli/duan_unified.py +406 -0
- duan-1.7.0/cli/duanc.py +315 -0
- duan-1.7.0/duan.egg-info/PKG-INFO +301 -0
- duan-1.7.0/duan.egg-info/SOURCES.txt +280 -0
- duan-1.7.0/duan.egg-info/dependency_links.txt +1 -0
- duan-1.7.0/duan.egg-info/entry_points.txt +3 -0
- duan-1.7.0/duan.egg-info/requires.txt +19 -0
- duan-1.7.0/duan.egg-info/top_level.txt +4 -0
- duan-1.7.0/pyproject.toml +120 -0
- duan-1.7.0/setup.cfg +4 -0
- duan-1.7.0/src/__init__.py +16 -0
- duan-1.7.0/src/arity_parser.py +297 -0
- duan-1.7.0/src/ast_nodes.py +640 -0
- duan-1.7.0/src/ast_nodes_v3.py +634 -0
- duan-1.7.0/src/ast_unified.py +501 -0
- duan-1.7.0/src/class_parser.py +306 -0
- duan-1.7.0/src/code_generator.py +1352 -0
- duan-1.7.0/src/code_generator_unified.py +1300 -0
- duan-1.7.0/src/codegen_x64.py +559 -0
- duan-1.7.0/src/compiler.py +1106 -0
- duan-1.7.0/src/core/__init__.py +27 -0
- duan-1.7.0/src/core/config.py +129 -0
- duan-1.7.0/src/core/errors.py +167 -0
- duan-1.7.0/src/core/interfaces.py +149 -0
- duan-1.7.0/src/duan_parser_v3.py +115 -0
- duan-1.7.0/src/duan_parser_v3_debug.py +1082 -0
- duan-1.7.0/src/error_formatter.py +291 -0
- duan-1.7.0/src/errors.py +177 -0
- duan-1.7.0/src/ir.py +674 -0
- duan-1.7.0/src/keywords.py +395 -0
- duan-1.7.0/src/lexer.py +1250 -0
- duan-1.7.0/src/linker.py +497 -0
- duan-1.7.0/src/llvm/__init__.py +25 -0
- duan-1.7.0/src/llvm/codegen.py +954 -0
- duan-1.7.0/src/llvm/codegen_typed.py +2973 -0
- duan-1.7.0/src/llvm/compiler.py +650 -0
- duan-1.7.0/src/llvm/core.py +258 -0
- duan-1.7.0/src/llvm/runtime.c +413 -0
- duan-1.7.0/src/llvm/runtime_typed.c +4827 -0
- duan-1.7.0/src/llvm/web_playground/server.py +530 -0
- duan-1.7.0/src/module_resolver.py +987 -0
- duan-1.7.0/src/optimizer/__init__.py +17 -0
- duan-1.7.0/src/optimizer/base.py +15 -0
- duan-1.7.0/src/optimizer/constant_fold.py +163 -0
- duan-1.7.0/src/optimizer/cse.py +255 -0
- duan-1.7.0/src/optimizer/dead_code.py +156 -0
- duan-1.7.0/src/optimizer/inline.py +279 -0
- duan-1.7.0/src/optimizer/loop_invariant.py +145 -0
- duan-1.7.0/src/optimizer/peephole.py +174 -0
- duan-1.7.0/src/package_manager.py +554 -0
- duan-1.7.0/src/parser_core.py +158 -0
- duan-1.7.0/src/parser_expr.py +1170 -0
- duan-1.7.0/src/parser_stmt.py +2500 -0
- duan-1.7.0/src/repl/__init__.py +12 -0
- duan-1.7.0/src/repl/commands.py +218 -0
- duan-1.7.0/src/repl/completer.py +129 -0
- duan-1.7.0/src/repl/core.py +229 -0
- duan-1.7.0/src/repl/executor.py +371 -0
- duan-1.7.0/src/repl/highlighter.py +188 -0
- duan-1.7.0/src/semantic_analyzer.py +363 -0
- duan-1.7.0/src/semantic_identifier.py +208 -0
- duan-1.7.0/src/test_exception_output.py +68 -0
- duan-1.7.0/src/test_llvm_exception.py +147 -0
- duan-1.7.0/src/test_output.py +38 -0
- duan-1.7.0/src/tokens.py +78 -0
- duan-1.7.0/src/type_inferencer.py +1762 -0
- duan-1.7.0/src/type_system.py +1252 -0
- duan-1.7.0/src/verb_info.py +217 -0
- duan-1.7.0/stdlib/CSV.duan +7 -0
- duan-1.7.0/stdlib/CSV.py +69 -0
- duan-1.7.0/stdlib/JSON.duan +7 -0
- duan-1.7.0/stdlib/JSON.py +104 -0
- duan-1.7.0/stdlib/JSONCSV.duan +8 -0
- duan-1.7.0/stdlib/JSONCSV.py +53 -0
- duan-1.7.0/stdlib/__init__.py +88 -0
- duan-1.7.0/stdlib/builtins.py +887 -0
- duan-1.7.0/stdlib//345/221/275/344/273/244/350/241/214/345/217/202/346/225/260.duan +6 -0
- duan-1.7.0/stdlib//345/221/275/344/273/244/350/241/214/345/217/202/346/225/260.py +41 -0
- duan-1.7.0/stdlib//345/223/210/345/270/214.duan +9 -0
- duan-1.7.0/stdlib//345/223/210/345/270/214.py +153 -0
- duan-1.7.0/stdlib//345/255/227/347/254/246/344/270/262/345/244/204/347/220/206.duan +10 -0
- duan-1.7.0/stdlib//345/255/227/347/254/246/344/270/262/345/244/204/347/220/206.py +93 -0
- duan-1.7.0/stdlib//346/225/260/345/255/246.duan +17 -0
- duan-1.7.0/stdlib//346/225/260/345/255/246.py +325 -0
- duan-1.7.0/stdlib//346/225/260/345/255/246/345/267/245/345/205/267.duan +24 -0
- duan-1.7.0/stdlib//346/225/260/345/255/246/345/267/245/345/205/267.py +42 -0
- duan-1.7.0/stdlib//346/226/207/344/273/266/347/263/273/347/273/237.duan +10 -0
- duan-1.7.0/stdlib//346/226/207/344/273/266/347/263/273/347/273/237.py +93 -0
- duan-1.7.0/stdlib//346/227/245/345/277/227.duan +7 -0
- duan-1.7.0/stdlib//346/227/245/345/277/227.py +108 -0
- duan-1.7.0/stdlib//346/227/245/346/234/237/346/227/266/351/227/264.duan +9 -0
- duan-1.7.0/stdlib//346/227/245/346/234/237/346/227/266/351/227/264.py +219 -0
- duan-1.7.0/stdlib//346/227/266/351/227/264.duan +14 -0
- duan-1.7.0/stdlib//346/227/266/351/227/264.py +266 -0
- duan-1.7.0/stdlib//346/255/243/345/210/231.duan +8 -0
- duan-1.7.0/stdlib//346/255/243/345/210/231.py +129 -0
- duan-1.7.0/stdlib//347/263/273/347/273/237/344/277/241/346/201/257.duan +9 -0
- duan-1.7.0/stdlib//347/263/273/347/273/237/344/277/241/346/201/257.py +73 -0
- duan-1.7.0/stdlib//347/273/210/347/253/257/351/242/234/350/211/262.duan +8 -0
- duan-1.7.0/stdlib//347/273/210/347/253/257/351/242/234/350/211/262.py +141 -0
- duan-1.7.0/stdlib//347/274/223/345/255/230.duan +7 -0
- duan-1.7.0/stdlib//347/274/223/345/255/230.py +143 -0
- duan-1.7.0/stdlib//347/274/226/347/240/201.duan +9 -0
- duan-1.7.0/stdlib//347/274/226/347/240/201.py +174 -0
- duan-1.7.0/stdlib//347/275/221/347/273/234HTTP.duan +8 -0
- duan-1.7.0/stdlib//347/275/221/347/273/234HTTP.py +53 -0
- duan-1.7.0/stdlib//350/241/250/346/240/274.duan +7 -0
- duan-1.7.0/stdlib//350/241/250/346/240/274.py +111 -0
- duan-1.7.0/stdlib//350/277/233/345/210/266/350/275/254/346/215/242.duan +8 -0
- duan-1.7.0/stdlib//350/277/233/345/210/266/350/275/254/346/215/242.py +166 -0
- duan-1.7.0/stdlib//350/277/255/344/273/243/345/267/245/345/205/267.duan +9 -0
- duan-1.7.0/stdlib//350/277/255/344/273/243/345/267/245/345/205/267.py +265 -0
- duan-1.7.0/stdlib//351/205/215/347/275/256.duan +8 -0
- duan-1.7.0/stdlib//351/205/215/347/275/256.py +50 -0
- duan-1.7.0/stdlib//351/232/217/346/234/272/346/225/260/346/215/256.duan +7 -0
- duan-1.7.0/stdlib//351/232/217/346/234/272/346/225/260/346/215/256.py +176 -0
- duan-1.7.0/stdlib//351/233/206/345/220/210/346/223/215/344/275/234.duan +8 -0
- duan-1.7.0/stdlib//351/233/206/345/220/210/346/223/215/344/275/234.py +99 -0
- duan-1.7.0/tests/test_advanced_semantic.py +230 -0
- duan-1.7.0/tests/test_async.py +411 -0
- duan-1.7.0/tests/test_class_advanced.py +54 -0
- duan-1.7.0/tests/test_class_definition.py +114 -0
- duan-1.7.0/tests/test_codegen.py +259 -0
- duan-1.7.0/tests/test_commands.py +87 -0
- duan-1.7.0/tests/test_comprehensive.py +151 -0
- duan-1.7.0/tests/test_comprehensive_v2.py +78 -0
- duan-1.7.0/tests/test_duan_stdlib.py +60 -0
- duan-1.7.0/tests/test_duan_stdlib2.py +54 -0
- duan-1.7.0/tests/test_duan_syntax.py +96 -0
- duan-1.7.0/tests/test_e2e.py +259 -0
- duan-1.7.0/tests/test_edge_cases.py +780 -0
- duan-1.7.0/tests/test_exception.py +174 -0
- duan-1.7.0/tests/test_executor.py +208 -0
- duan-1.7.0/tests/test_file_io.py +315 -0
- duan-1.7.0/tests/test_interface.py +94 -0
- duan-1.7.0/tests/test_json_import.py +41 -0
- duan-1.7.0/tests/test_lexer.py +268 -0
- duan-1.7.0/tests/test_lsp_protocol.py +110 -0
- duan-1.7.0/tests/test_lsp_protocol_full.py +240 -0
- duan-1.7.0/tests/test_modern_features.py +190 -0
- duan-1.7.0/tests/test_module_resolver.py +298 -0
- duan-1.7.0/tests/test_module_system.py +364 -0
- duan-1.7.0/tests/test_parser.py +317 -0
- duan-1.7.0/tests/test_semantic.py +175 -0
- duan-1.7.0/tests/test_stdio_standalone.py +49 -0
- duan-1.7.0/tests/test_summary.py +64 -0
- duan-1.7.0/tests/test_ternary.py +62 -0
- duan-1.7.0/tests/test_ternary_antlr.py +64 -0
duan-1.7.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 Dumate
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
duan-1.7.0/PKG-INFO
ADDED
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: duan
|
|
3
|
+
Version: 1.7.0
|
|
4
|
+
Summary: 段言(Duan)— 中文自然语言编程语言
|
|
5
|
+
Author: Duan Contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/skywalk163/duan
|
|
8
|
+
Project-URL: Source, https://github.com/skywalk163/duan
|
|
9
|
+
Project-URL: BugTracker, https://github.com/skywalk163/duan/issues
|
|
10
|
+
Project-URL: Documentation, https://github.com/skywalk163/duan/tree/main/docs
|
|
11
|
+
Keywords: programming-language,chinese,nlp,compiler,hm-inference,null-safety,module-system
|
|
12
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Education
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
22
|
+
Classifier: Topic :: Text Processing :: Linguistic
|
|
23
|
+
Classifier: Topic :: Education
|
|
24
|
+
Requires-Python: >=3.10
|
|
25
|
+
Description-Content-Type: text/markdown
|
|
26
|
+
License-File: LICENSE
|
|
27
|
+
Requires-Dist: antlr4-python3-runtime>=4.13
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
31
|
+
Requires-Dist: flake8>=6.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: black>=23.0.0; extra == "dev"
|
|
33
|
+
Requires-Dist: isort>=5.12.0; extra == "dev"
|
|
34
|
+
Requires-Dist: mypy>=1.0.0; extra == "dev"
|
|
35
|
+
Requires-Dist: autopep8>=2.0.0; extra == "dev"
|
|
36
|
+
Provides-Extra: llvm
|
|
37
|
+
Provides-Extra: repl
|
|
38
|
+
Requires-Dist: prompt-toolkit>=3.0.0; extra == "repl"
|
|
39
|
+
Provides-Extra: docs
|
|
40
|
+
Requires-Dist: sphinx>=7.0.0; extra == "docs"
|
|
41
|
+
Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "docs"
|
|
42
|
+
Dynamic: license-file
|
|
43
|
+
|
|
44
|
+
# 段言(DuanLang)编程语言
|
|
45
|
+
|
|
46
|
+
**段言**是一门基于中文的现代化编程语言,采用中文关键字,让编程更加直观易懂。
|
|
47
|
+
|
|
48
|
+
## 特性
|
|
49
|
+
|
|
50
|
+
- **中文关键字**:使用中文关键字如`遍历`、`如果`、`那么`等
|
|
51
|
+
- **纯缩进语法**:v3.x 中文关键字,类似 Python 的缩进风格,无"结束"关键字
|
|
52
|
+
- **统一编译器**:手写递归下降解析器 + Python 代码生成
|
|
53
|
+
- **LLVM 后端**:支持原生编译为 EXE,typed 模式性能优异,跨平台支持 Windows/Linux
|
|
54
|
+
- **标准库**:23 个中文命名模块(日志、表格、CSV、JSON 等)
|
|
55
|
+
- **泛型系统**:泛型函数、泛型类、泛型方法
|
|
56
|
+
- **模块系统**:导入/导出、包管理、跨模块继承
|
|
57
|
+
- **类与对象**:完整面向对象编程,支持继承、构造函数、运算符重载、类方法/静态方法
|
|
58
|
+
- **异常处理**:完整 try-catch-finally,自定义异常类、多重捕获、栈追踪、异常链
|
|
59
|
+
- **字典类型**:内置字典/映射类型,支持键值对操作
|
|
60
|
+
- **列表优化**:动态数组实现,O(1) 随机访问和均摊 O(1) 追加性能
|
|
61
|
+
- **可空类型**:null 安全检查、空合并、安全获取
|
|
62
|
+
- **开发工具链**:REPL、调试器、LSP 语言服务器、VS Code 插件
|
|
63
|
+
- **性能优化**:常量折叠、死代码消除、循环不变量外提
|
|
64
|
+
|
|
65
|
+
## 安装
|
|
66
|
+
|
|
67
|
+
> **注意**:PyPI 包 `pip install duan` 暂未上线,请使用源码安装方式。
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# 从源码安装(当前推荐方式)
|
|
71
|
+
git clone https://github.com/skywalk163/duan.git
|
|
72
|
+
cd duan
|
|
73
|
+
pip install -e .
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
安装后即可使用 `duan` 命令:
|
|
77
|
+
```bash
|
|
78
|
+
duan --version
|
|
79
|
+
duan --help
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## 快速开始
|
|
83
|
+
|
|
84
|
+
### 3 步跑起来
|
|
85
|
+
|
|
86
|
+
**第1步:安装**
|
|
87
|
+
```bash
|
|
88
|
+
git clone https://github.com/skywalk163/duan.git
|
|
89
|
+
cd duan
|
|
90
|
+
pip install -e .
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**第2步:创建程序**
|
|
94
|
+
```段言
|
|
95
|
+
# hello.duan
|
|
96
|
+
打印 "你好,段言!"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
**第3步:运行**
|
|
100
|
+
```bash
|
|
101
|
+
duan run hello.duan
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Hello World
|
|
105
|
+
|
|
106
|
+
```段言
|
|
107
|
+
打印 "你好,世界!"
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 变量和函数
|
|
111
|
+
|
|
112
|
+
```段言
|
|
113
|
+
段落 加一 接收 数:
|
|
114
|
+
返回 数 加 1
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 条件语句
|
|
118
|
+
|
|
119
|
+
```段言
|
|
120
|
+
如果 年龄 大于 18 那么:
|
|
121
|
+
打印 "成年人"
|
|
122
|
+
否则:
|
|
123
|
+
打印 "未成年人"
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### 循环
|
|
127
|
+
|
|
128
|
+
```段言
|
|
129
|
+
遍历 项 在 列表:
|
|
130
|
+
打印 项
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## 编译运行
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# 解释执行(推荐)
|
|
137
|
+
duan run hello.duan
|
|
138
|
+
|
|
139
|
+
# 编译为 Python 文件
|
|
140
|
+
duan compile hello.duan -o hello.py
|
|
141
|
+
|
|
142
|
+
# 编译为 Windows EXE(需安装 pyinstaller)
|
|
143
|
+
pip install pyinstaller
|
|
144
|
+
duan compile hello.duan -o hello.exe
|
|
145
|
+
|
|
146
|
+
# LLVM 原生编译(需安装 clang/LLVM)
|
|
147
|
+
duan compile hello.duan --backend llvm-typed -o hello.exe
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
后端选择:
|
|
151
|
+
```bash
|
|
152
|
+
# SRC 后端(3.x 纯缩进语法,推荐,Python 解释执行)
|
|
153
|
+
duan run hello.duan --backend src
|
|
154
|
+
|
|
155
|
+
# ANTLR 后端(兼容模式,支持 v3 纯缩进语法)
|
|
156
|
+
duan run hello.duan --backend antlr
|
|
157
|
+
|
|
158
|
+
# LLVM string 模式(原生编译,字符串类型系统)
|
|
159
|
+
duan compile hello.duan --backend llvm -o hello.exe
|
|
160
|
+
|
|
161
|
+
# LLVM typed 模式(原生编译,DuanValue 类型系统,推荐)
|
|
162
|
+
duan compile hello.duan --backend llvm-typed -o hello.exe
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## 项目结构
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
duan/
|
|
169
|
+
├── src/ # 核心编译器
|
|
170
|
+
│ ├── lexer.py # 词法分析器
|
|
171
|
+
│ ├── parser_stmt.py # 语法分析器
|
|
172
|
+
│ ├── ast_nodes.py # AST 节点定义
|
|
173
|
+
│ ├── compiler.py # 编译器主体
|
|
174
|
+
│ ├── llvm/ # LLVM 后端
|
|
175
|
+
│ │ ├── codegen.py # LLVM 代码生成(string 模式)
|
|
176
|
+
│ │ ├── codegen_typed.py # LLVM 代码生成(typed 模式)
|
|
177
|
+
│ │ ├── runtime_typed.c # typed 模式运行时库
|
|
178
|
+
│ │ ├── compiler.py # LLVM 编译入口
|
|
179
|
+
│ │ └── core.py # 代码生成核心
|
|
180
|
+
│ ├── optimizer/ # 代码优化器(常量折叠、死代码消除等)
|
|
181
|
+
│ └── ...
|
|
182
|
+
├── cli/ # 命令行工具
|
|
183
|
+
│ └── duan.py # CLI 入口
|
|
184
|
+
├── stdlib/ # 标准库(23 个模块)
|
|
185
|
+
│ ├── 日志.duan/py
|
|
186
|
+
│ ├── 表格.duan/py
|
|
187
|
+
│ ├── JSON.duan/py
|
|
188
|
+
│ └── ...
|
|
189
|
+
├── antlrparser/ # ANTLR 后端
|
|
190
|
+
│ ├── indent_preprocessor.py # v3 缩进语法预处理
|
|
191
|
+
│ └── ...
|
|
192
|
+
├── lsp/ # LSP 语言服务器
|
|
193
|
+
├── benchmarks/ # 性能基准测试
|
|
194
|
+
├── examples/ # 示例程序
|
|
195
|
+
├── tests/ # 测试(unit / integration / e2e)
|
|
196
|
+
└── docs/ # 文档
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## 编译器架构
|
|
200
|
+
|
|
201
|
+
| 组件 | 说明 |
|
|
202
|
+
|------|------|
|
|
203
|
+
| 词法分析 | 手写词法分析器,支持 Unicode 中文关键字 |
|
|
204
|
+
| 语法分析 | 递归下降解析器,v3.x 纯缩进语法 |
|
|
205
|
+
| 类型检查 | Hindley-Milner 全局类型推断 |
|
|
206
|
+
| 代码生成(Python) | Python 代码生成(类型擦除策略) |
|
|
207
|
+
| 代码生成(LLVM) | LLVM IR 生成,DuanValue 类型化后端 |
|
|
208
|
+
| 运行时(C) | typed 模式运行时库,提供基础操作实现 |
|
|
209
|
+
| 优化器 | 常量折叠、死代码消除、循环不变量外提 |
|
|
210
|
+
|
|
211
|
+
## 语法参考(v3.1)
|
|
212
|
+
|
|
213
|
+
> 当前版本语法:纯缩进式 + 句号可选
|
|
214
|
+
|
|
215
|
+
| 段言 | 说明 |
|
|
216
|
+
|------|------|
|
|
217
|
+
| `设 X 为 Y`(推荐) / `X 等于 Y` / `定义 X 等于 Y` | 变量声明 |
|
|
218
|
+
| `段落 名 接收 参数:`(`段落`可简写为`段`) | 函数定义 |
|
|
219
|
+
| `如果 条件 那么:` | 条件语句 |
|
|
220
|
+
| `遍历 X 在 列表:` | 遍历循环 |
|
|
221
|
+
| `当 条件:` | 当循环 |
|
|
222
|
+
| `返回 X` | 返回值 |
|
|
223
|
+
| `打印 X` | 打印输出 |
|
|
224
|
+
| `类 名称:` | 类定义 |
|
|
225
|
+
| `类 子类 继承 父类:` | 类继承 |
|
|
226
|
+
| `属性 名称` | 类属性声明 |
|
|
227
|
+
| `构造 接收 参数:` | 构造函数 |
|
|
228
|
+
| `己属性名` | 访问自身属性(对应 self.属性名) |
|
|
229
|
+
| `父构造(参数)` | 调用父类构造函数(对应 super().__init__()) |
|
|
230
|
+
| `新建 类名(参数)` | 实例化对象 |
|
|
231
|
+
| `从 模块 导入 符号` | 从模块导入 |
|
|
232
|
+
| `导入 模块` | 导入整个模块 |
|
|
233
|
+
| `导出 符号列表` | 导出符号 |
|
|
234
|
+
| `尝试:... 捕获 错误 为 e:... 最终:...` | 异常处理 |
|
|
235
|
+
| `抛出 异常类型(消息)` | 抛出异常 |
|
|
236
|
+
|
|
237
|
+
### 类示例
|
|
238
|
+
|
|
239
|
+
```段言
|
|
240
|
+
类 动物:
|
|
241
|
+
属性 名字
|
|
242
|
+
构造 接收 名字:
|
|
243
|
+
己名字 为 名字
|
|
244
|
+
段落 介绍:
|
|
245
|
+
打印 "我叫" 加 己名字
|
|
246
|
+
|
|
247
|
+
类 狗 继承 动物:
|
|
248
|
+
段落 叫声:
|
|
249
|
+
打印 "汪汪汪"
|
|
250
|
+
|
|
251
|
+
设 小狗 为 新建 狗("旺财")
|
|
252
|
+
小狗.介绍()
|
|
253
|
+
小狗.叫声()
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### 模块示例
|
|
257
|
+
|
|
258
|
+
```段言
|
|
259
|
+
// math_utils.duan
|
|
260
|
+
段落 加法 接收 a, b:
|
|
261
|
+
返回 a 加 b
|
|
262
|
+
导出 加法
|
|
263
|
+
|
|
264
|
+
// main.duan
|
|
265
|
+
从 math_utils 导入 加法
|
|
266
|
+
打印 加法(3, 5)
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## 文档导航
|
|
270
|
+
|
|
271
|
+
> **新手从哪开始读?** 推荐顺序:[快速开始](docs/getting-started.md) → [用户手册](docs/USER_MANUAL.md) → [语法参考](docs/syntax.md) → [统一语法规范](docs/统一语法规范_v3.1.md)
|
|
272
|
+
|
|
273
|
+
| 文档 | 适用人群 | 内容简介 |
|
|
274
|
+
|------|---------|---------|
|
|
275
|
+
| [快速开始](docs/getting-started.md) | 新手 | 安装、第一个程序、常用命令 |
|
|
276
|
+
| [用户手册](docs/USER_MANUAL.md) | 所有用户 | 完整语法教程 + 示例 + FAQ,系统学习段言 |
|
|
277
|
+
| [语法参考](docs/syntax.md) | 所有用户 | 简洁的语法速查表,快速查阅 |
|
|
278
|
+
| [统一语法规范 v3.1](docs/统一语法规范_v3.1.md) | 高级用户/贡献者 | 最权威、最完整的语法规范,含迁移对比表 |
|
|
279
|
+
| [标准库](docs/stdlib.md) | 所有用户 | 23 个标准库模块说明 |
|
|
280
|
+
| [API 参考](docs/API_REFERENCE.md) | 高级用户 | Python API 接口文档 |
|
|
281
|
+
| [工具链](docs/tools.md) | 开发者 | CLI、调试器、LSP 等工具说明 |
|
|
282
|
+
| [架构设计](docs/architecture.md) | 贡献者 | 编译器架构说明 |
|
|
283
|
+
| [开发指南](docs/DEVELOPMENT_GUIDE.md) | 贡献者 | 开发规范和流程 |
|
|
284
|
+
|
|
285
|
+
更多文档请查看 [docs/ 目录](docs/index.md)
|
|
286
|
+
|
|
287
|
+
## 开发
|
|
288
|
+
|
|
289
|
+
### 运行测试
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
python -m pytest tests/
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
### 代码格式
|
|
296
|
+
|
|
297
|
+
项目使用中文注释和 UTF-8 编码。
|
|
298
|
+
|
|
299
|
+
## 许可证
|
|
300
|
+
|
|
301
|
+
本项目采用 MIT 许可证。
|
duan-1.7.0/README.md
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# 段言(DuanLang)编程语言
|
|
2
|
+
|
|
3
|
+
**段言**是一门基于中文的现代化编程语言,采用中文关键字,让编程更加直观易懂。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- **中文关键字**:使用中文关键字如`遍历`、`如果`、`那么`等
|
|
8
|
+
- **纯缩进语法**:v3.x 中文关键字,类似 Python 的缩进风格,无"结束"关键字
|
|
9
|
+
- **统一编译器**:手写递归下降解析器 + Python 代码生成
|
|
10
|
+
- **LLVM 后端**:支持原生编译为 EXE,typed 模式性能优异,跨平台支持 Windows/Linux
|
|
11
|
+
- **标准库**:23 个中文命名模块(日志、表格、CSV、JSON 等)
|
|
12
|
+
- **泛型系统**:泛型函数、泛型类、泛型方法
|
|
13
|
+
- **模块系统**:导入/导出、包管理、跨模块继承
|
|
14
|
+
- **类与对象**:完整面向对象编程,支持继承、构造函数、运算符重载、类方法/静态方法
|
|
15
|
+
- **异常处理**:完整 try-catch-finally,自定义异常类、多重捕获、栈追踪、异常链
|
|
16
|
+
- **字典类型**:内置字典/映射类型,支持键值对操作
|
|
17
|
+
- **列表优化**:动态数组实现,O(1) 随机访问和均摊 O(1) 追加性能
|
|
18
|
+
- **可空类型**:null 安全检查、空合并、安全获取
|
|
19
|
+
- **开发工具链**:REPL、调试器、LSP 语言服务器、VS Code 插件
|
|
20
|
+
- **性能优化**:常量折叠、死代码消除、循环不变量外提
|
|
21
|
+
|
|
22
|
+
## 安装
|
|
23
|
+
|
|
24
|
+
> **注意**:PyPI 包 `pip install duan` 暂未上线,请使用源码安装方式。
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# 从源码安装(当前推荐方式)
|
|
28
|
+
git clone https://github.com/skywalk163/duan.git
|
|
29
|
+
cd duan
|
|
30
|
+
pip install -e .
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
安装后即可使用 `duan` 命令:
|
|
34
|
+
```bash
|
|
35
|
+
duan --version
|
|
36
|
+
duan --help
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 快速开始
|
|
40
|
+
|
|
41
|
+
### 3 步跑起来
|
|
42
|
+
|
|
43
|
+
**第1步:安装**
|
|
44
|
+
```bash
|
|
45
|
+
git clone https://github.com/skywalk163/duan.git
|
|
46
|
+
cd duan
|
|
47
|
+
pip install -e .
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**第2步:创建程序**
|
|
51
|
+
```段言
|
|
52
|
+
# hello.duan
|
|
53
|
+
打印 "你好,段言!"
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**第3步:运行**
|
|
57
|
+
```bash
|
|
58
|
+
duan run hello.duan
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Hello World
|
|
62
|
+
|
|
63
|
+
```段言
|
|
64
|
+
打印 "你好,世界!"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### 变量和函数
|
|
68
|
+
|
|
69
|
+
```段言
|
|
70
|
+
段落 加一 接收 数:
|
|
71
|
+
返回 数 加 1
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 条件语句
|
|
75
|
+
|
|
76
|
+
```段言
|
|
77
|
+
如果 年龄 大于 18 那么:
|
|
78
|
+
打印 "成年人"
|
|
79
|
+
否则:
|
|
80
|
+
打印 "未成年人"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 循环
|
|
84
|
+
|
|
85
|
+
```段言
|
|
86
|
+
遍历 项 在 列表:
|
|
87
|
+
打印 项
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 编译运行
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# 解释执行(推荐)
|
|
94
|
+
duan run hello.duan
|
|
95
|
+
|
|
96
|
+
# 编译为 Python 文件
|
|
97
|
+
duan compile hello.duan -o hello.py
|
|
98
|
+
|
|
99
|
+
# 编译为 Windows EXE(需安装 pyinstaller)
|
|
100
|
+
pip install pyinstaller
|
|
101
|
+
duan compile hello.duan -o hello.exe
|
|
102
|
+
|
|
103
|
+
# LLVM 原生编译(需安装 clang/LLVM)
|
|
104
|
+
duan compile hello.duan --backend llvm-typed -o hello.exe
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
后端选择:
|
|
108
|
+
```bash
|
|
109
|
+
# SRC 后端(3.x 纯缩进语法,推荐,Python 解释执行)
|
|
110
|
+
duan run hello.duan --backend src
|
|
111
|
+
|
|
112
|
+
# ANTLR 后端(兼容模式,支持 v3 纯缩进语法)
|
|
113
|
+
duan run hello.duan --backend antlr
|
|
114
|
+
|
|
115
|
+
# LLVM string 模式(原生编译,字符串类型系统)
|
|
116
|
+
duan compile hello.duan --backend llvm -o hello.exe
|
|
117
|
+
|
|
118
|
+
# LLVM typed 模式(原生编译,DuanValue 类型系统,推荐)
|
|
119
|
+
duan compile hello.duan --backend llvm-typed -o hello.exe
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 项目结构
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
duan/
|
|
126
|
+
├── src/ # 核心编译器
|
|
127
|
+
│ ├── lexer.py # 词法分析器
|
|
128
|
+
│ ├── parser_stmt.py # 语法分析器
|
|
129
|
+
│ ├── ast_nodes.py # AST 节点定义
|
|
130
|
+
│ ├── compiler.py # 编译器主体
|
|
131
|
+
│ ├── llvm/ # LLVM 后端
|
|
132
|
+
│ │ ├── codegen.py # LLVM 代码生成(string 模式)
|
|
133
|
+
│ │ ├── codegen_typed.py # LLVM 代码生成(typed 模式)
|
|
134
|
+
│ │ ├── runtime_typed.c # typed 模式运行时库
|
|
135
|
+
│ │ ├── compiler.py # LLVM 编译入口
|
|
136
|
+
│ │ └── core.py # 代码生成核心
|
|
137
|
+
│ ├── optimizer/ # 代码优化器(常量折叠、死代码消除等)
|
|
138
|
+
│ └── ...
|
|
139
|
+
├── cli/ # 命令行工具
|
|
140
|
+
│ └── duan.py # CLI 入口
|
|
141
|
+
├── stdlib/ # 标准库(23 个模块)
|
|
142
|
+
│ ├── 日志.duan/py
|
|
143
|
+
│ ├── 表格.duan/py
|
|
144
|
+
│ ├── JSON.duan/py
|
|
145
|
+
│ └── ...
|
|
146
|
+
├── antlrparser/ # ANTLR 后端
|
|
147
|
+
│ ├── indent_preprocessor.py # v3 缩进语法预处理
|
|
148
|
+
│ └── ...
|
|
149
|
+
├── lsp/ # LSP 语言服务器
|
|
150
|
+
├── benchmarks/ # 性能基准测试
|
|
151
|
+
├── examples/ # 示例程序
|
|
152
|
+
├── tests/ # 测试(unit / integration / e2e)
|
|
153
|
+
└── docs/ # 文档
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## 编译器架构
|
|
157
|
+
|
|
158
|
+
| 组件 | 说明 |
|
|
159
|
+
|------|------|
|
|
160
|
+
| 词法分析 | 手写词法分析器,支持 Unicode 中文关键字 |
|
|
161
|
+
| 语法分析 | 递归下降解析器,v3.x 纯缩进语法 |
|
|
162
|
+
| 类型检查 | Hindley-Milner 全局类型推断 |
|
|
163
|
+
| 代码生成(Python) | Python 代码生成(类型擦除策略) |
|
|
164
|
+
| 代码生成(LLVM) | LLVM IR 生成,DuanValue 类型化后端 |
|
|
165
|
+
| 运行时(C) | typed 模式运行时库,提供基础操作实现 |
|
|
166
|
+
| 优化器 | 常量折叠、死代码消除、循环不变量外提 |
|
|
167
|
+
|
|
168
|
+
## 语法参考(v3.1)
|
|
169
|
+
|
|
170
|
+
> 当前版本语法:纯缩进式 + 句号可选
|
|
171
|
+
|
|
172
|
+
| 段言 | 说明 |
|
|
173
|
+
|------|------|
|
|
174
|
+
| `设 X 为 Y`(推荐) / `X 等于 Y` / `定义 X 等于 Y` | 变量声明 |
|
|
175
|
+
| `段落 名 接收 参数:`(`段落`可简写为`段`) | 函数定义 |
|
|
176
|
+
| `如果 条件 那么:` | 条件语句 |
|
|
177
|
+
| `遍历 X 在 列表:` | 遍历循环 |
|
|
178
|
+
| `当 条件:` | 当循环 |
|
|
179
|
+
| `返回 X` | 返回值 |
|
|
180
|
+
| `打印 X` | 打印输出 |
|
|
181
|
+
| `类 名称:` | 类定义 |
|
|
182
|
+
| `类 子类 继承 父类:` | 类继承 |
|
|
183
|
+
| `属性 名称` | 类属性声明 |
|
|
184
|
+
| `构造 接收 参数:` | 构造函数 |
|
|
185
|
+
| `己属性名` | 访问自身属性(对应 self.属性名) |
|
|
186
|
+
| `父构造(参数)` | 调用父类构造函数(对应 super().__init__()) |
|
|
187
|
+
| `新建 类名(参数)` | 实例化对象 |
|
|
188
|
+
| `从 模块 导入 符号` | 从模块导入 |
|
|
189
|
+
| `导入 模块` | 导入整个模块 |
|
|
190
|
+
| `导出 符号列表` | 导出符号 |
|
|
191
|
+
| `尝试:... 捕获 错误 为 e:... 最终:...` | 异常处理 |
|
|
192
|
+
| `抛出 异常类型(消息)` | 抛出异常 |
|
|
193
|
+
|
|
194
|
+
### 类示例
|
|
195
|
+
|
|
196
|
+
```段言
|
|
197
|
+
类 动物:
|
|
198
|
+
属性 名字
|
|
199
|
+
构造 接收 名字:
|
|
200
|
+
己名字 为 名字
|
|
201
|
+
段落 介绍:
|
|
202
|
+
打印 "我叫" 加 己名字
|
|
203
|
+
|
|
204
|
+
类 狗 继承 动物:
|
|
205
|
+
段落 叫声:
|
|
206
|
+
打印 "汪汪汪"
|
|
207
|
+
|
|
208
|
+
设 小狗 为 新建 狗("旺财")
|
|
209
|
+
小狗.介绍()
|
|
210
|
+
小狗.叫声()
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### 模块示例
|
|
214
|
+
|
|
215
|
+
```段言
|
|
216
|
+
// math_utils.duan
|
|
217
|
+
段落 加法 接收 a, b:
|
|
218
|
+
返回 a 加 b
|
|
219
|
+
导出 加法
|
|
220
|
+
|
|
221
|
+
// main.duan
|
|
222
|
+
从 math_utils 导入 加法
|
|
223
|
+
打印 加法(3, 5)
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## 文档导航
|
|
227
|
+
|
|
228
|
+
> **新手从哪开始读?** 推荐顺序:[快速开始](docs/getting-started.md) → [用户手册](docs/USER_MANUAL.md) → [语法参考](docs/syntax.md) → [统一语法规范](docs/统一语法规范_v3.1.md)
|
|
229
|
+
|
|
230
|
+
| 文档 | 适用人群 | 内容简介 |
|
|
231
|
+
|------|---------|---------|
|
|
232
|
+
| [快速开始](docs/getting-started.md) | 新手 | 安装、第一个程序、常用命令 |
|
|
233
|
+
| [用户手册](docs/USER_MANUAL.md) | 所有用户 | 完整语法教程 + 示例 + FAQ,系统学习段言 |
|
|
234
|
+
| [语法参考](docs/syntax.md) | 所有用户 | 简洁的语法速查表,快速查阅 |
|
|
235
|
+
| [统一语法规范 v3.1](docs/统一语法规范_v3.1.md) | 高级用户/贡献者 | 最权威、最完整的语法规范,含迁移对比表 |
|
|
236
|
+
| [标准库](docs/stdlib.md) | 所有用户 | 23 个标准库模块说明 |
|
|
237
|
+
| [API 参考](docs/API_REFERENCE.md) | 高级用户 | Python API 接口文档 |
|
|
238
|
+
| [工具链](docs/tools.md) | 开发者 | CLI、调试器、LSP 等工具说明 |
|
|
239
|
+
| [架构设计](docs/architecture.md) | 贡献者 | 编译器架构说明 |
|
|
240
|
+
| [开发指南](docs/DEVELOPMENT_GUIDE.md) | 贡献者 | 开发规范和流程 |
|
|
241
|
+
|
|
242
|
+
更多文档请查看 [docs/ 目录](docs/index.md)
|
|
243
|
+
|
|
244
|
+
## 开发
|
|
245
|
+
|
|
246
|
+
### 运行测试
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
python -m pytest tests/
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 代码格式
|
|
253
|
+
|
|
254
|
+
项目使用中文注释和 UTF-8 编码。
|
|
255
|
+
|
|
256
|
+
## 许可证
|
|
257
|
+
|
|
258
|
+
本项目采用 MIT 许可证。
|