精华内容
下载资源
问答
  • Bump treetop to 1.6

    2020-11-22 16:57:59
    <div><p>Treetop 1.5 is now five years old and some distributions have been running with treetop 1.6 without issue for some time.</p><p>该提问来源于开源项目:asciidoctor/asciidoctor-pdf</p></div>
  • fix treetop to version 1.5.1

    2020-12-09 09:39:11
    <div><p>Pins the <code>treetop</code> gem version to <code>=1.5.1</code></p>该提问来源于开源项目:edelight/chef-solo-search</p></div>
  • Treetop 入门

    千次阅读 2009-05-25 14:04:00
    Treetop 是一个出奇简单的Ruby 写的解析器。我知道Treetop 是因为看到Nathan Sobo在RubyConf 2007上做的一个报告。第一步:安装Treetopgem install treetop 第二步:新建一个叫arithmetic 的.treetop 文件grammar ...

    Treetop

    Treetop 是一个出奇简单的Ruby 写的解析器。我知道Treetop 是因为看到Nathan Sobo在RubyConf 2007上做的一个报告

    第一步:安装Treetop

    第二步:新建一个叫arithmetic 的.treetop 文件

    第三步:测试一下

    done!

    语法结构:

     

    关键字grammar 定义一个新的语法。rule 定义这个语法的一条解析规则,rule 后面跟的名字可以被其他rule 引用。

    每条rule 名都对应了一条解析规则。解析规则由终结符(Terminal Symbols)、非终结符(Nonterminal Symbols)和一些类似 正则表达式的特殊操作组成。终结符有:单引号或双引号括起来的字串、字符集、通配符(the anything symbol ".")。非终结符就是其他rules 的名字。前面提到的特殊操作包括:有序选择(Ordered Choice "/")、序列(Sequences)、出现次数("*+?")、前向断言(Lookahead Assertions "&!")。

    其中有序选择是最不同于正则表达式的地方。有序选择可以看作一系列并列的rules (就像正则表达式中的"|"),不过匹配的时候是按从左至右的顺序,一旦匹配上就不再试探后面的规则。比如:

    "foobar" / "foo" / "bar"

    如果"foo" 在前,则"foobar" 永远不可能匹配上。

    这是项很有用的技术,用它可以产生优先级。

    光有语法还不足以解析表达式,还有配上语义解释。语义解释就是在识别语法单元的时候执行某些操作(比如:求值)。有两种方式为rule 添加动作。一种是在定义的时候嵌入方法。比如:

     

    当方法太长时,还可以像JSP 那样做个标签,在专门的.rb 文件中定义相应的动作。

     

    介绍几个Treetop::Runtime::SyntaxNode 的方法:

    • terminal?   当前结点是否由一个终结符产生?
    • nonterminal?   当前结点是否由一个非终结符产生?
    • text_value     返回一个String,当前结点所对应的输入子串。
    • elements    只能用于非终结结点。返回一个Array,里面是已解析出来的SyntaxNode 对象。

    Treetop 使用起来很方便 bla, bla, bla.

    James Coglan

    heist 的作者jcoglan 写了一个tini Scheme 解释器,还贡献了胶片视频

    还记得Lisp 吗?Scheme 是Lisp 的一个变种。这已不是第一个Ruby 写的Lisp 解释器了。Phil Hagelberg 写过James Coglan 写过Jim Weirich 写过……

    这么多人热衷于用Scheme 来练手就是因为它实在是太简单了。一对圆括号把一个操作符、一堆操作数括起来,像这样:(op arg1 arg2 ... argn) 这就是传说中的list。

    请看下面Treetop 版的Lisp 语法。

    lisp.treetop

     

    你看懂了吗?我的理解是:Lisp 程序由若干cell 构成;cell 的前后有若干space,中间要么是list,要么是atom;list 是圆括号括起来的若干cell;atom 有两种,datum 和identifier;datum 要么是boolean,要么是整数;boolean 只有#t 和#f;identifier 是没有前导空格或前导括号的任意字串。

    function.rb

     

    lisp.rb

     

    scheme.rb

     

    scope.rb

     

    测试文件test.scm

     

    执行(说明一下:lisp.treetop, function.rb, lisp.rb, scheme.rb, scope.rb 在lib 目录下;test.scm 和lib 在同一目录下)

     

    展开全文
  • <div><p>Removing the treetop after a recognized call transformation can result in a semantically incorrect transformation because the descendants of the treetop may have sideeffects. Removing the ...
  • treetop ordering, where treetop order means the order in which the extended basic blocks appear in a trace log file. <p>Signed-off-by: Filip Jeremic </p><p>该提问来源于开源项目:eclipse/omr</p>...
  • <div><p>treetop was removed <a href="https://github.com/opscode/chef/commit/862d971eed1c11e6990b1c08f00cac67a10a2e79">here</a></p> <p>treetop needs to be a dependency of this cookbook. PR coming soon....
  • <div><p>When parsing a UTF-8 string, treetop's run time is quadratic with respect to the input size. When parsing BINARY ("ASCII-8BIT"), the run time is mostly linear. That behavior doesn&...
  • <div><p>Treetop just updated to <code>1.5.0</code> and breaks <code>LuceneParser</code> e.g.: <pre><code> # treetop 1.4.1: Query.parse('foo:bar AND baz:quaz') => Body offset=0, "...
  • <div><p>This pull request replaces the Treetop based parser with a <a href="http://www.complang.org/ragel/">Ragel</a>-based parser. This change is primarily to improve the performance of message ...
  • <div><p>Just grabbed a log of <code>java/lang/StringBuffer.... Are there cases where <code>monexit</code> is not under a <code>treetop</code>?</p><p>该提问来源于开源项目:eclipse/openj9</p></div>
  • <div><p>Treetop is not released from this repository, and issues may not be acknowledged. Please submit them to my repository instead.</p><p>该提问来源于开源项目:nathansobo/treetop</p></div>
  • <div><p>Computer activated Treetop Village, then played Rancor on the resulting Ape creature. At the end of the turn, Treetop Village turned back into a land - at that point, the enchantment should ...
  • <div><p><code>OMR::TreeTop::join()</code> checks if self() is NULL [1], which is odd because it never makes sense to call a member function on a NULL object. Such calls are undefined behaviour. <p>...
  • 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道。每日3题,100天之后成为大牛!如果有不明白的,给麦叔留言。[Easy] Python中pass语句的作用是什么?思考30秒再往下翻...pass 是一个空...
    1. 每日3题是麦叔的面试系列专题之一,每天包括初级,中级,高级难度题目各一道。
    2. 每日3题,100天之后成为大牛!
    3. 如果有不明白的,给麦叔留言。

    [Easy] Python中pass语句的作用是什么?

    思考30秒再往下翻...

    f4d049acbd7135a0933553147fa7c0d7.png

    pass 是一个空操作,当它被执行时,什么都不发生。它适合当语法上需要一条语句但并不需要执行任何代码时用来临时占位 在编写代码时只写框架思路,具体实现还未编写就可以用pass进行占位,使程序不报错,不会进行任何操作。

    # 定义了一个没有任何功能的方法
    def test(arg): 
      pass

    [Normal] Python中yield的用法?

    思考30秒再往下翻...

    24c7bc25c5087e26d5e9494747cedcc7.png

    一个带有 yield 的函数就是一个 generator,它和普通函数不同,生成一个 generator 看起来像函数调用,但不会执行任何函数代码,直到对其调用 next()(在 for 循环中会自动调用 next())才开始执行。虽然执行流程仍按函数的流程执行,但每执行到一个 yield 语句就会中断,并返回一个迭代值,下次执行时从 yield 的下一个语句继续执行。看起来就好像一个函数在正常执行的过程中被 yield 中断了数次,每次中断都会通过 yield 返回当前的迭代值。yield 的好处是显而易见的,把一个函数改写为一个 generator 就获得了迭代能力,比起用类的实例保存状态来计算下一个 next() 的值,不仅代码简洁,而且执行流程异常清晰。

    def func(max):
        n = 0
        while n         yield n
            n += 1

    for n in func(5):
        print(n)

    [Hard] 代码演示多线程共同操作同一个数据互斥锁同步?

    思考30秒再往下翻...

    a23eaa0e0bbb28b2bf98a4a2c7a09047.png

    下面的例子创建了5个线程,每个线程会尝试去将num+1,如果没有if mutex.acquire(1):这个判断,就有可能会导致多线程数据不同步的问题。可以尝试一下去掉这个判断,然后把线程数量调大一点试试看是什么结果。

    import threading
    import time
    class MyThread(threading.Thread):
        def run(self):
            global num
            time.sleep(1)
        
            if mutex.acquire(1):
                num +=1
                msg = self.name + 'set num to ' +str(num)
                print(msg)
                mutex.release()
    num = 0
    mutex = threading.Lock()
    def test():
        for i in range(5):
            t = MyThread()
            t.start()
    if __name__=="__main__":
        test()

    支持麦叔,请点在看,谢谢!

    展开全文
  • 异常Error我们在写代码的时候,经常会遇见程序抛出Error无法执行的情况一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则...

    异常Error

    我们在写代码的时候,经常会遇见程序抛出Error无法执行的情况

    一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

    try…except…else

    ddd2cb70517f04ceb92f30e48047f716.png

    except后可写入一个固定的错误名称 如写 except IOError 并且我们可以写多个except语句

    try…except…finally

    我们还可以使用try…except…finally…的错误处理机制

    try…except…finally…与try…except…else区别是 无论有没有错误 finally语句都会执行

    例如:

    453f19be3fede569fc91c5b3e4fee021.png

    当我们认为某些代码可能会出错时,就可以用try来运行这段代码,如果执行出错,则后续代码不会继续执行,而是直接跳转至错误处理代码,即except语句块,执行完except后,如果有finally语句块,则执行finally语句块。

    转自:python中的try...except...finally函数-侵删

    展开全文
  • 本文出自“Python为什么”系列,请查看全部文章在写上一篇《Python 为什么要有 pass 语句?》时,我想到一种特别的写法,很多人会把它当成 pass 语句的替代。在文章发布后,果然有三条留言提及了它。...

    本文出自“Python为什么”系列,请查看全部文章

    在写上一篇《Python 为什么要有 pass 语句?》时,我想到一种特别的写法,很多人会把它当成 pass 语句的替代。在文章发布后,果然有三条留言提及了它。

    所谓特别的写法就是下面这个:

    # 用 ... 替代 passdef foo(): ...

    它是中文标点符号中的半个省略号,也即由英文的 3 个点组成。如果你是第一次看到,很可能会觉得奇怪:这玩意是怎么回事?(PS:如果你知道它,仔细看过本文后,你同样可能会觉得奇怪!)

    1、认识一下“...”内置常量

    事实上,它是 Python 3 中的一个内置对象,有个正式的名字叫作——Ellipsis,翻译成中文就是“省略号”。

    更准确地说,它是一个内置常量(Built-in Constant),是 6 大内置常量之一(另外几个是 None、False、True、NotImplemented、__debug__)。

    关于这个对象的基础性质,下面给出了一张截图,你们应该能明白我的意思:

    f2182f9cd86102fa640b061f57b3b121.png

    “...“并不神秘,它只是一个可能不多见的符号型对象而已。用它替换 pass,在语法上并不会报错,因为 Python 允许一个对象不被赋值引用。

    严格来说, 这是旁门左道,在语义上站不住脚——把“...”或其它常量或已被赋值的变量放在一个空的缩进代码块中,它们是与动作无关的,只能表达出“这有个没用的对象,不用管它”。

    a534eed5e15e3bff7eb90575da3ede47.png

    Python 允许这些不被实际使用的对象存在,然而聪明的 IDE 应该会有所提示(我用的是 Pycharm),比如告诉你:Statement seems to have no effect 。

    但是“...”这个常量似乎受到了特殊对待,我的 IDE 上没有作提示。

    很多人已经习惯上把它当成 pass 那样的空操作来用了(在最早引入它的邮件组讨论中,就是举了这种用法的例子)。但我本人还是倾向于使用 pass,不知道你是怎么想的呢?

    2、奇怪的 Ellipsis 和 ...

    ... 在 PEP-3100 中被引入,最早合入在 Python 3.0 版本,而 Ellipsis 则在更早的版本中就已包含。

    虽然官方说它们是同一个对象的两种写法,而且说成是单例的(singleton),但我还发现一个非常奇怪的现象,与文档的描述是冲突的:

    0c7355c8fa16995fd0b38374af1832eb.png

    如你所见,赋值给 ... 时会报错SyntaxError: cannot assign to Ellipsis ,然而 Ellipsis 却可以被赋值,它们的行为根本就不同嘛!被赋值之后,Ellipsis 的内存地址以及类型属性都改变了,它成了一个“变量”,不再是常量。

    作为对比,给 True 或 None 之类的常量赋值时,会报错SyntaxError: cannot assign to XXX,但是给 NotImplemented 常量赋值时不会报错。

    众所周知,在 Python 2 中也可以给布尔对象(True/False)赋值,然而 Python 3 已经把它们改造成不可修改的。

    所以有一种可能的解释:Ellipsis 和 NotImplemented 是 Python 2 时代的遗留产物,为了兼容性或者只是因为核心开发者遗漏了,所以它们在当前版本(3.8)中还可以被赋值修改。

    ... 出生在 Python 3 的时代,或许在将来会完全取代 Ellipsis。目前两者共存,它们不一致的行为值得我们注意。我的建议:只使用"..."吧,就当 Ellipsis 已经被淘汰了。

    3、为什么要使用“...”对象?

    接下来,让我们回到标题的问题:Python 为什么要使用“...”对象?

    这里就只聚焦于 Python 3 的“...”了,不去追溯 Ellipsis 的历史和现状。

    之所以会问这个问题,我的意图是想知道:它有什么用处,能够解决什么问题?从而窥探到 Python 语言设计中的更多细节。

    大概有如下的几种答案:

    (1)扩展切片语法

    官方文档中给出了这样的说明:

    Special value used mostly in conjunction with extended slicing syntax for user-defined container data types.

    这是个特殊的值,通常跟扩展的切片语法相结合,用在自定义的数据类型容器上。

    文档中没有给出具体实现的例子,但用它结合__getitem__() 和 slice() 内置函数,可以实现类似于 [1, ..., 7] 取出 7 个数字的切片片段的效果。

    由于它主要用在数据操作上,可能大部分人很少接触。听说 Numpy 把它用在了一些语法糖用法上,如果你在用 Numpy 的话,可以探索一下都有哪些玩法?

    (2)表达“未完成的代码”语义

    ... 可以被用作占位符,也就是我在《Python 为什么要有 pass 语句?》中提到 pass 的作用。前文中对此已有部分分析。

    有人觉得这样很 cute,这种想法获得了 Python 之父 Guido 的支持 :

    7aab67c11cb0fe9d531c8dd35e468163.png

    (3)Type Hint 用法

    Python 3.5 引入的 Type Hint 是“...”的主要使用场合。

    它可以表示不定长的参数,比如Tuple[int, ...] 表示一个元组,其元素是 int 类型,但数量不限。

    它还可以表示不确定的变量类型,比如文档中给出的这个例子:

    from typing import TypeVar, GenericT = TypeVar('T')def fun_1(x: T) -> T: ...  # T heredef fun_2(x: T) -> T: ...  # and here could be differentfun_1(1)                   # This is OK, T is inferred to be intfun_2('a')                 # This is also OK, now T is str

    T 在函数定义时无法确定,当函数被调用时,T 的实际类型才被确定。

    在 .pyi 格式的文件中,... 随处可见。这是一种存根文件(stub file),主要用于存放 Python 模块的类型提示信息,给 mypy、pytype 之类的类型检查工具 以及 IDE 来作静态代码检查。

    (4)表示无限循环

    最后,我认为有一个非常终极的原因,除了引入“...”来表示,没有更好的方法。

    先看看两个例子:

    71c42c43ceb3efacf04cde7fe99b91a0.png

    两个例子的结果中都出现了“...”,它表示的是什么东西呢?

    对于列表和字典这样的容器,如果其内部元素是可变对象的话,则存储的是对可变对象的引用。那么,当其内部元素又引用容器自身时,就会递归地出现无限循环引用。

    无限循环是无法穷尽地表示出来的,Python 中用 ... 来表示,比较形象易懂,除了它,恐怕没有更好的选择。

    最后,我们来总结一下本文的内容:

    • ... 是 Python 3 中的一个内置常量,它是一个单例对象,虽然是 Python 2 中就有的 Ellipsis 的别称,但它的性质已经跟旧对象分道扬镳
    • ... 可以替代 pass 语句作为占位符使用,但是它作为一个常量对象,在占位符语义上并不严谨。很多人已经在习惯上接受它了,不妨一用
    • ... 在 Python 中不少的使用场景,除了占位符用法,还可以支持扩展切片语法、丰富 Type Hint 类型检查,以及表示容器对象的无限循环
    • ... 对大多数人来说,可能并不多见(有人还可能因为它是一种符号特例而排斥它),但它的存在,有些时候能够带来便利。希望本文能让更多人认识它,那么文章的目的也就达成了~

    本文属于“Python为什么”系列(Python猫出品),该系列主要关注 Python 的语法、设计和发展等话题,以一个个“为什么”式的问题为切入点,试着展现 Python 的迷人魅力。所有文章将会归档在 Github 上,项目地址:https://github.com/chinesehuazhou/python-whydo

    展开全文
  • 公众号关注“菜鸟要飞”设为 “星标”,和12万程序员一起成长!从前有座山,山里有条蛇。有一天它生了一堆蛋,它们的名字叫蛇蛋...为什么叫蛇蛋?因为电影里面有一个好玩的东西叫......Python 作为一门开源的语言,社区...
  • <div><p>I know this is probably annoying as it is probably due to a combination of things, but i'd rather tell you about it than not. When i added to my Gemfile i ended up with a segfault: ...
  • <p>In order to use Polyglot dynamic loading of .treetop or .tt files though, you need to require the Polyglot gem before you require the Treetop gem as Treetop will only create hooks into Polyglot for...
  • --local does not work

    2021-01-12 05:50:12
    0: treetop (1.4.14) from /usr/share/gems/specifications/treetop-1.4.14.gemspec Using mail (2.5.4) 0: mail (2.5.4) from /usr/share/gems/specifications/mail-2.5.4.gemspec Using actionmailer (4.0.2) 0: ...
  • <div><p>A treetop hanging a read barrier can be removed if there is no other real use of the read barrier. Otherwise, the treetop has to be kept to anchor the read barrier. <p>This change contains 2 ...
  • Using treetop 1.4.15 Using rdoc 3.12.2 Using activemodel 3.2.19 Bundler::GemspecError: Could not read gem at /home/jesse/.gem/rbx/2.1.0/cache/tzinfo-0.3.42.gem. It may be corrupted. An error occurred...
  • Treetop - PEG (解析表达式语法) 解析器
  • treetop", "json", "bunny", "rest-client", "ohai", "mixlib-authentication", "mixlib-log", "mixlib-cli", "mixlib-config", "extlib&...
  • Function.create() error

    2021-01-09 04:39:41
    at Empty.Generator (/home/dominic/TreeTop/component/node_modules/component-resolver/build/index.js:69:38) at wrapGenerator (/home/dominic/TreeTop/component/node_modules/component-resolver/build/...
  • Firefox/Streaming HTTP

    2020-11-30 06:15:51
    treetop (1.4.10) polyglot polyglot (>= 0.3.1) tzinfo (0.3.33) uglifier (1.2.6) execjs (>= 0.3.0) multi_json (~> 1.3) yajl-ruby (1.1.0) PLATFORMS ruby DEPENDENCIES coffee-...
  • n42n treetop [0x7eff1d5e6040] bci=[-1,3,17] rc=0 vc=14 vn=- li=- udi=- nc=1 n9n aladd [0x7eff1d5e55f0] bci=[-1,3,17] rc=1 vc=14 vn=- li=- udi=- nc&#...
  • treetop (1.4.12) polyglot polyglot (>= 0.3.1) tzinfo (0.3.37) uglifier (2.0.1) execjs (>= 0.3.0) multi_json (~> 1.0, >= 1.0.2) unicorn (4.6.2) kgio (~> 2.6) rack ...
  • treetop (~> 1.4.8) mime-types (1.16) multi_json (1.0.3) net-scp (1.0.4) net-ssh (>= 1.99.1) net-sftp (2.0.5) net-ssh (>= 2.0.9) net-ssh (2.1.4) net-ssh-gateway (1.1.0) ...
  • treetop", "gherkin", "multi_json", "multi_test", "cucumber-core", "gherkin3", "cucumber-wire", "event-bus", "net-ssh"] ...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 345
精华内容 138
热门标签
关键字:

treetop