首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python EBNF如何阅读

Python EBNF如何阅读
EN

Stack Overflow用户
提问于 2020-04-20 19:42:49
回答 1查看 174关注 0票数 0

所以我偶然发现了Python language (https://docs.python.org/3/reference/grammar.html)的语法,我不能完全理解它是如何工作的。特别是,我对这段关于if语句的片段很感兴趣。

代码语言:javascript
复制
if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite]
[...]
namedexpr_test: test [':=' test]
test: or_test ['if' or_test 'else' test] | lambdef
test_nocond: or_test | lambdef_nocond
lambdef: 'lambda' [varargslist] ':' test
lambdef_nocond: 'lambda' [varargslist] ':' test_nocond
or_test: and_test ('or' and_test)*
and_test: not_test ('and' not_test)*
not_test: 'not' not_test | comparison
comparison: expr (comp_op expr)*
# <> isn't actually a valid comparison operator in Python. It's here for the
# sake of a __future__ import described in PEP 401 (which really works :-)
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'

这里有一定的风格。用and_test定义or_test,再用not_test定义and_test。这种风格的优点是什么?(因为我看到它在C++的语法中也用到了,很可能很多其他语言也用到了)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-20 19:56:49

它对优先级进行编码。使用此语法,您可以明确地解析表达式

代码语言:javascript
复制
not x and y or z

作为

代码语言:javascript
复制
                    or_test
                   /       \
                  /         z
                and_test
               /        \
              /          y
          not_test
             |
             x

以“预期”的方式,不需要括号。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61321667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档