如何用我的语言阅读文件?
我试图理解语言是如何工作的。我想知道如何创建一个简单的语法来使用 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/