首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Peg.js打开文件?

如何使用Peg.js打开文件?
EN

Stack Overflow用户
提问于 2019-08-22 18:20:19
回答 1查看 154关注 0票数 1

如何用我的语言读取文件?

我正在努力理解语言​​是如何工作的。我想知道如何创建一个简单的语法来使用Peg.js读取文件。

在Python中,它是这样的

代码语言:javascript
复制
f= open("testfile.txt","w+")

语法实例在Peg.js中的应用

代码语言:javascript
复制
{
   var keywords = ["f=", "open"];
}

Expression =
    word:$(Word) { return { word: word } } /
    keyword:$(Keyword) { return { keyword: keyword } }

// Word will match everything except "f" and "open"
Word = word:$([a-zA-Z]+) &{ return !keywords.includes(word) }

Keyword = [a-zA-Z]+

start
  = f open symbol

open
  = attribute:',"w+"'? __ { return write; }
  = attribute:'include'? __ { return include; }

include
  = include : "'_ exp:[a-zA-Z]+ _'" _ { return include; }

symbol
  = '("' _ exp:[a-zA-Z]+ _ '")' { return [ exp.join('') ]; }

// optional whitespace
_  = [ \t\r\n]*

// mandatory whitespace
__ = [ \t\r\n]+

但我知道这个错误:

第21行,第3列:预期"/“、";”、注释、输入结束、行尾、标识符或空格,但"=“找到。

样本:Peg.js

代码语言:javascript
复制
f= open("testfile.txt","w+")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-23 14:29:45

您得到了语法错误,因为open的定义包含两个=,我假设您希望第二个=成为/。然后open将匹配字符串,"w+" (或nothing)或include

不过,这并不是代码中唯一的问题。以下是我注意到的其他一些问题:

  • 你的前三条规则和其他规则是不互相使用的。因此,如果您使用Expression作为您的开始规则(默认的第一条规则),那么只有前三条规则才重要。如果您使用start作为开始规则,那么前三个规则根本不重要。
  • 在关键字数组中列出"f=",然后检查该数组中是否存在与[a-zA-Z]+匹配的字符串。但是f=不匹配这个模式,所以在数组中使用它是没有意义的。
  • 您将start定义为f open symbol,但f在任何地方都没有定义。
  • "'_ exp:[a-zA-Z]+ _'"匹配文字字符串'_ exp:[a-zA-Z]+ _'。这几乎肯定不是你想要的。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57615086

复制
相关文章

相似问题

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