簡體   English   中英

算術表達式語法

[英]Grammar for Arithmetic Expressions

我被分配了一個為算術表達式創建解析器的任務(帶括號和一元運算符)。 所以我只想知道這個語法是否正確,是否為LL(1)形式,並為此構造解析表時遇到實際問題

 S  -> TS'
 S' -> +TS' | -TS' | epsilon
 T  -> UT'
 T' -> *UT' | /UT' | epsilon
 U  -> VX
 X  -> ^U | epsilon
 V  -> (W) | -W | W | epsilon
 W  -> S | number

優先級(從高到低)

 (), unary –
 ^
 *, /
 +, -

二進制運算符的關聯性

 ^ = right
 +, -, *, / = left

它是LL(1)形式嗎?

要判斷語法是否為LL(1),您需要擴展生產規則。 如果您可以生成任何產生式序列,從而導致左側在第一手出現在右側,則語法不是LL(1)。

例如,考慮以下規則:

X --> X | x | epsilon

顯然,這不是LL(1)語法的一部分,因為如果應用最左邊的產生式,則它是左遞歸的。 但是呢?

X --> Y | x
Y --> X + X

這也不是LL(1)語法,但是更微妙:首先您必須應用X-> Y,然后應用Y-> X + X才能看到現在有了X-> X + X ,這是左遞歸的。

對於一元加號運算符,您似乎缺少任何內容。 試試這個...

V->(W)| -W | + W | ε

暫無
暫無

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

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