J程序设计语言(E)BNF

J programming language (E)BNF

我正在为我的编程语言和编译器课程写一篇关于 J 编程语言的论文。由于它是一种相对不为人知(但有趣)的编程语言,我很难找到关于 (E)BNF 中 J 的形式语法的正确文档和信息,一些开源实现J,特别是词法分析器和语法分析器。

有人知道 J 编程语言的 (E)BNF 的准确来源吗?如果是这样,那是 LL 文法 还是 "put through" 解析器生成器?

J 使用基于堆栈的解析 table,一旦它有足够的信息就会评估句子。我认为,最好的来源是 Henry Rich 的 "J for C programmers" 的第 38 章和第 39 章。您需要能够与默示 J 融为一体才能充分利用这一点,但它应该作为对解析器的一个很好的介绍。 https://www.jsoftware.com/help/jforc/parsing_and_execution_i.htm#_Toc191734584 https://www.jsoftware.com/help/jforc/parsing_and_execution_ii.htm#_Toc191734586

了解 J 的评估的另一个来源是 trace 动词,它可以在 J 的最新版本的跟踪脚本中找到。例如。 for j901 in j901/addons/general/misc/trace.ijs 这提供了一个实践经验,将单步执行 J 句子并列出实施的规则和堆栈的当前状态。

如果您已经下载了 J 的插件,那么您的安装中就已经可以使用它了。

    load '~addons/general/misc/trace.ijs'
  trace '(+/ % #) 5 7 3 4 5 2' NB. returns the trace for the average of list of numbers
 --------------- 3 Adverb -----
 +
 /
 +/
 --------------- 5 Trident ----
 +/
 %
 #
 +/ % #
 --------------- 8 Paren ------
 (
 +/ % #
 )
 +/ % #
 --------------- 0 Monad ------
 +/ % #
 5 7 3 4 5 2
 4.33333
 ==============================
4.33333

(E)BNF 是一种用于上下文无关文法的符号技术。但是 J 是一种上下文相关的语言 [1,2]。 J 的解析规则列在 Dictionary II 中。 E [3].

参考文献:

  1. https://code.jsoftware.com/wiki/Guides/Language_FAQ/J_BNF
  2. http://www.jsoftware.com/pipermail/general/2005-July/023632.html
  3. https://www.jsoftware.com/help/dictionary/dicte.htm