gpt4 book ai didi

lua - 我的 Lua DSL 能用吗...? (这似乎太简单了,不可能是真的)

转载 作者:行者123 更新时间:2023-12-04 14:02:12 29 4
gpt4 key购买 nike

我真的很喜欢 Lua 但是,作为一种编程语言,我不得不为所有局部变量不断输入“local”,这让我难以置信。

它只会让我的代码看起来更困惑。

所以我想知道,我可以在 Lua 之上创建一个域特定语言 (DSL) 来简单地具有以下变量命名约定。

  • 如果一个变量名在所有大写字母中,那么它就是一个全局变量
  • 否则,变量是 local变量

  • 问题 :这行得通吗?是还是不是?

    换句话说:
    -- In Lua 5.2
    isGlobalinLua = "is global in default Lua"
    GLOBALVAR = "is global var in default Lua"
    local localvar = "is local var in default Lua"

    -- In my DSL Lua language
    isLocalinDSLLua = "is local in DSL Lua" -- translates to: local isLocalinDSLLua = ...
    GLOBALVAR = "is global DSL Lua"
    localvar = "is local var in DSL Lua" -- translates to: local localvar = ...

    所以现在,默认 Lua 中的以下代码:
    myglobal = 10
    local a = 1
    if a > 1 then
    local b = 2
    print b
    else
    local c = 3
    print c + myglobal
    end

    使用我的 DSL Lua:
    MYGLOBAL = 10
    a = 1
    if a > 1 then
    b = 2
    print b
    else
    c = 3
    print c + MYGLOBAL
    end

    更新 :

    本地函数呢?

    以下代码将如何工作?
    myfunc = function (...)   -- local myfunc = function (...)

    我不确定我是否想让所有全局函数都大写。

    也许我只是忽略函数并需要' local ' 标识符......想法?

    最佳答案

    由于您想要的更改相对简单,因此您基本上有两种选择。你可以试试Metalua :

    Metalua is a language and a compiler which provide ...

    • A complete macro system, similar in power to what's offfered by Lisp dialects or Template Haskell; manipulated programs can be seen as source code, as abstract syntax trees, or as an arbitrary mix thereof, whichever suits your task better.
    • A dynamically extensible parser, which lets you support your macros with a syntax that blends nicely with the rest of the language.


    或者您可以使用 token filters :

    The token filter works by giving you the opportunity to inspect and alter the stream of tokens coming from the lexer before they go to the parser. You get to see only tokens and you are only allowed to generate tokens -- you're not allowed to see the text coming to the lexer nor to generate text to go into the lexer.



    这两种方法各有优缺点。 Metalua 允许您在 Lua 中进行高级语言修改,但学习曲线更陡峭。 token 过滤器允许您对 token 流进行简单的修改,但功能有限(请参阅 2005 talk )。

    我不确定 token 过滤器是否适合您的情况,因为插入 local在赋值中每个以小写开头的标识符只适用于简单情况之前。下面的代码呢?
    a = 1
    a = a * a

    是否要将其转换为单个 local ,或者你想要两个?
    local a = 1     vs.    local a = 1
    a * a local a = a * a -- valid in Lua, creates a new variable

    关于lua - 我的 Lua DSL 能用吗...? (这似乎太简单了,不可能是真的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744732/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com