grammar Arith;
exp : LPAREN exp RPAREN
| fun
| num
| exp (OP exp)+
;
num : LPAREN num RPAREN
| LESS num
| INT
| INT 'b'
| '0x' INT
;
fun : LPAREN fun RPAREN
| LESS fun
| FUN_TXT LPAREN exp RPAREN
| 'pow' LPAREN exp ',' exp RPAREN
;
INT : ('0'..'9')+ ;
LPAREN : '(' ;
RPAREN : ')' ;
FUN_TXT : 'log' | 'acos' | 'asin' | 'atan' | 'cos' | 'abs' | 'sin' | 'sqrt' | 'tan' ;
OP : ADD | LESS | MUL | DIV | MOD ;
ADD : '+' ;
LESS : '-' ;
MUL : '*' ;
DIV: '/' ;
MOD: '%' ;
WS : [ \t\r\n] -> skip ;
首先,我将简化您的规则,以获得num和乐趣
num : INT
| INT 'b'
| '0x' INT
;
fun : FUN_TXT LPAREN exp RPAREN
| 'pow' LPAREN exp ',' exp RPAREN
;
括号和减号由exp规则处理。
您还需要将ADD和SUB从乘法运算符中分离出来,以获得正确的优先级。Antlr语法的计算器示例使用
expression
: multiplyingExpression ((PLUS|MINUS) multiplyingExpression)*
;
multiplyingExpression
: powExpression ((TIMES|DIV) powExpression)*
;
powExpression
: atom (POW expression)?
;
atom
: scientific
| variable
| LPAREN expression RPAREN
| func
;
scientific
: number (E number)?
;
func
: funcname LPAREN expression RPAREN
;
所以我已经用antlr4语法写了我的语法。然后我设置代码生成,现在我可以用自己定义的语言解析源文件。这很管用! 我采取的下一步是从表达式树创建对象模型。这也很管用。 我使用的是最新的ANTLR4:antlr 4.7.1。
由于问题不清楚,我先前的问题被搁置。 用特定查询再次过帐 我的要求是使用PHP解决任何数学复杂表达式。例如, 如果我有一个字符串“1(12)/34”,使用BODMAS规则,我必须求解它。但我也必须得到所有单独的步骤。 我提到的两个网站是: http://www.careerbless.com/calculators/ScientificCalculator/ http://web2.0calc.c
我有以下ANTLR4语法 除此之外还有一个问题:- 对于上面的场景,ANTLR没有抛出错误,表达式不应该是(Var1)(Var2)--它应该总是包含操作符(Var1)*(Var2)或(Var1)+(Var2)等。解析器错误树没有生成此错误。如何修改语法以确保即使是这种情况也被考虑在内。
Matplotlib 中的文本字符串都可以使用 Text Markup(一种文本标记语言)显现出来,具体的使用方法是将文本标记符放在一对美元符号 内,语法格式如下: 如果要绘制下标和上标,您需要使用 和 符号,下面是一个简单的示例: 上面代码的输出结果: Matplotlib数学表达式绘制 从上述示例可以看出,虽然数学表达式种类繁多,但是 Matplotlib 对各种数学符号都做了良好的支持。
表达式会通过parser生成抽象语法树。Native提供了解析引擎可以解析这个语法树,并计算出结果。 目前parser支持两大类功能: 基本四则运算、逻辑运算符、比较运算符 函数(如大部分的math函数、动画插值器函数、一些工具函数等) 下面是具体支持的情况: 运算符 + >= - <= * == - === () != % !== ** && > || < ! ?: Math函数 sin sqr