antlr表示式引擎

2021-09-12 03:16:57 字數 916 閱讀 4659

初次在專案中使用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 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...

中綴表示式 字首表示式 字尾表示式

中綴表示式 中綴記法 中綴表示式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處於運算元的中間。中綴表示式是人們常用的算術表示方法。雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。...