2013-03-24 121 views
8

是否有現有的POSIX sh語法可用,或者我是否必須直接從規範中找出它?POSIX sh EBNF語法

請注意我對 sh沒有太大興趣;一個擴展但符合標準的sh對我的目的來說也不錯。

回答

5

我已經做了一些挖掘和發現這些資源:

  1. 一個sh教程位於here

  2. 含猛砸2.0的BNF語法(從here消失)的有關一個bash書附錄still here

我查看了的來源,pdkshposh,但在我所需要的抽象層次上沒有發現任何東西。

+0

@ceving發現另一個副本並將其保存到WayBackMachine中,應該增加鏈接的使用壽命。 – rubenvb 2017-02-07 13:09:37

1

我希望sh,csh,ash,bash包含解析器。這些的GNU版本是開源的;你可能會去那裏看看。

+0

這不是EBNF - http://git.savannah.gnu.org/cgit/bash.git/plain/parse.y – user1709408 2016-02-02 20:20:41

+0

不是純粹的EBNF,而是Yacc的變體。如果你看,你可以找到語法規則。是的,他們被埋在YACC/Lex定義的其餘部分之中。歡迎使用真正的工作工具語法定義。 – 2016-02-02 22:19:22

6

POSIX標準定義了POSIX shell的grammar。該定義包括一個帶註釋的Yacc語法。因此,它可以或多或少機械地轉換成EBNF。

如果你想要一個'真正'的語法,那麼你必須看起來更難。選擇你的'真正的外殼',找到源頭,並從中找出語法。

請注意,EBNF並未廣泛使用。它的實用價值有限,並不是因爲基本上沒有支持它的工具。因此,你不可能找到現成的EBNF語法(幾乎任何東西)。

+0

[BNF](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#History)很容易使用:[Grako](https://pypi.python.org/pypi/grako/)從[BNF語法]派生[AST](https://pypi.python.org/pypi/grako/3.6.6#abstract-syntax-trees-asts)(http://stackoverflow.com/questions/334479/repository (bash)(http://my.safaribooksonline.com/book/operating-systems-and-server-administration/unix/1565923472/syntax/lbs.appd.div.3)) [Python](https://docs.python.org/3.6/reference/grammar.html?highlight=grammar),[etc](https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form #Software_using_BNF) – jalanb 2015-12-05 15:50:52