gpt4 book ai didi

java - ANTLR4:如何解析 WKT 多边形字符串?

转载 作者:行者123 更新时间:2023-11-29 04:22:10 29 4
gpt4 key购买 nike

我在 java 中使用 ANLTR4,我可以像这样解析 WKT 多边形字符串

polygon((20 30, 30 40, 50 60, 20 30)) 

使用这个词法分析器:

POLYGON: ('polygon'|'POLYGON')'(('[0-9:,-.eTZ" ]+'))';

因为 polygon(( )) 里面的数字可以是 datetime 或 float 所以它包含一些字符。

但是,我无法像这样解析具有内部多边形的多边形

polygon((20 30, 30 40, 50 60, 20 30), (20 30, 30 40, 50 60, 20 30), (20 30, 30 40, 50 60, 20 30))

当我尝试在 Lexer 中添加 () 时,例如:

POLYGON: ('polygon'|'POLYGON')'(('[0-9:,-.eTZ" \(\)]+'))';

Java 抛出异常,找不到“)”。

我该怎么做才能使 ANTLR4 可以解析 polygon((), (), (), ...)?

最佳答案

我认为你不应该只用词法分析器来做这件事。您应该使用词法分析器拆分为符号;例如'polygon' , '(' , ')' , ',' , <number> , <date>等等。然后实现一个语法来处理大规模语法;例如

<polygon> ::= 'polygon' '(' <list> ')'

<list> ::= '(' ')' |
'(' <element> ( ',' <element> ) * ')'

<element> ::= <number> | <date>

(我使用的元语法有点像 EBNF ....)

仅使用没有语法的基于正则表达式的词法分析器的问题是:

关于java - ANTLR4:如何解析 WKT 多边形字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48441793/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com