Parsing 如何根据代码共享构造递归下降函数?
我的语法包含:Parsing 如何根据代码共享构造递归下降函数?,parsing,ocaml,Parsing,Ocaml,我的语法包含: constant ::= integer-literal | char-literal ∣ string-literal expression ::= constant pattern ::= constant | char-literal .. char-literal 我刚刚开始递归下降解析,我想知道如何构造我的代码,以便基本上重用常量解析。问题是,当我看到字符文本时,我不能只解析模式中的常量。 如果下一个标记是。,则它是另一种模式 想象一下拥有以下代码: let pa
constant ::= integer-literal
| char-literal
∣ string-literal
expression ::= constant
pattern ::= constant | char-literal .. char-literal
我刚刚开始递归下降解析,我想知道如何构造我的代码,以便基本上重用常量
解析。问题是,当我看到字符文本时,我不能只解析模式中的常量。
如果下一个标记是。
,则它是另一种模式
想象一下拥有以下代码:
let parseConstant p =
match p.token with
| Int i -> Const_int (int_of_string i)
| String s -> Const_string (s, None)
| Char c -> Const_char c
如何构造parseExpression
和parsePattern
函数以重用parseConstant
?或者我只是为模式创建一个不同的parsePatternConstantMaybedTotherGrammarthing
函数吗?我可能要做的是让模式的代码调用parseConstant
。然后看下一个标记。如果是。
,那么如果该常量是字符常量,则可以解析字符范围的其余部分。如果常量不是字符常量,则会出现语法错误。如果下一个标记不是。
您就完成了对模式的解析
递归下降解析器压力小的原因是您可以直接编写任何奇数情况。您不必使它们适合解析框架——它只是代码。要付出的代价是,你必须编写代码,并小心地将其正确无误。谢谢你的指导!