如何用我的语言读取文件?
我正在努力理解语言是如何工作的。我想知道如何创建一个简单的语法来使用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]+但我知道这个错误:
第21行,第3列:预期"/“、";”、注释、输入结束、行尾、标识符或空格,但"=“找到。
样本:Peg.js
f= open("testfile.txt","w+")发布于 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]+ _'。这几乎肯定不是你想要的。https://stackoverflow.com/questions/57615086
复制相似问题