2014-09-13 63 views
1

目前,我正在學習如何解析Java中的Scheme。這裏是基本列表(我不知道它的正式名稱是什麼)編輯:語法!你叫什麼以及如何閱讀? (解析方案)

exp -> (rest 
    | #f 
    | #t 
    | ' exp 
    | integer_constant 
    | string_constant 
    | identifier 

rest ->) 
    | exp+ [ . exp ]) 

我的問題是:那個名單叫什麼名字,比如說它的正式名稱是什麼? 「解析列表」?編輯:根據評論,它被稱爲語法。

如何閱讀?我的猜測是表達式在左右括號之間,例如:(exp)

另外我想任何線exp -> (restrest ->)#f#t' expinteger_constantstring_constant之間的對象的,identifier去代替在前面的示例實施例的表達。例如像:(#t)

而名單上的最後一個項目是| exp+ [ . exp]),我想是另一種表達到第一右括號的右側,例如與前面的例子:((#t) exp)

最後,這位[ . exp],支架只是說它是可選的?

如果我錯了,請糾正我。

+0

它被稱爲「語法」。特別是,有些程序(稱爲「語法分析器生成器」或「編譯器編譯器」),在給定語法的情況下,可以爲您創建分析器。 – 2014-09-13 19:44:48

+0

有趣的名字,謝謝!關於解析器生成器的好處,但是我的語法推導正確嗎? – Life 2014-09-13 20:37:46

回答

1

這被稱爲語法。編寫語法有很多不同的語法,但它們都非常相似。

這裏->可以解讀爲「是」,|作爲「或」,+爲一個或多個,並且[],當你懷疑爲「任選」。這裏使用的其他符號只代表自己。因此,這語法可以讀取這樣的:

  1. 表達式是:

    • 開口圓括號接着是「休息」(參見2)
    • 或散列標記後面跟有字母˚F
    • 或散列標記後面跟有字母噸
    • OR單引號後跟表達式
    • OR的整數常數(如123
    • OR字符串常量(如"foo"
    • 或標識符(如foo
  2. A 「靜止」 是:

    • 一個閉括號
    • OR一個或更多的表達式,可選地後跟一個點和另一個表達式,然後是一個閉括號

所以foo是表達式(因爲標識符是表達式),()是表達式(因爲)是「休息」和(rest是一個表達式,(foo)是表達式(因爲foo是一個表達式,exp)是一個「休息」和(rest是一個表達式)等等。

+0

非常詳細的帖子!我完全理解! – Life 2014-09-13 21:13:07