我正在擴展baseClass Listener,並試圖讀取一些值,但似乎沒有順序中的任何層次結構。ANTLR4:樹構建
一個砍下我的語法的版本如下:
start: config_options+
config_options: (KEY) EQUALS^ (PATH | ALPHANUM) (' '|'\r'|'\n')* ;
KEY: 'key' ;
EQUALS: '=' ;
ALPHANUM: [0-9a-zA-Z]+ ;
但是這種實現的解析樹平在config_options水平(終端層面)iethe規則的開始具有config_options的很多孩子,但EQUALS不是config_options的子樹的根,所有的TOKENS都有規則config_options作爲根節點。我怎樣才能讓其中一個終端成爲根節點呢?
在這個特定的規則中,我不希望任何空格被捕獲,我知道有 - > skip指示詞法分析器,但有些情況下我確實需要空間。即字符串 '「(ALPHANUM |' ')''
(注:^似乎不工作)
一個例子輸入:
鍵= ABCDEFG
鍵= 90weata
鍵= acbefg9
所有我想要做的就是提取鍵和值對。我期望'='是根,兩個孩子將是關鍵和價值。
您將如何定義終端之間的關係?即得到等號的孩子。或者這在ANTLR4中不是一個有效的想法? 有沒有辦法創建一個AST而不是一個分析樹? – Har 2013-02-22 09:42:54
@ user1932405,創建一個額外的規則,例如'value':'config_options:KEY EQUALS value;值:(PATH | ALPHANUM)('''''''''''n')*;' – 2013-02-22 11:04:49
噢好吧,謝謝你,所以我不得不根據分析規則創建AST而不是令牌。 – Har 2013-02-22 15:11:25