๐ ็บฏLuaๅฎ็ฐ็AST่งฃๆๅจ | ๐ค ๆฏๆ่ฏญๆณๆฉๅฑ | ๐ ไธญ่ฑๆๆๆกฃ
English | ไธญๆ | ๐ ๆๆกฃ | ๐ฎ ๅฟซ้ๅผๅง
ไธไธช็จ็บฏ Lua ๅฎ็ฐ็ๅฎๆด Lua ่งฃๆๅจ๏ผๆฏๆไป Lua ๆบ็ ๅฐ AST ็่ฝฌๆขใAST ๅฐ Lua ๆบ็ ็ๆๅฐ๏ผไปฅๅ AST ็่งฃ้ๆง่กใ
- ๐ฏ ๅฎๆด็่ฏๆณๅๆๅจ๏ผๆฏๆๆๆ Lua ๆ ่ฎฐ็ฑปๅ๏ผๅ ๆฌๅ ณ้ฎๅญใๆ ่ฏ็ฌฆใๅญ้ข้็ญ
- ๐ ้ๅฝไธ้่ฏญๆณๅๆๅจ๏ผๅฎ็ฐๅฎๆด็ Lua ่ฏญๆณ่งฃๆ๏ผๆฏๆ่กจ่พพๅผๅ่ฏญๅฅ
- ๐ณ AST ๆๅปบ๏ผๆๅปบ็ปๆๅ็ๆฝ่ฑก่ฏญๆณๆ ๏ผๆฏๆ่ฎฟ้ฎ่ ๆจกๅผ
- ๐จ๏ธ ไปฃ็ ๆๅฐๅจ๏ผๅฐ AST ่ฝฌๆขไธบๆ ผๅผๅ็ Lua ๆบ็
- โก AST ่งฃ้ๅจ๏ผ็บฏ Lua ๅฎ็ฐ็ AST ๆง่กๅผๆ๏ผๆฏๆๅคง้จๅ Lua ็นๆง
- ๐ ๆไปถ็ณป็ป๏ผๅฏๆฉๅฑ็ๆไปถๆถๆ๏ผๆฏๆ่ชๅฎไน่ฏญๆณๅๅ่ฝ
- ๐ฉบ ่ฏๆญ็ณป็ป๏ผๅฎๆด็้่ฏฏ่ฏๆญๅไฝ็ฝฎ่ฟฝ่ธช
- ๐งฐ ๅทฅๅ ทๅบ๏ผไธฐๅฏ็ๅญ็ฌฆไธฒใ่กจๆ ผใไฝ็ฝฎๅค็ๅทฅๅ ท
- ๐ฅ ้ถไพ่ต๏ผ็บฏLuaๅฎ็ฐ๏ผๆ ้ๅค้จไพ่ต
- ๐ ้ซๆง่ฝ๏ผไผๅ็่งฃๆ็ฎๆณ๏ผๆฏๆๅคงๅไปฃ็ ๆไปถ
- ๐จ ๆๆฉๅฑ๏ผๆไปถ็ณป็ป่ฎฉๅฎๅถๅๅพ็ฎๅๆ่ถฃ
- ๐ฑ ่ทจๅนณๅฐ๏ผๆฏๆๆๆLua่ฟ่ก็ฏๅข
lua/
โโโ ast/ # ๆฝ่ฑก่ฏญๆณๆ ๆจกๅ
โ โโโ init.lua # AST ไธปๅ
ฅๅฃๅๅทฅๅ
โ โโโ nodes.lua # AST ่็นๅฎไน
โ โโโ visitor.lua # ่ฎฟ้ฎ่
ๆจกๅผๅฎ็ฐ
โโโ interpreter/ # AST ่งฃ้ๅจ
โ โโโ init.lua # ่งฃ้ๅจไธปๅ
ฅๅฃ
โ โโโ builtins.lua # ๅ
็ฝฎๅฝๆฐๅฎ็ฐ
โโโ lexer/ # ่ฏๆณๅๆๅจ
โ โโโ init.lua # ่ฏๆณๅจไธปๅ
ฅๅฃ
โ โโโ scanner.lua # ๆซๆๅจๅฎ็ฐ
โ โโโ token.lua # Token ๅฎไน
โ โโโ keywords.lua # ๅ
ณ้ฎๅญๅฎไน
โโโ parser/ # ่ฏญๆณๅๆๅจ
โ โโโ init.lua # ่ฏญๆณๅจไธปๅ
ฅๅฃ
โ โโโ expressions.lua # ่กจ่พพๅผ่งฃๆ
โ โโโ statements.lua # ่ฏญๅฅ่งฃๆ
โ โโโ precedence.lua # ่ฟ็ฎ็ฌฆไผๅ
็บง
โโโ printer/ # ไปฃ็ ๆๅฐๅจ
โ โโโ init.lua # ๆๅฐๅจไธปๅ
ฅๅฃ
โ โโโ emitter.lua # ไปฃ็ ๅๅฐๅจ
โ โโโ formatter.lua # ๆ ผๅผๅๅจ
โโโ plugins/ # ๆไปถ็ณป็ป
โ โโโ example_plugins.lua # ็คบไพๆไปถ
โโโ utils/ # ๅทฅๅ
ทๅบ
โ โโโ diagnostics.lua # ่ฏๆญ็ณป็ป
โ โโโ position.lua # ไฝ็ฝฎๅค็
โ โโโ string_ext.lua # ๅญ็ฌฆไธฒๆฉๅฑ
โ โโโ table_ext.lua # ่กจๆ ผๆฉๅฑ
โโโ init.lua # ไธปๅ
ฅๅฃ
โโโ plugins.lua # ๆไปถ็ฎก็ๅจ
local luaparser = require("lua")
-- ๐ ่งฃๆ Lua ๆบ็ ไธบ AST
local success, result = luaparser.parse_lua("print('Hello, World!')")
if success then
local ast = result
print("โจ ่งฃๆๆๅ")
end
-- ๐จ๏ธ ๅฐ AST ่ฝฌๆขไธบ Lua ๆบ็
local success, result = luaparser.print_lua(ast)
if success then
local code = result.code
print(code) -- ่พๅบ: print('Hello, World!')
end
-- โก ่งฃ้ๆง่ก AST
local success, result = luaparser.interpret_lua(ast)
if success then
print("๐ฏ ๆง่ก็ปๆ:", result)
end
-- ๐จ ๆณจๅ่ชๅฎไนๆไปถ
local my_plugin = {
name = "my_plugin",
version = "1.0.0",
description = "My custom plugin",
init = function(config)
print("๐ Plugin initialized")
end,
extend_lexer = function(lexer)
-- ๐ค ๆฉๅฑ่ฏๆณๅจ
end,
extend_parser = function(parser)
-- ๐ ๆฉๅฑ่ฏญๆณๅจ
end
}
luaparser.register_plugin(my_plugin)
luaparser.load_plugin("my_plugin")
-- ๐ ่งฃๆๅนถๆง่กไธไธชๆ่ถฃ็่กจ่พพๅผ
local code = [[
local result = {}
for i = 1, 10 do
result[i] = i * i
end
return result
]]
local success, ast = luaparser.parse_lua(code)
if success then
local success, result = luaparser.interpret_lua(ast)
if success then
print("๐ฒ ่ฎก็ฎ็ปๆ:", table.concat(result, ", "))
end
end
๐ parse_lua(source, options)
- ่งฃๆ Lua ๆบ็ ไธบ AST๐จ๏ธ print_lua(ast, options)
- ๅฐ AST ่ฝฌๆขไธบ Lua ๆบ็ โก interpret_lua(ast, options)
- ่งฃ้ๆง่ก AST
๐๏ธ create_parser(config)
- ๅๅปบๆฐ็่งฃๆๅจๅฎไพ๐ create_plugin_manager()
- ๅๅปบๆไปถ็ฎก็ๅจ
โ register_plugin(plugin)
- ๆณจๅๆไปถ๐ฅ load_plugin(name, config)
- ๅ ่ฝฝๆไปถ๐ค unload_plugin(name)
- ๅธ่ฝฝๆไปถ๐ get_plugin(name)
- ่ทๅๆไปถๅฎไพ๐ get_registered_plugins()
- ่ทๅๅทฒๆณจๅๆไปถๅ่กจ
ๆฌข่ฟ่ดก็ฎไปฃ็ ๏ผ่ฏทๆฅ็ๆไปฌ็่ดก็ฎๆๅ๏ผ
- ๐ ๆฅๅ้ฎ้ข
- ๐ก ๆๅบๅปบ่ฎฎ
- ๐ง ๆไบคPR
- ๐ GitHubไธป้กต
- ๐ง ไฝ่ ไธป้กต
- ๐ฏ QQ: 1434436108 | 2707271920
- ๐ฌ WeChat: ofxfxc
ๆฌ้กน็ฎ้็จ MIT ่ฎธๅฏ่ฏ - ่ฏฆ่ง LICENSE ๆไปถ
A complete Lua parser implemented in pure Lua, supporting conversion from Lua source code to AST, AST to Lua source code printing, and AST interpretation execution.
- ๐ฏ Complete Lexer: Supports all Lua token types, including keywords, identifiers, literals, etc.
- ๐ Recursive Descent Parser: Implements complete Lua syntax parsing, supporting expressions and statements
- ๐ณ AST Construction: Builds structured abstract syntax trees, supports visitor pattern
- ๐จ๏ธ Code Printer: Converts AST to formatted Lua source code
- โก AST Interpreter: Pure Lua implementation of AST execution engine, supports most Lua features
- ๐ Plugin System: Extensible plugin architecture, supports custom syntax and functionality
- ๐ฉบ Diagnostics System: Complete error diagnostics and position tracking
- ๐งฐ Utility Library: Rich string, table, and position handling utilities
- ๐ฅ Zero Dependencies: Pure Lua implementation, no external dependencies required
- ๐ High Performance: Optimized parsing algorithms, supports large code files
- ๐จ Easy to Extend: Plugin system makes customization simple and fun
- ๐ฑ Cross-platform: Supports all Lua runtime environments
lua/
โโโ ast/ # Abstract Syntax Tree module
โ โโโ init.lua # AST main entry and factory
โ โโโ nodes.lua # AST node definitions
โ โโโ visitor.lua # Visitor pattern implementation
โโโ interpreter/ # AST Interpreter
โ โโโ init.lua # Interpreter main entry
โ โโโ builtins.lua # Built-in functions implementation
โโโ lexer/ # Lexical Analyzer
โ โโโ init.lua # Lexer main entry
โ โโโ scanner.lua # Scanner implementation
โ โโโ token.lua # Token definitions
โ โโโ keywords.lua # Keywords definitions
โโโ parser/ # Syntax Parser
โ โโโ init.lua # Parser main entry
โ โโโ expressions.lua # Expression parsing
โ โโโ statements.lua # Statement parsing
โ โโโ precedence.lua # Operator precedence
โโโ printer/ # Code Printer
โ โโโ init.lua # Printer main entry
โ โโโ emitter.lua # Code emitter
โ โโโ formatter.lua # Formatter
โโโ plugins/ # Plugin System
โ โโโ example_plugins.lua # Example plugins
โโโ utils/ # Utility Library
โ โโโ diagnostics.lua # Diagnostics system
โ โโโ position.lua # Position handling
โ โโโ string_ext.lua # String extensions
โ โโโ table_ext.lua # Table extensions
โโโ init.lua # Main entry
โโโ plugins.lua # Plugin manager
local luaparser = require("lua")
-- ๐ Parse Lua source code to AST
local success, result = luaparser.parse_lua("print('Hello, World!')")
if success then
local ast = result
print("โจ Parse successful")
end
-- ๐จ๏ธ Convert AST to Lua source code
local success, result = luaparser.print_lua(ast)
if success then
local code = result.code
print(code) -- Output: print('Hello, World!')
end
-- โก Interpret and execute AST
local success, result = luaparser.interpret_lua(ast)
if success then
print("๐ฏ Execution result:", result)
end
-- ๐จ Register custom plugin
local my_plugin = {
name = "my_plugin",
version = "1.0.0",
description = "My custom plugin",
init = function(config)
print("๐ Plugin initialized")
end,
extend_lexer = function(lexer)
-- ๐ค Extend lexer
end,
extend_parser = function(parser)
-- ๐ Extend parser
end
}
luaparser.register_plugin(my_plugin)
luaparser.load_plugin("my_plugin")
-- ๐ Parse and execute an interesting expression
local code = [[
local result = {}
for i = 1, 10 do
result[i] = i * i
end
return result
]]
local success, ast = luaparser.parse_lua(code)
if success then
local success, result = luaparser.interpret_lua(ast)
if success then
print("๐ฒ Calculation result:", table.concat(result, ", "))
end
end
๐ parse_lua(source, options)
- Parse Lua source code to AST๐จ๏ธ print_lua(ast, options)
- Convert AST to Lua source codeโก interpret_lua(ast, options)
- Interpret and execute AST
๐๏ธ create_parser(config)
- Create new parser instance๐ create_plugin_manager()
- Create plugin manager
โ register_plugin(plugin)
- Register plugin๐ฅ load_plugin(name, config)
- Load plugin๐ค unload_plugin(name)
- Unload plugin๐ get_plugin(name)
- Get plugin instance๐ get_registered_plugins()
- Get registered plugins list
Contributions are welcome! Check out our contribution guidelines:
- ๐ Report Issues
- ๐ก Suggest Features
- ๐ง Submit PRs
- ๐ GitHub Profile
- ๐ง Project Home
- ๐ฏ QQ: 1434436108 | 2707271920
- ๐ฌ WeChat: ofxfxc
This project is licensed under the MIT License - see the LICENSE file for details