铁路图是可视化无上下文语法的流行方法,您可以将Backus-Naur形式映射到这些图表.但是BNF的某些变体,例如W3C-BNF允许例外(因为无差异语言不会因差异而关闭,这些例外必须是常规的).我想在铁路图中用异常来形象化语法.我应该创建自己的图形符号扩展还是有人已经尝试过这个?
这是一个带例外规则的例子(是的,你也可以毫无例外地表达这个特殊的语法,但这不是重点):
comment := "<!--" (string - "--") "-->"
Run Code Online (Sandbox Code Playgroud)
例外可以是任何常规语法.我想通过一些特殊类型的箭头或线(这里用感叹号表示)添加连接到非终端符号的异常:
[<] ? [!] ? [-] ? [-] ? (string) ? [-] ? [-] ? [>]
!
! ? [-] ? [-] ? ?
Run Code Online (Sandbox Code Playgroud)
PS:语法错了,应该是
comment := "<!--" (string - (string "--" string | string "-")) "-->"
Run Code Online (Sandbox Code Playgroud)
也许非直观地使用否定是其在正式语法中很少使用的一个原因?
我正在寻找用于大量记录或文件的简单版本控制系统(约5000万,未压缩的约100GB,已压缩的约20MB)。这些文件每个只有几千字节,并且具有唯一的ID,所以我不在乎它们是否存储在平面结构(表,目录...)中。平均而言,每条记录每月更改一次,但是大多数更改的差异小于千字节,因此应该易于压缩版本。但是,对于每个版本只有一个条目的朴素数据库将增长得太快。我需要执行以下操作:
简而言之,我正在寻找用于简单记录或文件的类似Wiki的软件。
我考虑了可能的解决方案:
将文件放在版本控制系统中。这为我提供了复制和许多可用的访问工具,因此这是我的首选解决方案。但是对于像git这样的分布式系统来说,数据量太大。是否有人使用Subversion成功完成类似任务?
在数据库或文件系统中实现我自己的版本控制。我可能只需要存储压缩的记录和差异,就可以进行更多的工作并学到一些东西。如果只是为了娱乐,这将是我的首选解决方案。
使用版本控制文件系统。这将使设置,复制和访问更加困难。可能我需要在文件系统上方实现自己的访问API。
使用版本控制数据库系统。你能建议一些吗?
使用其他现有数据存储进行版本控制(MediaWiki?,Amazon Cloud Drive?,...)
显然有很多路径。其他人成功使用了哪些路径来获取相似或更大数量的数据?
给定一个可能因警告和/或错误而失败的方法,我希望错误方法显示在调用者处.这个脚本的Fir实例:
foo(0); # line 1
sub foo {
1 / shift; # line 4
}
Run Code Online (Sandbox Code Playgroud)
产生错误Illegal division by zero at foo.pl line 4,但我想要Illegal division by zero at foo.pl line 1.如果我将方法放在模块中或者如果我将方法体包装在eval中,应该有几种方法,但我没有找到这样简单的方法:
sub foo {
attributeErrorsToCaller; # do some magic
1 / shift;
}
Run Code Online (Sandbox Code Playgroud)
有这样的方式吗?
编辑: mirod的答案接近而不是我想要的:
Foo::foo(0); # line 1
package Foo;
use diagnostics -traceonly;
BEGIN { disable diagnostics; }
sub foo {
enable diagnostics;
1 / shift; # line 9
}
Run Code Online (Sandbox Code Playgroud)
没有enable diagnostics错误消息是 …
我正在使用SimpleNLG 4.4.2复数形式的名词:
final XMLLexicon xmlLexicon = new XMLLexicon();
final WordElement word = xmlLexicon.getWord("apple", LexicalCategory.NOUN);
System.out.println(word);
System.out.println(word.getFeature(LexicalFeature.PLURAL));
Run Code Online (Sandbox Code Playgroud)
然而即使是这样一个简单的例子,getFeature返回null代替apples.我究竟做错了什么?
为与OAuth2.0兼容的库赞助人指定API,我偶然发现了OAuth范围.OAuth2.0规范似乎在某些方面有不同的解释,例如GitHub使用逗号分隔范围,而Google使用空格,如RFC 6749中所定义.RFC告诉:
如果发布的访问令牌范围与客户端请求的范围不同,授权服务器必须包含"范围"响应参数,以通知客户端授予的实际范围
但是后面的规范中没有提到范围响应参数.特别是我想实现资源所有者密码凭证授权(第4.3节).这个响应示例在OAuth2.0规范中给出:
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
Run Code Online (Sandbox Code Playgroud)
我应该将范围包含为以空格分隔的列表,逗号分隔列表还是JSON文件?
{
"scope": [ "read", "write", "foobar" ],
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"example",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
"example_parameter":"example_value"
}
Run Code Online (Sandbox Code Playgroud) 我发现安装本机Debian或Ubuntu Perl软件包通常比通过"手动"安装Perl模块更加可靠和方便cpanm(特别是对于XS-Modules).在给出所需Perl模块列表的情况下,是否有一种简单的方法可以找到这些模块?最方便的方法是映射cpanfile,例如
requires 'XML::LibXSLT', '1.78';
Run Code Online (Sandbox Code Playgroud)
到为不同目标平台提供模块的发行版和包列表:
XML::LibXSLT, Ubuntu 13.04, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 13.10, libxml-libxslt-perl, 1.78
XML::LibXSLT, Ubuntu 14.04, libxml-libxslt-perl, 1.84
XML::LibXSLT, Debian squeeze, libxml-libxslt-perl, 1.70
XML::LibXSLT, Debian wheezy, libxml-libxslt-perl, 1.77
XML::LibXSLT, Debian jessie, libxml-libxslt-perl, 1.92
XML::LibXSLT, Debian sid, libxml-libxslt-perl, 1.92
Run Code Online (Sandbox Code Playgroud)
PS:我想这些信息可以从每个发行版的软件包存储库中查找,例如http://packages.ubuntu.com/和https://packages.debian.org但是有一个可编写脚本的解决方案已经做到了这一点抬头?
我想在Plack中部署一个在Apache2中运行的PSGI脚本.Apache配置有:
<Location "/mypath">
SetHandler perl-script
PerlResponseHandler Plack::Handler::Apache2
PerlSetVar psgi_app /path/to/my/script.psgi
</Location>
Run Code Online (Sandbox Code Playgroud)
当我使用plackup测试脚本时,该--reload参数会监视.psgi文件的更新.在生产环境中,由于性能原因,Apache和Plack不会检查并重新启动每个更改,但是如何明确告诉他们重新启动Plack::Handler::Apache2和/或PSGI脚本部署新版本?
看起来Plack会定期检查一些变化,但我不清楚何时.此外,它似乎创建了多个实例,所以我有时会得到不同版本的script.psgi时间/mypath.手动刷新perl响应处理程序而不必重新启动Apache或等待一段未知的时间会很有帮助.
我正在尝试在 NLG 的帮助下生成产品描述。例如,如果我指定产品的属性(例如手机),例如其操作系统、RAM、处理器、显示器、电池等,它应该向我输出手机的可读描述。我看到有一些付费服务(Quill、Wordsmith 等)也是如此。然后我遇到了 NLG 的开源 Java API - simplenlg。我看到如何通过指定句子短语和特征(如时态、询问等)来创建句子,但没有看到从文本创建描述的选项。
有谁知道如何使用 simplenlg 从单词创建文本描述?
是否有其他工具/框架/API 可用于完成此任务(不限于 Java)?
我想要一个目录中的文件排序列表.如何将该sort函数应用于IOmonad 列表?
import System.Directory
import Data.List
sortedFiles :: FilePath -> IO [FilePath]
sortedFiles path = do
files <- getDirectoryContents "."
return sort files -- this does not work
Run Code Online (Sandbox Code Playgroud)