第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

代幣是否應(yīng)該成為 AST 節(jié)點(diǎn)的一部分

代幣是否應(yīng)該成為 AST 節(jié)點(diǎn)的一部分

Go
qq_笑_17 2023-01-03 14:20:35
我問這個(gè)問題的一些背景。我正在閱讀 Writing An Interpreter In Go,在書中,Tokenstruct is inside of AST Nodes。Node是一種可以通過實(shí)現(xiàn)tokenLiteral()和實(shí)現(xiàn)的類型String()type IntegerLiteral struct {    Token token.Token    Value int64}type Node interface {    TokenLiteral() string    String() string}我了解到在現(xiàn)實(shí)生活中,編譯器必須提供錯(cuò)誤的行和列位置,而詞法分析器無法檢測到錯(cuò)誤,因此必須將此信息傳遞給解析器。例如go編譯器使用下面作為 AST 節(jié)點(diǎn)。type Pos int// All node types implement the Node interface.type Node interface {    Pos() token.Pos // position of first character belonging to the node    End() token.Pos // position of first character immediately after the node}我的問題的長版AFAIK,編譯前端的工作方式如下stream of chars -> streams of tokens -> AST:在每個(gè)級別中,“某些東西”被抽象出來。在我眼里,一個(gè)Token不應(yīng)該是的一部分AST Node如果令牌是AST Node你能舉例說明 PL 選擇哪種方式嗎
查看完整描述

1 回答

?
白衣染霜花

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊

AST 的確切性質(zhì)是編譯器(或解析庫)的實(shí)現(xiàn)細(xì)節(jié),不同的 AST 實(shí)現(xiàn)將具有不同的字段,甚至相同語言的不同 AST 實(shí)現(xiàn)。

幾乎總是有某種機(jī)制可以從 AST 節(jié)點(diǎn)中提取源位置信息,用于錯(cuò)誤消息和嵌入在編譯輸出中的調(diào)試信息。這可以通過向每個(gè) AST 節(jié)點(diǎn)類型添加一個(gè)(或多個(gè))位置對象來完成?;蛘?,位置信息可以保存在可以從 AST 節(jié)點(diǎn)以某種方式發(fā)現(xiàn)的令牌對象中。或者混合使用這些策略并提供 Location getter 方法。

我想不出一個(gè)很好的理由來堅(jiān)持或禁止 AST 中的令牌對象。引用單個(gè)令牌文字或標(biāo)識符的 AST 節(jié)點(diǎn)很可能保存在令牌對象中。為什么不?


查看完整回答
反對 回復(fù) 2023-01-03
  • 1 回答
  • 0 關(guān)注
  • 87 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號