初次在專案中使用antlr,剛做了第一版,功能很簡單(參不多正則都能做╮(╯▽╰)╭)
用antlr做表示式引擎,分析表示式變數和函式
舉例:表示式為[a]+[b]>[c]*([d]+[e]) ,可以分析出中的變數
sum([a]+1000), 可以分析出變數,並得到函式名,進行運算,或是直接輸出
這裡有個antlr介紹的小文章:
原始碼:
options
antlr分析輸出為ast樹
tokens
定義ast樹上的節點,可以再rule中使用
methodexpr
: identifier lparen (argument (comma argument)*)? rparen -> ^(call identifier argument*)
;
給出乙個函式的rule,表示遇到前邊的翻譯為call為根的樹,如下
fragment exponent
: ('e'|'e') integer_literal
;
fragment中的lexer是不能成為樹節點的,可以被其他使用,相當於.g的全域性變數
datetime_literal
: '\'' string_literal '\''
;string_literal
: '"' (~('"'|'['|']'))* '"'
;identifier
: letter (letter|digit)*
;
這些是可以成為ast的node的lexer
貼乙個antlr的工具antlrwork,很好用,可以網上搜搜
正規表示式學習 引擎
目錄傳統nfa優化 優化2 將文字獨立出來 優化3 將錨點獨立出來 優化4 模擬開頭字元識別 優化5 使用固化分組和占有優先量詞 優化6 消除迴圈 傳統型nfa支援忽略優先量詞 dfa不支援捕獲型括號和回溯 優先選擇最左端的匹配結果 標準的匹配量詞是匹配優先的 多選結構按序排列,合理安排次序,減少回...
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...
中綴表示式 字首表示式 字尾表示式
中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...