簡體   English   中英

試圖了解C語法

[英]Trying to understand C Grammar

我開始了遞歸解析器的旅程,並一直在研究C語法,試圖了解它如何在我的代碼中復制它。

然后我看到了:

assignmentExpression
:   conditionalExpression
|   unaryExpression assignmentOperator assignmentExpression
|   DigitSequence // for
;

特別是這部分:

unaryExpression assignmentOperator assignmentExpression

根據我的理解(較差,可能是錯誤的),一元表達式可以是一個常數(如果遵循語法的其余部分),則看起來這是1 = 1是有效的,這顯然是錯誤的。 我搜索了C解析器,甚至是GCC源代碼,而assignmentExpression函數從沒有真正與unaryExpression部分相關的代碼。

所以我真的很困惑。 我可能在這里錯過了一些非常重要的東西。

C的語法沒有完全描述。 有效的C程序必須符合語法,但還必須符合許多其他規則,例如與類型系統有關的規則。

因此,您是對的: 1 = 1符合您引用的規則,但是無論如何都是無效的,因為左側不是左值。

(請注意,有些編譯器實際上可能將1 = 1視為語法錯誤,因為它們可能會將其他一些限制納入適用的語法中。這是允許的;規范為編譯器在實現事情上提供了很大的靈活性,例如只要他們能夠正確處理有效程序。)

暫無
暫無

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

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