首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在NearleyJS中解析字符串中的字符串

在NearleyJS中解析字符串中的字符串
EN

Stack Overflow用户
提问于 2021-02-16 22:07:54
回答 1查看 27关注 0票数 0

嗨,我在CFG中很幼稚,我正在尝试为我的表达式编写一个语法,但我在解析nearley输入值中的字符串时遇到了一个问题。

下面是我的表达式

代码语言:javascript
复制
"(I have a person: where "1+1=2")"

下面是我的语法:

代码语言:javascript
复制
main -> statement {% id %}
statement -> "(" constline optional:? ")" 

constline -> "I have a person" {% id %}
optional -> ":where" _ "\"" whereclause "\"" _ {%d=>d[2]%}
whereclause -> _ expression _ compare _ expression {%d=> d[0]+d[1]+d[3]%}
expression -> numbers "+" numbers {% d=>d[0]+d[1]+d[2]%}
           | numbers "-" numbers  {% d=>d[0]+d[1]+d[2]%}
numbers -> digit
        | digit numbers {% d=> d[0]+d[1]%}
digit -> [0-9]
_ -> [\t]:*

现在,在解析时,我得到了下面的错误::where "1+1=2")

代码语言:javascript
复制
Unexpected "\"". Instead, I was expecting to see one of the following:
A character matching /[0-9]/ based on:
   digit -> /[0-9]/
   numbers-> digit 

请帮帮忙

EN

回答 1

Stack Overflow用户

发布于 2021-09-25 21:04:25

您的语法缺少使lexer正常工作的正则表达式,因此它无法理解大部分语法。此外,您还遗漏了比较闭包,我相信在我们的例子中它的意思是'=‘。我想这个应该可以了。

代码语言:javascript
复制
@{%
const moo = require('moo');
let lexer = moo .compile({
    //string: /"(?:\\["bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*"/,
    numbers: /[0-9]+/,
    '"': '"',
    'I have a person': 'I have a person',
    '(': '(',
    ')': ')',
    ':': ':',
    '+': '+',
    '=': '=',
    '=': '=',
    ws: /[ \t]/,
    'where': 'where',
    
});
console.clear();

%}

@lexer lexer

main -> "\"" statement "\"" {% d => d[1] %}
statement -> "(" constline optional:? ")" 

constline -> "I have a person" {% id %}
optional -> ":" _ "where" _ expressionString _ {%d=>d[3]%}
whereclause -> _ expressionString _ compare _ expressionString {%d=> d[0]+d[1]+d[3]%}
expressionString -> "\"" expression "\"" {% d => d[1] %}
expression -> numbers "+" numbers "=" numbers {% d=>d[0]+d[1]+d[2]%}
           | numbers "-" numbers "=" numbers {% d=>d[0]+d[1]+d[2]%}
numbers -> digit {% id %}
        | digit numbers {% d=> d[0]+d[1]%}
digit -> [0-9]
_ -> [ \t]:*

如果这对你有效,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66225942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档