簡體   English   中英

如何使用 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]+

但我收到此錯誤:

第 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM