v0.2: Pico-8 Lua dialect grammar and language
Reorganize into grammars/<name>/ subdirs ( Zed's [grammars.*] supports a `path` field, so both grammars ship from this repo without a sibling- repo split ). Vendor tree-sitter-lua as the fork base for tree-sitter- pico8-lua; upstream MIT license preserved at grammars/pico-8-lua/ UPSTREAM-LICENSE.md. Dialect features added: != as ~= alias, \ integer divide, ^^ binary xor, >>> / <<> / >>< shifts and rotates, compound-assignment statements, memory peek prefixes @ % $ (% coexists with binary modulo), single-line `if (cond) stmt [else stmt]` and `while (cond) stmt`, statement-level print shorthand ?, and `#include path` directives. Identifier rule no longer accepts ! ? @ $ ( upstream did ). Pico-8 Lua language ( languages/pico-8-lua/, suffix .p8lua ) ships highlights with the full ~110 PICO-8 builtins as @function.builtin. The cart injection now hands __lua__ bodies to pico-8-lua, so .p8 carts and bare .p8lua files share the dialect-aware grammar. Examples updated to exercise the dialect end-to-end. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -1,14 +1,24 @@
|
||||
pico-8 cartridge // http://www.pico-8.com
|
||||
version 42
|
||||
__lua__
|
||||
-- hello cartridge
|
||||
-- hello cartridge — exercises Pico-8 dialect features
|
||||
#include shared.p8lua
|
||||
|
||||
function _init()
|
||||
cls()
|
||||
t = 0
|
||||
end
|
||||
|
||||
function _update()
|
||||
t += 1
|
||||
if (btn(4)) sweep_palette()
|
||||
move()
|
||||
end
|
||||
|
||||
function _draw()
|
||||
cls(1)
|
||||
print("hello pico-8", 30, 60, 7)
|
||||
draw_blob()
|
||||
?"frame:"..t, 0, 120, 7
|
||||
end
|
||||
__gfx__
|
||||
00000000111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
-- shared.p8lua: included into hello.p8 via #include
|
||||
-- demonstrates Pico-8 dialect features outside a __lua__ section.
|
||||
|
||||
local x, y = 64, 64
|
||||
|
||||
function move()
|
||||
if (btn(0)) x-=1
|
||||
if (btn(1)) x+=1
|
||||
if (btn(2)) y-=1
|
||||
if (btn(3)) y+=1
|
||||
x = mid(0, x, 127)
|
||||
y = mid(0, y, 127)
|
||||
end
|
||||
|
||||
function draw_blob()
|
||||
cls(1)
|
||||
circfill(x, y, 5, 7)
|
||||
?"x="..x..",y="..y, 0, 0, 7
|
||||
end
|
||||
|
||||
-- peek/poke via prefix shorthands
|
||||
function sweep_palette()
|
||||
for i=0,15 do
|
||||
poke(0x5f10+i, %0x5f10 ^^ i)
|
||||
end
|
||||
end
|
||||
|
||||
-- single-line while with compound assignment body
|
||||
local i = 0
|
||||
while (i < 8) i += 1
|
||||
Reference in New Issue
Block a user