簡體   English   中英

可與閉包編譯器一起使用的 JavaScript 解析器生成器

[英]JavaScript Parser Generators that can be used with the Closure Compiler

我一直在尋找用於 Javascript 的解析器生成器,並找到了一些(即 PEG.js)。

不過,尚不清楚的是,這些與 Google Closure Compiler 之類的東西一起玩得有多好。

例如,它看起來像在 PEG.js 中,我可以給它代碼作為規則的一部分來執行,但是我如何將函數(可能被編譯器重命名)綁定到規則?

此外,我不清楚哪些解析器支持傳入符號表。 例如,我想定義一個語法來接受像“A 或 B”這樣的表達式,其中“A”和“B”的值是在運行時定義的,例如,作為用戶正在查看的記錄的屬性。

PEG.js 當然不是必需的,只是似乎出現在搜索結果中並且看起來可用的唯一解析器生成器。

有幾個解析器使用JavaScript作為輸出列出的語言在這里 對於實際上是用Javascript構建的,無需在瀏覽器中預編譯就可以使用的解析器,似乎除了PEG.js還有JS/CC

還有其他方法,比如將語法發送到服務器上的解析器生成器。 對於會有Jison (該位置包括它的演示)使用和的NodeJS其他語言寫的從上面的列表可能其他解析器可以在你的服務器上運行了。 如果這些生成的文件與閉包編譯器兼容,則可以在服務器上編譯它們,然后將生成的解析器的位置發送回站點。 也許解析器已經優化過,編譯器沒有什么可做的,應該先檢查一下。

服務器解決方案意味着符號不是在運行時真正定義的,而是在運行時定義的語法,並且可以為該語法生成​​解析器。 這是一個很大的不同,但可能正是您所需要的。 如果您只需要一個用於檢查標識符是否存在或具有正確(靜態)類型的符號表,那么分析生成的解析樹並在此時拋出錯誤可能就足夠了。

我的 AGL 解析器構建器是用 Kotlin 通用編寫的,因此它可以用於任何 Kotlin 目標(JVM、JavaScript、本機代碼等)。

const agl_module = require('net.akehurst.language-agl-processor');
const Agl = agl_module.net.akehurst.language.agl.processor.Agl;
const grammarStr = ...
const sentence = ...
const proc = Agl.processorFromString(grammarStr);
const asm = proc.process(sentence).toArray();

有關完整詳細信息,請參閱:

https://medium.com/@dr.david.h.akehurst/a-kotlin-multi-platform-parser-usable-from-a-jvm-or-javascript-59e870832a79

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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