Coffeescript对象符号(CSON)解析器
项目描述
# pycson
[](https://travis-ci.org/avakar/pycson)
Python解析Coffeescript对象符号(CSON)。
## 安装
解析器已在Python 2.7和3.5上进行了测试。
pip install cson
接口与标准`json`包相同。
>>> import cson
>>> cson.loads('a: 1')
{'a': 1}
>>> with open('file.cson', 'rb') as fin
... obj = cson.load(fin)
>>> obj
{'a': 1}
## 语言
CSON没有正式的定义,只有[一个项目][1]的readme中的非正式说明。
非正式地,CSON是JSON,但使用Coffeescript语法。遗憾的是[Coffeescript][2]也没有
格式语法;它有一个规范实现。
这意味着实现中的错误会转化为语言本身的错误。
更糟糕的是,这个特定的实现插入了一个“重写器”在典型的
词法分析器/解析器对之间,声称这使得语法更简单。不幸的是,它给语言增加了
奇怪的角落情况。
这个解析器去掉了角落情况,
以换取在某些不太可能的情况下改变文档的语义。
换句话说,一些文档可能由Coffescript解析器和pycson以不同的方式解析。
以下是重要的要点(有关详细信息,请参阅[正式语法][3])。
* 允许字符串插值(`"#{test}"`),但按字面意义处理。
* 在数组和花括号内的对象中忽略空白。
(Coffeescript需要一致的缩进)。
未加花括号的对象贪婪地消耗尽可能多的键/值对。
未加花括号的对象中的所有行都必须具有相同的缩进。这是唯一一个
空白有意义的的地方。没有针对部分缩进的特殊规定。
要使两行具有相同的缩进,它们的最大前导空格和制表符序列必须相同(仅Coffeescript跟踪空白字符的数量)。
必须相同(Coffeescript仅跟踪空白字符的数量)。
* 未加花括号的对象如果不在其自己的行上开始,将永远不会跨越多行。
* 行尾的逗号可以始终删除而不改变输出。
我相信上述规则使解析无歧义。
此示例演示了缩进的效果。
# 包含单个元素的数组:具有三个键的对象。
[
a: 1
b: 2
c: 3
]
# 包含三个元素的数组:具有一个键的对象。
[
a: 1
b: 2
c: 3
]
# 包含两个对象,第一个对象有一个键。
[ a: 1
b: 2
c: 3 ]
注意,pycson可以正确解析所有JSON文档(Coffeescript不能,因为
空格和字符串插值)。
[1]: https://github.com/bevry/cson
[2]: https://coffeescript.node.org.cn/
[3]: grammar.md
[](https://travis-ci.org/avakar/pycson)
Python解析Coffeescript对象符号(CSON)。
## 安装
解析器已在Python 2.7和3.5上进行了测试。
pip install cson
接口与标准`json`包相同。
>>> import cson
>>> cson.loads('a: 1')
{'a': 1}
>>> with open('file.cson', 'rb') as fin
... obj = cson.load(fin)
>>> obj
{'a': 1}
## 语言
CSON没有正式的定义,只有[一个项目][1]的readme中的非正式说明。
非正式地,CSON是JSON,但使用Coffeescript语法。遗憾的是[Coffeescript][2]也没有
格式语法;它有一个规范实现。
这意味着实现中的错误会转化为语言本身的错误。
更糟糕的是,这个特定的实现插入了一个“重写器”在典型的
词法分析器/解析器对之间,声称这使得语法更简单。不幸的是,它给语言增加了
奇怪的角落情况。
这个解析器去掉了角落情况,
以换取在某些不太可能的情况下改变文档的语义。
换句话说,一些文档可能由Coffescript解析器和pycson以不同的方式解析。
以下是重要的要点(有关详细信息,请参阅[正式语法][3])。
* 允许字符串插值(`"#{test}"`),但按字面意义处理。
* 在数组和花括号内的对象中忽略空白。
(Coffeescript需要一致的缩进)。
未加花括号的对象贪婪地消耗尽可能多的键/值对。
未加花括号的对象中的所有行都必须具有相同的缩进。这是唯一一个
空白有意义的的地方。没有针对部分缩进的特殊规定。
要使两行具有相同的缩进,它们的最大前导空格和制表符序列必须相同(仅Coffeescript跟踪空白字符的数量)。
必须相同(Coffeescript仅跟踪空白字符的数量)。
* 未加花括号的对象如果不在其自己的行上开始,将永远不会跨越多行。
* 行尾的逗号可以始终删除而不改变输出。
我相信上述规则使解析无歧义。
此示例演示了缩进的效果。
# 包含单个元素的数组:具有三个键的对象。
[
a: 1
b: 2
c: 3
]
# 包含三个元素的数组:具有一个键的对象。
[
a: 1
b: 2
c: 3
]
# 包含两个对象,第一个对象有一个键。
[ a: 1
b: 2
c: 3 ]
注意,pycson可以正确解析所有JSON文档(Coffeescript不能,因为
空格和字符串插值)。
[1]: https://github.com/bevry/cson
[2]: https://coffeescript.node.org.cn/
[3]: grammar.md
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分布
cson-0.8.tar.gz (6.3 kB 查看哈希值)
构建分布
cson-0.8-py2.py3-none-any.whl (6.7 kB 查看哈希值)
关闭
cson-0.8.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ee8c0166fcd1f51789887197e3e8354ac7befa396fc29706bceb5af25edc9e01 |
|
MD5 | 02f738b7f765e88b4222fe2126a685db |
|
BLAKE2b-256 | 8c14461bdde1d712dae3c14e139dd4b37085085fd75f01d44f888767bfc6d313 |
关闭
cson-0.8-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 163a18fccbb5bd0911d20f0ef5876ce5a08057b05ba212571579578f292ed100 |
|
MD5 | 67750c758df3f03a335c9e5e0f97a6cc |
|
BLAKE2b-256 | 996f0a83b553bee55baa2ee3a039c6d91c339beca59d250ad742053dcf83ac26 |