javascript - 如何用 Peg.js 打开文件?

标签 javascript parsing compiler-construction peg

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

我试图理解语言是如何工作的。我想知道如何创建一个简单的语法来使用 Peg.js 读取文件。
在 Python 中是这样的

f= open("testfile.txt","w+")

Peg.js 中的语法示例

{
   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]+

但是我得到这个错误:

Line 21, column 3: Expected "/", ";", comment, end of input, end of line, identifier, or whitespace but "=" found.

示例:Peg.js

f= open("testfile.txt","w+")

最佳答案

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

但这不是您的代码中的唯一问题。以下是我注意到的其他一些内容:

  • 您的前三个规则与其他规则不相互使用。因此,如果您使用 Expression 作为开始规则(默认情况下它首先出现),则只有前三个规则很重要。如果您使用 start 作为开始规则,则前三个规则根本无关紧要。
  • 您在关键字数组中列出 "f=",然后检查匹配 [a-zA-Z]+ 的字符串是否在该数组中。但是 f= 不匹配该模式,因此将它放在数组中毫无意义。
  • 您将 start 定义为 f open symbol,但 f 未在任何地方定义。
  • "'_ exp:[a-zA-Z]+ _'" 匹配文字字符串 '_ exp:[a-zA-Z]+ _'。这几乎肯定不是您想要的。

关于javascript - 如何用 Peg.js 打开文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57615086/

相关文章:

file - 在lua中解析文件的二进制文件

javascript - XML-RPC 解析器?

c++ - 编译器什么时候需要访问库?

c++ - 如何获取LLVM全局变量常量值?

javascript - 带有切换按钮和禁用切换的类的选项卡式内容

javascript - 监听 Javascript 中的函数结果

java - 解析字符串

c++ - 在编译之前通过外部工具解析预处理源的任何方法?

javascript - 使用 .each 循环获取元素属性

javascript - 为什么 `useCallback` 不能总是返回相同的 ref