[英]how to parse an expression step by step in c# (preferably visitor pattern)
我是C#的新手。 我有一个关于解析字符串的问题。 如果我有一个包含圆顶线的文件,例如PC: SWITCH_A == ON
或类似PC: defined(SWITCH_B) && SWITCH_C == OFF
的字符串PC: SWITCH_A == ON
PC: defined(SWITCH_B) && SWITCH_C == OFF
。 这里所有的运算符(==,&&,已定义)都是字符串,所有的开关名称(SWITCH_A)及其值都是标识符(OFF)。 我如何解析这类字符串? 我是否首先需要标记化它们,然后将它们用换行符或空格分隔,然后再创建一个抽象语法树来解析它们? 我还需要首先将所有标识符存储在字典中吗? 我不知道解析任何人都可以帮忙吗? 一个例子告诉我该怎么做,应该包括哪些方法和类? 谢谢。
不幸的是。 如果要解析的语法是自定义的,而不是已经存在用于解析源的编译器的标准语法,则必须标记它们。
您可以利用表达式树 。 它们位于.NET Framework中,用于构建和评估动态语言。
要开始解析语法,您必须拥有一个语法文件,该文件描述每行中语法的所有可能情况。 之后,您可以开始解析行并构建您的表达式树。
解析任何源代码通常一次执行一个字符,因为每个字符可能会更改正在解析的片段的整个语义。
因此,我建议您先从语法文档中获取所需的语法,然后再开始编写解析器。
确保您尝试解析的语法没有任何东西,因为这类项目往往容易出错且耗时
现在,由于您的高级语法是
表达式:: =标识符| 整数值| BooleanExpression
Identifier
和IntegerValue
是源中的常量文字,因此您需要开始寻找BooleanExpression
。
要查找BooleanExpression
您需要查找BooleanBinaryExpression
, BooleanUnaryExpression
, TrueExpression
或FalseExpression
。
您可以通过查找&&
或==
运算符,然后取左和右操作数来检测BooleanBinaryExpression
。
要检测BooleanUnaryExpression
您需要查找defined
的单词,然后解析括号中的标识符。
等等...
请注意,您的语法支持语法中的递归,请查看AndExpression
或EqualsExpression
的定义,它们均指向Expression
AndExpression :: =表达式'&&'表达式
EqualsExpression :: =表达式'=='表达式
.NET Framework的String类中有很多方法可以帮助您检测和解析语法。
另一种选择是,您可以寻找针对c#的解析器生成器。 例如,请参阅ANTLR
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.