[英]How open files with Peg.js?
我怎样才能用我的语言阅读文件?
我试图了解语言是如何工作的。 我想知道如何使用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+")
您收到语法错误,因为您的open
定义包含两个=
s。 我假设您希望第二个成为/
。 然后open
将匹配字符串,"w+"
(或什么都不匹配)或include
。
不过,这并不是您代码中的唯一问题。 以下是我注意到的其他一些:
Expression
作为您的开始规则(默认为先),则只有前三个规则很重要。 如果您使用start
作为开始规则,则前三个规则根本无关紧要。"f="
,然后检查匹配[a-zA-Z]+
的字符串是否在该数组中。 但是f=
与该模式不匹配,因此将它放在数组中毫无意义。start
定义为f open symbol
,但f
未在任何地方定义。"'_ exp:[a-zA-Z]+ _'"
匹配文字字符串'_ exp:[a-zA-Z]+ _'
。 这几乎肯定不是你想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.