如何用 Peg.js 打开文件?
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]+
但是我得到这个错误:
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]+ _'
。这几乎肯定不是你想要的。
如何用我的语言阅读文件?
我正在尝试了解语言是如何工作的。我想知道如何创建一个简单的语法来使用 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]+ _'
。这几乎肯定不是你想要的。