Java 在以下情况下,我应该使用regexp还是自顶向下的LL(1)解析器?

Java 在以下情况下,我应该使用regexp还是自顶向下的LL(1)解析器?,java,parsing,lexer,Java,Parsing,Lexer,我需要解析flightplan文档以提取相关信息。下面给出了一份示例文件: (FPL-REU974-IS -B77L/H-SDE1E2E3GFHIJ4J5M1RWXYZ/LB1D1 -LFPG1845 -N0490F310 OKASI UL612 MILPA UM730 TOP UL50 ELB UL12 VELAD UM728 NERAR UP3 RCA/N0489F350 UR611 TIKAT UG300 MAV UM665G ITLOX UM665 UVESO/N0486F370 DCT

我需要解析flightplan文档以提取相关信息。下面给出了一份示例文件:

(FPL-REU974-IS
-B77L/H-SDE1E2E3GFHIJ4J5M1RWXYZ/LB1D1
-LFPG1845
-N0490F310 OKASI UL612 MILPA UM730 TOP UL50 ELB UL12 VELAD UM728 NERAR UP3
RCA/N0489F350 UR611 TIKAT UG300 MAV UM665G ITLOX UM665 UVESO/N0486F370 DCT DENLI
UR780 MIDRI UR780G UVENA
-FMEE1036 FIMP
-PBN/A1D1L1S1 NAV/RNP10 DOF/121114 REG/FOLRA EET/LSAS0039 LFFF0039 LIMM0048 LIRR0111
LMMM0218 HLLL0237 HECC0343 HSSS0425 HAAA0545 HKNA0700 HCSM0701 FSSS0745 FMMM0900
SEL/CGFR ORGN/RUKOUU PER/C SRC/RQP RMK/ADSB ACARS EQUIPPED TCAS EQUIPPED)
如上所示。飞行计划信息包含在
之间。第一行包含
FPL
“关键字”、飞机标识(REU974)和航班类型(IS)(
-
用作分隔符)

以下行包含有关航班的附加信息,如出发机场和时间(第3行,LFPG1845)、航路点列表(第4行)、到达机场和时间(第5行)等

我正在考虑两种解析数据的方法:

  • 使用正则表达式从文档中提取相关信息
  • 编写一个自上而下的LL(1)递归下降字典和解析器,并将FrimePoice文档视为“DSL”。李>
在后一种情况下,我将编写一个lexer,它将返回
-
/
\n
编号
单词
。这些标记将依次由解析器使用,以便从飞行计划中提取相关信息。解析器还将验证输入。例如,在第一行中,飞机标识不能超过7个字符长,并且飞行类型只能包含给定集合中的字符

与使用正则表达式相比,前面的方法是否过于苛刻

另外,考虑到我需要解析数千个飞行计划,并且我需要快速完成,什么是最有效的方法


编辑:实现语言应该是Java

实现语言应该是Java,我肯定会使用regexp。您的数据不是嵌套/递归的,不适合为其编写解析器。编写lexer更适合于嵌套数据,如数学方程或解析编程语言。那么验证呢?您如何确保fpl文档是否与regexp一起有效?每个regex将位于if语句中。如果成功,请进行验证测试并继续下一行(和下一次验证)。如果任何验证失败,请忽略当前的flightplan文档,并移动到下一个。如果您可以添加您的规范,我可以给它一个编码尝试,我明白您的意思。因此,如果我理解正确,LL(1)当语言包含高度递归结构时,应使用解析器/词法分析器。以下是指向flightplan规范的链接:。如果您给我一些锅炉板代码开始,我将接受您的回答