至少有一个
Nearley at least one
我有一个语法,我希望在两个术语之间有一些空格(包括换行符)。应该有一些空格,即如果两个术语相接触,它应该失败,但是可以有任意多的空格。我遇到的问题是空格和换行符是不同的标记。我不知道如何在 nearley 中制作 "at least one"。
我设法用 EBNF 修饰符解决了这个问题:
ws -> %WS | %NL
# At least one whitespace
someWS -> ws:+
# none or some whitespace
manyWS -> ws:*
如果您正在使用 moo.js
,那么您可以使用正则表达式预定义空格。
@{%
const moo = require('moo')
let lexer = moo.compile({
space: {match: /\s+/, lineBreaks: true}
// other rules
});
%}
@lexer lexer
_ -> null | %space {% d => null %} // any amount of white space or none
__ -> %space {% d => " " %} // at least one white space token
我有一个语法,我希望在两个术语之间有一些空格(包括换行符)。应该有一些空格,即如果两个术语相接触,它应该失败,但是可以有任意多的空格。我遇到的问题是空格和换行符是不同的标记。我不知道如何在 nearley 中制作 "at least one"。
我设法用 EBNF 修饰符解决了这个问题:
ws -> %WS | %NL
# At least one whitespace
someWS -> ws:+
# none or some whitespace
manyWS -> ws:*
如果您正在使用 moo.js
,那么您可以使用正则表达式预定义空格。
@{%
const moo = require('moo')
let lexer = moo.compile({
space: {match: /\s+/, lineBreaks: true}
// other rules
});
%}
@lexer lexer
_ -> null | %space {% d => null %} // any amount of white space or none
__ -> %space {% d => " " %} // at least one white space token