我正在为我的编程语言和编译器课程写一篇关于J编程语言的论文。因为它是一种相对未知(但很有趣)的编程语言,所以我很难找到关于J在(E)BNF中的正式语法的正确文档和信息,这是J的一些开源实现,特别是词法分析器和解析器。
有谁知道J编程语言的(E)BNF的准确来源吗?如果是这样的话,这是一个LL语法,它能“通过”解析器生成器吗?
发布于 2020-01-10 16:19:09
(E)BNF是一种上下文无关文法的表示法。但是J是一种上下文敏感的语言,1,2。j的解析规则列在词典II。
参考文献:
发布于 2020-01-10 15:51:10
J使用一个基于堆栈的解析表,一旦得到足够的信息,就会对句子进行评估。我认为最好的来源是亨利·里奇的“面向C程序员的J”第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.Eg的最新版本的跟踪脚本中找到。对于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.33333https://stackoverflow.com/questions/59671800
复制相似问题