亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ANTLR中的解析器規則和詞法分析器規則之間的實際區別?

ANTLR中的解析器規則和詞法分析器規則之間的實際區別?

明月笑刀無情 2019-11-18 18:30:45
我了解理論上將解析器規則和詞法分析器規則分開的理論,但是ANTLR中的這兩個語句之間的實際區別是什么:my_rule: ... ;MY_RULE: ... ;它們會導致不同的AST樹嗎?不同的表現?潛在的歧義?
查看完整描述

2 回答

?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

仁寫道:


...這兩個語句在ANTLR中有什么實際區別...


MY_RULE將用于標記您的輸入源。它代表了您語言的基本組成部分。


my_rule 從解析器中調用,它由零個或多個其他解析器規則或詞法分析器生成的標記組成。


就是這樣。


仁寫道:


它們會導致不同的AST樹嗎?不同的表現?...


解析器使用詞法分析器生成的令牌來構建AST,因此這些問題對我而言毫無意義。詞法分析器僅向解析器“饋送”一維令牌流。


查看完整回答
反對 回復 2019-11-18
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

這篇文章可能會有所幫助:


詞法分析器負責第一步,唯一的工作是從文本創建“令牌流”。它不負責理解您語言的語義,僅對理解您語言的語法感興趣。


例如,語法是一個規則,即標識符必須僅使用字符,數字和下劃線-只要它不以數字開頭。詞法分析器的職責是了解此規則。在這種情況下,詞法分析器將接受字符“ asd_123”的序列,但拒絕字符“ 12dsadsa”(假設沒有另一條規則適用于此文本)。當看到有效的文本示例時,它可能會向令牌流中發送令牌,例如IDENTIFIER(asd_123)。


請注意,我說的是“標識符”,是諸如變量名,函數名,名稱空間名稱等之類的通用術語。解析器將是能夠理解該標識符出現的上下文的事物,以便其進一步指定該令牌作為某物的名稱。


(旁注:令牌只是賦予令牌流元素的唯一名稱。lexeme是匹配令牌的文本。我將lexeme寫在令牌旁邊的括號中。例如NUMBER(123)。在這種情況下,這是一個數字標記,其詞素為'123'。但是,對于某些標記(例如運算符),我省略了詞素,因為它是多余的。例如,我將為分號標記而不是SEMICOLON( ;))。



查看完整回答
反對 回復 2019-11-18
  • 2 回答
  • 0 關注
  • 822 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號