在LaTeX中写论文的时候,我有这个.bib文件供参考管理:
@article{garg2017patch,
title={Patch testing in patients with suspected cosmetic dermatitis: A retrospective study},
author={Garg, Taru and Agarwal, Soumya and Chander, Ram and Singh, Aashim and Yadav, Pravesh},
journal={Journal of Cosmetic Dermatology},
year={2017},
publisher={Wiley Online Library}
}
@article{hauso2008neuroendocrine,
title={Neuroendocrine tumor epidemiology},
author={Hauso, Oyvind and Gustafsson, Bjorn I and Kidd, Mark and Waldum, Helge L and Drozdov, Ignat and Chan, Anthony KC and Modlin, Irvin M},
journal={Cancer},
volume={113},
number={10},
pages={2655--2664},
year={2008},
publisher={Wiley Online Library}
}
@article{siperstein1997laparoscopic,
title={Laparoscopic thermal ablation of …Run Code Online (Sandbox Code Playgroud) 如果语法不匹配,有没有办法让Perl 6生成错误消息?或者至少返回它处理的最后一个数据的位置?如果从解析器获得的所有内容都是"不匹配",则很难修复语法错误.
我正在尝试使用Perl6语法实现Markdown解析器并且遇到了blockquotes.块引用段落不能嵌套括号来表示,因为它是专门格式化行的列表.但从语义上讲,它是一个嵌套的降价.
基本上,这一切都归结为以下定义:
token mdBlockquote {
<mdBQLine>+ {
my $quoted = [~] $m<mdBQLine>.map: { $_<mdBQLineBody> };
}
}
Run Code Online (Sandbox Code Playgroud)
mdBQLine令牌的实际实现与此无关.唯一需要注意的是,mdBQLineBody密钥包含>已经剥离的实际引用行.毕竟,对于一个块:
> # quote1
> quote2
>
> quote3
quote3.1
Run Code Online (Sandbox Code Playgroud)
该$quoted标将包含:
# quote1
quote2
quote3
quote3.1
Run Code Online (Sandbox Code Playgroud)
现在,重点是解析上述数据并将其注入Match对象$/.这就是我完全陷入困境的地方.最明显的解决方案:
token mdBlockquote {
<mdBQLine>+ {
my $quoted = [~] $m<mdBQLine>.map: { $_<mdBQLineBody> };
$<mdBQParsed> = self.parse( $quoted, actions => self.actions );
}
}
Run Code Online (Sandbox Code Playgroud)
一次失败有两个原因:第一,$/是一个只读对象; 第二,.parse有效地修改它使得无法向原始树中注入任何东西.
是否有任何解决方案,然后分析解析数据,提取和重新解析blockquotes,重复......?
我一直试图弄清楚如何在Perl 6中做一个递归的正则表达式.对于一个玩具示例,一个平衡的括号匹配器,它将匹配((())())内部(((((())()).
我以为这样做会:
my regex paren {
'(' ~ ')' <paren>*
}
Run Code Online (Sandbox Code Playgroud)
或者更简单
my regex paren {
'(' <paren>* ')'
}
Run Code Online (Sandbox Code Playgroud)
但那失败了
No such method 'paren' for invocant of type 'Match'
in regex paren at ...
Run Code Online (Sandbox Code Playgroud) 我需要匹配key = valueBibTeX 文件中对的值,这些文件可以包含任意嵌套的大括号,由大括号分隔。我最多匹配两个深嵌套的花括号,就像{some {stuff} like {this}}kludgey一样:
token brace-value {
'{' <-[{}]>* ['{' <-[}]>* '}' <-[{}]>* ]* '}'
}
Run Code Online (Sandbox Code Playgroud)
我对再往下一层的想法感到不寒而栗……但是正确解析我的 BibTeX 内容至少需要三层深。
是的,我知道周围有 BibTeX 解析器,但我需要获取完整的条目以进行进一步处理,同时查看几个键。我的*.bib文件相当温和(我不介意手动处理一些杂散条目),问题是我有很多文件,并且有很多重叠。但是一些“相同”的条目有不同的键,或者额外的数据。我想将它们合并成几个主文件(BibTeX 背后的整个想法,对吧?)。如果bibtool给出一个没有重复(ha!)大约 20,000 行的文件,手工就不好玩了...