相关疑难解决方法(0)

如何改进语法中的错误报告?

如果语法不匹配,有没有办法让Perl 6生成错误消息?或者至少返回它处理的最后一个数据的位置?如果从解析器获得的所有内容都是"不匹配",则很难修复语法错误.

grammar parsing perl6 raku

12
推荐指数
1
解决办法
560
查看次数

正则表达式/令牌/规则匹配嵌套的花括号?

我需要匹配key = valueBibTeX 文件中对的值,这些文件可以包含任意嵌套的大括号,由大括号分隔。我最多匹配两个深嵌套的花括号,就像{some {stuff} like {this}}kludgey一样:

    token brace-value {
    '{' <-[{}]>* ['{' <-[}]>* '}' <-[{}]>* ]* '}'
    }
Run Code Online (Sandbox Code Playgroud)

我对再往下一层的想法感到不寒而栗……但是正确解析我的 BibTeX 内容至少需要三层深。

是的,我知道周围有 BibTeX 解析器,但我需要获取完整的条目以进行进一步处理,同时查看几个键。我的*.bib文件相当温和(我不介意手动处理一些杂散条目),问题是我有很多文件,并且有很多重叠。但是一些“相同”的条目有不同的键,或者额外的数据。我想将它们合并成几个主文件(BibTeX 背后的整个想法,对吧?)。如果bibtool给出一个没有重复(ha!)大约 20,000 行的文件,手工就不好玩了...

grammar raku

10
推荐指数
2
解决办法
250
查看次数

如何将 Raku Grammar 标记固定为仅在字符串末尾时匹配

我已经写了这个 - 效果很好:

use Grammar::Tracer;

my grammar Lambda {
    token  TOP       { <signature> <body> ' as ' <r-type> }
    rule  signature { '|' <a-sig> [',' <b-sig>]? '|' }
    rule  a-sig     { 'a:' <a-type> }
    rule  b-sig     { 'b:' <b-type> }
    token body      { '(' <expr> ')' <?before ' as '> }
    token expr      { <-[()]>* }
    token a-type    { @types }
    token b-type    { @types }
    token r-type    { @types }
}

Lambda.parse("|a: i32, b: i32| (a + b) as …
Run Code Online (Sandbox Code Playgroud)

grammar raku

8
推荐指数
1
解决办法
108
查看次数

raku 语法的标记不会命中文档的第一次出现,但会命中以下类似的出现

我想用希伯来语处理整个 Tanach 文件。为此,我选择了 Raku 语言,因为它的一些特性(语法和 unicode 支持)。

因此,我定义了一些标记来选择相关数据。

grammar HEB {
        token TOP {'<hebrewname>'<t_word>'</hebrewname>'}
        token t_word {<graph>+}
};

grammar CHA {
        token TOP {'<c n="'<t_number>'">'}
        token t_number {\d+}
};

grammar VER {
        token TOP {'<v n="'<t_number>'">'}
        token t_number {\d+}
};

grammar WOR {
        token TOP {'<w>'<t_word>'</w>'}
        token t_word {<graph>+}
};
Run Code Online (Sandbox Code Playgroud)

在这里,文档的一小部分(XML 格式的 Tanach)足以说明问题:

<names> <name>Genesis</name> <abbrev>Gen</abbrev> <number>1</number> <filename>Genesis</filename> <hebrewname>??????</hebrewname> </names> <c n="1"> <v n="1"> <w>???/?????????</w> <w>???????</w> <w>?????????</w> <w>????</w> <w>??/??????????</w> <w>??/????</w> <w>??/???????</w> </v> <v n="2"> <w>??/??/??????</w> <w>????????</w> <w>???????</w> <w>??/??????</w> <w>??/????????</w> <w>????</w> …

xml grammar hebrew raku

7
推荐指数
2
解决办法
159
查看次数

白色空间何时在Perl6语法中真的很重要?

当Perl 6语法规则中的空白区域显着时,有人可以澄清吗?我正在通过反复试验来学习一些,但似乎无法在文档中找到实际的规则.

例1:

rule number {
    <pm> \d '.'? \d*[ <pm> \d* ]?
}

rule pm {
    [ '+' || '-' ]?
}
Run Code Online (Sandbox Code Playgroud)

将匹配一个数字2.68156e+154,而不关心存在的空格rule number.但是,如果我之后添加一个空格\d*,它将失败.(即<pm> \d '.'? \d* [ <pm> \d* ]?失败).

示例2:如果我试图在单词的中间找到文字,那么它们之间的间距很重要.即,在找到条目Double_t Delta_phi_R_1_9_pTproj_13_dat_cent_fx3001[52] = {

grammar TOP {
    ^ .*? <word-to-find> .* ?
}
rule word-to-find {
    \w*?fx\w*
}
Run Code Online (Sandbox Code Playgroud)

会找到这个词.然而,如果规则的定义word-to-find更改为: fx\w* fx\w*\w*fx \w*那么就不会进行匹配.

此外,然后定义'[52]'将匹配,而定义'fx[52]'将不匹配.

感谢您的任何见解.指向文档中正确点的指针将有很大帮助!谢谢,

whitespace grammar perl6

5
推荐指数
2
解决办法
209
查看次数

标签 统计

grammar ×5

raku ×4

perl6 ×2

hebrew ×1

parsing ×1

whitespace ×1

xml ×1