我创建了语法分析器。如果发现语法错误,程序显示错误消息并停止运行。我还需要显示符号的行和列是什么导致错误。
分析器算法存在问题。它从文件中获取文本。将其拆分为语法结构列表(例如:int,bool,for)和单个符号。像:
"int[] foo = new int[5];"
"int" -> "[" -> "]" -> "f" -> "o" -> "o" -> "=" ->
-> "new" -> "int" -> "[" -> "5" -> "]" -> ";"
Analyzer在发现语法错误或整篇文本之前逐个获取此列表的元素。
那么,如果发现sybtax的错误点是什么,在源文本中定义的简单方法是什么?
例如:
int[] foo = new int[5];
string[) foo; //syntax error in 2 line 8 column
我可以按符号读取源文本,并保存每个元素的位置。但这意味着对分析器代码进行了相当严格的修改。
也许这是一个更好的解决方案?
如果这很重要,我会使用c#。
答案 0 :(得分:1)
你可能在线上有一个循环,然后你可以很容易地维护一个行计数器变量。
对于该列,您可以将当前行中的标记长度添加到检测到的错误中。