小编Mic*_*x2a的帖子

在ast中实现goto

背景:作为一个关于寒假的短期项目,我正在尝试使用Python和PLY实现一种名为Ax(专为图形计算器设计)的编程语言.简要说明:该语言仅允许全局变量并大量使用指针.

我正试图用这种语言实现goto,但不知道该怎么做.

我的一般方法是首先使用PLY将代码解析为ast,然后在我执行时执行它.

例如,声明

If 3
    Disp 4
    Disp 6
End
Run Code Online (Sandbox Code Playgroud)

......会变成......

['PROGRAM', 
  ['BLOCK', 
    ['IF', 
      ['CONDITION', 3], 
      ['BLOCK', 
        ['DISP', 4], 
        ['DISP', 6]
      ]
    ]
  ]
]
Run Code Online (Sandbox Code Playgroud)

...我将以递归方式执行(为了便于阅读,我添加了缩进).

因为ast是树,我不确定如何在不同节点之间跳转.我考虑过将树转换成平面数组,['IF', ['CONDITION', 3], ['DISP', 4], ['DISP', 6]]这样我就可以使用flat-ish数组的索引转到代码中的特定行,但这似乎缺乏一定的优雅,几乎感觉就像一步向后(虽然我可能是错的).

我看过这个,但无法理解它是如何工作的.

任何帮助或提示将不胜感激.

python interpreter goto ply abstract-syntax-tree

6
推荐指数
1
解决办法
1000
查看次数

罗技统一接收器协议?

有没有可以找到有关Logitech Unifying Receiver的文档或SDK的地方?

我最近获得了一个无线鼠标,它带有一个Logitech Unifying Receiver(一个插入计算机并与鼠标/其他兼容设备(如键盘)通信的小型USB加密狗).

我想尝试为我的智能手机编写一个假装是鼠标并将数据发送到接收器的应用程序.

我能够通过使用usbmon来监控来自USB总线的数据,并且可能会使用它来解决问题,但想知道我是否能够在互联网上找到我需要的信息,而不必自己推导出来.

我将尝试在Android上使用SL4A,如果这有帮助的话.

usb wireless network-protocols sl4a logitech

6
推荐指数
3
解决办法
1万
查看次数

默认情况下如何在ipython notebook markdown中制作新单元格?

目前,无论何时在iPython笔记本中创建新单元,它都默认为打开Python代码的单元格.然后,我可以通过按键盘快捷键将其更改为markdownctrl m m

我可以调整任何方法或任何设置,以便新单元格默认处于"降价模式"吗?

我确实发现这个问题似乎问了同样的问题,但它被错误地标记为重复并且没有得到回答.

python ipython ipython-notebook

6
推荐指数
1
解决办法
3248
查看次数

将值乘以两个"Maybe"monad?

我目前正在尝试学习Haskell,并遇到了一个关于Maybemonad 的奇怪问题,我似乎无法弄明白.

作为一个实验,我正在尝试取一个字符串,将每个字母转换为任意数字,然后将它们相乘或组合在一起.这是我到目前为止所拥有的:

lookupTable :: [(Char, Int)]
lookupTable = [('A', 1), ('B', 4), ('C', -6)]

strToInts :: String -> [Maybe Int]
strToInts = map lookupChar
    where 
        lookupChar :: Char -> Maybe Int
        lookupChar c = lookup c lookupTable

-- Currently fails
test :: (Num n, Ord n) => [Maybe n] -> [Maybe n]
test seq = [ x * y | (x, y) <- zip seq $ tail seq, x < y ]

main :: IO ()
main …
Run Code Online (Sandbox Code Playgroud)

haskell maybe

6
推荐指数
2
解决办法
2242
查看次数

在pyparsing中嵌套分隔列表而不会导致无限递归?

Pyparsing中有以下玩具语法:

import pyparsing as pp

or_tok = "or"
and_tok = "and"
lparen = pp.Suppress("(")
rparen = pp.Suppress(")")

Word = pp.Word(pp.alphas)("Word")

Phrase = pp.Forward()

And_Phrase = pp.Group(pp.delimitedList(Phrase, and_tok))("And_Phrase")
Or_Phrase = pp.Group(pp.delimitedList(Phrase, or_tok))("Or_Phrase")

Phrase << (pp.Optional(lparen) + (And_Phrase ^ Or_Phrase) + pp.Optional(rparen)) ^ Word

Expression = pp.OneOrMore(Word ^ Phrase)("Expression")


def test(text):
    output = Expression.parseString(text)
    print output.asXML()
Run Code Online (Sandbox Code Playgroud)

但是,运行此程序将无限递归,这不是我想要的.相反,我希望我的语法能够处理嵌套短语,以便上述程序可以解析为与下面相同的东西:

>>> test("TestA and TestB and TestC or TestD")
<Expression>
    <And_Phrase>
        <Word>TestA</Word>
        <Word>TestB</Word>
        <Or_Phrase>
            <Word>TestC</Word>
            <Word>TestD</Word>
        </Or_Phrase>
    </And_Phrase>
</Expression>
Run Code Online (Sandbox Code Playgroud)

我试图修改定义And_Phrase,Or_Phrase以便它们只匹配具有两个或更多元素的列表,但无法弄清楚如何执行此操作.

我也尝试过使用pyparsing.operatorPrecedence …

python pyparsing operator-precedence

5
推荐指数
1
解决办法
501
查看次数

Python:嵌套的lambdas - `s_push:解析器堆栈溢出内存错误`

我最近偶然发现了这篇文章,它描述了如何仅使用Ruby中的Procs来编写FizzBu​​zz,并且因为我感到无聊,所以认为尝试使用lambdas在Python中实现相同的东西是很好的.

我到了使用嵌套函数创建数字的部分,并编写了以下Python脚本:

#!/usr/bin/env python

zero  = lambda p : (lambda x: x)
one   = lambda p : (lambda x: p(x))
two   = lambda p : (lambda x: p(p(x)))
three = lambda p : (lambda x: p(p(p(x))))
five  = lambda p: (lambda x: p(p(p(p(p(x))))))

fifteen = lambda p : (lambda x: p(p(p(p(p( \
                                p(p(p(p(p( \
                                p(p(p(p(p(x))))))))))))))))


hundred = lambda p: (lambda x: p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( \
                               p(p(p(p(p(p(p(p(p(p( …
Run Code Online (Sandbox Code Playgroud)

python stack-overflow lambda-calculus

5
推荐指数
2
解决办法
3801
查看次数

在Windows 7中安装py-bcrypt时编译器错误

我需要安装瓶模块flask-bcrypt需要py-bcrypt.当我尝试安装它时,发生错误:

C:\Users\Param\Downloads\py-bcrypt-0.3>python setup.py install
running install
running bdist_egg
running egg_info
writing py_bcrypt.egg-info\PKG-INFO
writing top-level names to py_bcrypt.egg-info\top_level.txt
writing dependency_links to py_bcrypt.egg-info\dependency_links.txt
reading manifest file 'py_bcrypt.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'py_bcrypt.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
running build_ext
error: don't know how to compile C/C++ code on platform 'nt' with 'MinGW32' comp
iler
Run Code Online (Sandbox Code Playgroud)

是什么导致了这个问题?

以前,我在我的Windows 7 64位机器上安装了MinGW32.问题是因为MinGW是32位而Windows是64位吗?如果是这样,我该怎么做才能解决这个问题?(如何在我的机器中使用MinGW 64位?)

python windows compiler-construction mingw flask

5
推荐指数
1
解决办法
1925
查看次数

您可以使用 cython 编译 .py 文件而不是 pyx 文件吗?

我有一个文件 foo.py,它包含一个非常慢的函数,需要 8 分钟才能计算。但是,当我将文件更改为foo.pyx并使用 cython 编译它而不进行其他更改时,计算需要 5 分钟。

我的问题是:如果我跑cython foo.py而不是cython foo.pyx然后跑 gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python2.7 -o foo.so foo.c

当我运行时import foo,python会导入.py文件还是编译后的.so文件?pyx 真的需要在那里吗?如果存在的话,有没有办法强制它.so接管?.py

原因是我无法在不破坏其他人机器上的代码的情况下更改 foo.py 的名称,但我真的希望它对于我的测试用例来说更快。如果我可以在本地编译它而不用担心在其他地方破坏代码,那就太好了。

(我正在测试这个,但需要一段时间)

python cython

5
推荐指数
1
解决办法
5373
查看次数

你如何最好地将递归函数转换为迭代函数?

这个问题基于我在compsci课上的测试.特别是,我正在努力转换这个功能:

public static void foo(int number)  {
    if (number > 0) {
        foo(number / 2);
        System.out.print(number % 2);
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要将此函数转换为非递归,但我正在努力,因为它System.out.print(number % 2)发生在递归调用之后.

java recursion

5
推荐指数
1
解决办法
660
查看次数

Android是否提供用于确定可识别区域设置的周末日期的API?

我想为知道工作日和周末的应用程序提供一些样式,但我需要它能够识别区域设置.我知道Calendar#getFirstDayOfWeek,但这只返回一周的第一天,而不是工作周的第一天.

例如,英语(加拿大)Calendar#getFirstDayOfWeek返回Calendar.SUNDAY,这是我们一周的第一天.我们的工作周开始Calendar.MONDAY,我们的周末时间是Calendar.SATURDAYCalendar.SUNDAY.

在英语(英国),Calendar#getFirstDayOfWeek返回Calendar.MONDAY,他们工作周的第一天是星期一.他们的周末时间是Calendar.SATURDAYCalendar.SUNDAY.

对希伯来语这样的语言环境来说,事情变得棘手.这一周的第一天是Calendar.SUNDAY,但不是他们工作周的第一天Calendar.MONDAY,而是Calendar.SUNDAY.他们的周末时间是Calendar.FRIDAYCalendar.SATURDAY.埃及是一样的.

伊朗只有一个周末,Calendar.FRIDAY.

Android中是否有任何方法可以确定周末日?我们有一些涵盖大多数西方案例的逻辑,但它很脆弱,并且区域设置感知平台API是理想的,但我不知道.

请注意,我不是要求对某些"最佳"库或任何类型的库提出建议.我在询问Android平台上是否存在任何此类区域设置数据,如果存在,则存在哪些API调用来访问此数据.

android locale calendar

5
推荐指数
1
解决办法
262
查看次数