解析地址时无限运行的线程

时间:2017-09-22 19:57:06

标签: java multithreading antlr4

在过去的一年里,我一直在开发一个使用ANTLR进行解析的系统。现在在UAT中并在Tomcat服务器上运行,由于线程在尝试解析某些街道地址时无限期地运行,因此我们经常遇到性能问题。例如,我们发现有些人在我们捕获并杀死它们之前已经运行了7.5个小时。当足够进入此状态时,它们将占用所有核心并导致发送到系统的每个请求超时。尽管我们已经升级到ANTLR 4.7(之前为4.5.3)并且在过去几周内通过语法更改降低了出现频率,但我们仍然无法完全解决问题。下面是其中一个线程的日志以及语法。有没有人知道原因?

"https-openssl-apr-8443-exec-17" #111 daemon prio=5 os_prio=0 tid=0x00007faa78018800 nid=0x3e91 runnable [0x00007fa9ef7f6000]
   java.lang.Thread.State: RUNNABLE
        at org.antlr.v4.runtime.misc.Array2DHashSet.getOrAdd(Array2DHashSet.java:59)
        at org.antlr.v4.runtime.atn.ATNConfigSet.add(ATNConfigSet.java:146)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1529)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1496)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1496)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure_(ParserATNSimulator.java:1583)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closureCheckingStopState(ParserATNSimulator.java:1513)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.closure(ParserATNSimulator.java:1448)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.computeReachSet(ParserATNSimulator.java:856)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.execATNWithFullContext(ParserATNSimulator.java:664)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:505)
        at org.antlr.v4.runtime.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:393)
        at com.americanpg.alis.parsers.StreetAddressParser.streetName(StreetAddressParser.java:2000)
        at com.americanpg.alis.parsers.StreetAddressParser.addr1(StreetAddressParser.java:1857)
        at com.americanpg.alis.parsers.StreetAddressParser.address(StreetAddressParser.java:1207)
        at com.americanpg.alis.parsers.StreetAddressParser.prog(StreetAddressParser.java:153)
        at com.americanpg.alis.common.antlr.runners.StreetAddressRunner.parseStreetAddress(StreetAddressRunner.java:39)
        at com.americanpg.alis.common.engine.services.ServiceHelper.parseAddress(ServiceHelper.java:656)
        at com.americanpg.alis.common.engine.objects.ParcelMatchCache.getAddress(ParcelMatchCache.java:49)
        at com.americanpg.alis.common.engine.services.ServiceHelper.rank(ServiceHelper.java:75)
        at com.americanpg.alis.common.engine.services.ServiceHelper.rankAndFilter(ServiceHelper.java:168)
        at com.americanpg.alis.common.engine.services.ParcelService.locate(ParcelService.java:61)
        at com.americanpg.alis.webapp.dispatcher.controller.core.LocateController.locate(LocateController.java:42)
        at sun.reflect.GeneratedMethodAccessor248.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:661)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
        at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:2268)
        - locked <0x00000006c3de5fe8> (a org.apache.tomcat.util.net.AprEndpoint$AprSocketWrapper)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:745)

语法

grammar StreetAddress;

prog: (address SEPARATOR* (NEWLINE | <EOF>))+;

address: /* 15 alts */
    |   addr1
    ;

streetNumber: DIGIT+ (SEPARATOR (streetFractional | DIGIT+))?
    |   DIGIT+ '-'? NAME (SEPARATOR (streetFractional | DIGIT+))?
    |   (DIGIT+ (SEPARATOR? '/' SEPARATOR? DIGIT+)+ | DIGIT+ SEPARATOR? '-' SEPARATOR? DIGIT+) (SEPARATOR (streetFractional | DIGIT+))?
    ;

streetFractional: DIGIT SEPARATOR? '/' SEPARATOR? DIGIT+;

addr1: streetDirectional SEPARATOR (streetNameSpanish | streetName) SEPARATOR streetSuffix (SEPARATOR streetPostdirectional)??
    |   streetDirectional SEPARATOR (streetNameSpanish | streetName) (SEPARATOR streetPostdirectional)??
    |   (streetNameSpanish | streetName) SEPARATOR streetSuffix (SEPARATOR streetPostdirectional)??
    |   (streetNameSpanish | streetName) (SEPARATOR streetPostdirectional)??
    ;

streetName: (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | VISTA | AVE | CIR | BUSINESS) (SEPARATOR (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | VISTA | AVE | CIR | BUSINESS))* (SEPARATOR DIGIT+ NAME?) (SEPARATOR DIRECTIONAL)? (SEPARATOR BUSINESS)?   // HWY 35 E? S^, COUNTY ROAD 913
    |   (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | UNITPREFIXNONUMBER | DE | MI | BUSINESS) (SEPARATOR (NAME | DIRECTIONAL | BUSINESS))* (SEPARATOR (STREETSUFFIX | VISTA | AVE | CIR))?   // ST PAUL ST, JOSEPH E LOWERY BLVD
    |   (DIRECTIONAL SEPARATOR)? NUMBEREDSTREET (SEPARATOR DIGIT SEPARATOR? '/' SEPARATOR? DIGIT+)? (SEPARATOR STREETSUFFIX)?       //34th 1/2 ST
    |   (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | VISTA | AVE | CIR) (SEPARATOR (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | VISTA | AVE | CIR))* (SEPARATOR DIRECTIONAL) (SEPARATOR (STREETSUFFIX | VISTA | AVE | CIR))?   //Great Southwest PKWY
    |   DIRECTIONAL (SEPARATOR NAME)* (SEPARATOR (STREETSUFFIX | VISTA | AVE | CIR))?   //Northwest HWY
    |   (SPANISHSTREETPREFIX | VISTA) (SEPARATOR (NAME | STREETSUFFIX | STREETSUFFIXABBREVIATED | SPANISHSTREETPREFIX | VISTA | AVE | CIR | BUSINESS))*
    |   NAME
    ;

streetNameSpanish: (SPANISHSTREETPREFIX | SPANISHSTREETPREFIXABBREVIATED | VISTA | AVE | CIR) (SEPARATOR NAME)+?    //VISTA MONTANA
    |   (SPANISHSTREETPREFIX | SPANISHSTREETPREFIXABBREVIATED | VISTA | AVE | CIR) SEPARATOR DE SEPARATOR (LA | LO) (SEPARATOR NAME)+?      //CALLE DE LA MESA
    |   (SPANISHSTREETPREFIX | SPANISHSTREETPREFIXABBREVIATED | VISTA | AVE | CIR) SEPARATOR DE SEPARATOR (LAS | LOS) (SEPARATOR NAME)+?    //AVENIDA DE LAS AMERICAS
    |   (SPANISHSTREETPREFIX | SPANISHSTREETPREFIXABBREVIATED | VISTA | AVE | CIR) SEPARATOR (DE | DEL) (SEPARATOR NAME)+?  //CAMINO DE CLARA, CALLE DEL REY
    |   (LA | LO | LAS | LOS | DEL) (SEPARATOR NAME)+     //LAS CARINO, DEL TORO
    ;

streetSuffix: (CT | VISTA | AVE | CIR | STREETSUFFIX | STREETSUFFIXABBREVIATED) '.'?;

streetPostdirectional: DIRECTIONAL
    |   NE
    ;

DIGIT: [0-9];

//List of state abbreviations, some of which must be used in other parts of an address
AL: 'AL' | 'Al' | 'al';
AK: 'AK' | 'Ak' | 'ak';
AZ: 'AZ' | 'Az' | 'az';
AR: 'AR' | 'Ar' | 'ar';
CA: 'CA' | 'Ca' | 'ca';
CO: 'CO' | 'Co' | 'co';
CT: 'CT' | 'Ct' | 'ct';
DC: 'DC' | 'Dc' | 'dc';
DE: 'DE' | 'De' | 'de';
FL: 'FL' | 'Fl' | 'fl';
GA: 'GA' | 'Ga' | 'ga';
HI: 'HI' | 'Hi' | 'hi';
ID: 'ID' | 'Id' | 'id';
IL: 'IL' | 'Il' | 'il';
IN: 'IN' | 'In' | 'in';
IA: 'IA' | 'Ia' | 'ia';
KS: 'KS' | 'Ks' | 'ks';
KY: 'KY' | 'Ky' | 'ky';
LA: 'LA' | 'La' | 'la';
ME: 'ME' | 'Me' | 'me';
MD: 'MD' | 'Md' | 'md';
MA: 'MA' | 'Ma' | 'ma';
MI: 'MI' | 'Mi' | 'mi';
MN: 'MN' | 'Mn' | 'mn';
MS: 'MS' | 'Ms' | 'ms';
MO: 'MO' | 'Mo' | 'mo';
MT: 'MT' | 'Mt' | 'mt';
NE: 'NE' | 'Ne' | 'ne';
NV: 'NV' | 'Nv' | 'nv';
NH: 'NH' | 'Nh' | 'nh';
NJ: 'NJ' | 'Nj' | 'nj';
NM: 'NM' | 'Nm' | 'nm';
NY: 'NY' | 'Ny' | 'ny';
NC: 'NC' | 'Nc' | 'nc';
ND: 'ND' | 'Nd' | 'nd';
OH: 'OH' | 'Oh' | 'oh';
OK: 'OK' | 'Ok' | 'ok';
OR: 'OR' | 'Or' | 'or';
PA: 'PA' | 'Pa' | 'pa';
RI: 'RI' | 'Ri' | 'ri';
SC: 'SC' | 'Sc' | 'sc';
SD: 'SD' | 'Sd' | 'sd';
TN: 'TN' | 'Tn' | 'tn';
TX: 'TX' | 'Tx' | 'tx';
UT: 'UT' | 'Ut' | 'ut';
VT: 'VT' | 'Vt' | 'vt';
VA: 'VA' | 'Va' | 'va';
WA: 'WA' | 'Wa' | 'wa';
WV: 'WV' | 'Wv' | 'wv';
WI: 'WI' | 'Wi' | 'wi';
WY: 'WY' | 'Wy' | 'wy';

LO: 'LO' | 'Lo' | 'lo';
LAS: 'LAS' | 'Las' | 'las';
LOS: 'LOS' | 'Los' | 'los';
DEL: 'DEL' | 'Del' | 'del';
VISTA: 'VISTA' | 'Vista' | 'vista' | 'VIS' | 'Vis' | 'vis';
AVE: 'AVE' | 'Ave' | 'ave';
CIR: 'CIR' | 'Cir' | 'cir';

MC: 'MC ' | 'Mc ' | 'mc ';

SAN: 'SAN ' | 'San ' | 'san ';

REV_DR: ('REVEREND' | 'Reverend' | 'reverend' | ('REV' | 'Rev' | 'rev') '.'?) SEPARATOR ('DOCTOR' | 'Doctor' | 'doctor' | ('DR' | 'Dr' | 'dr') '.'?) SEPARATOR;

BUSINESS: ('BUSINESS' | 'Business' | 'business' | ( 'BUS' | 'Bus' | 'bus' | 'BSNS' | 'Bsns' | 'bsns' | 'BUSINES' | 'Busines' | 'busines' | 'BUSN' | 'Busn' | 'busn') '.'?)
            (SEPARATOR ( STREETSUFFIX | STREETSUFFIXABBREVIATED ))?
    ;

DIRECTIONAL: 'NORTH' | 'SOUTH' | 'EAST' | 'WEST' | 'North' | 'South' | 'East' | 'West' | 'north' | 'south' | 'east' | 'west'
    |   'NORTHWEST' | 'SOUTHWEST' | 'NORTHEAST' | 'SOUTHEAST' | 'Northwest' | 'Southwest' | 'Northeast' | 'Southeast'
    |   'NorthWest' | 'SouthWest' | 'NorthEast' | 'SouthEast' | 'northwest' | 'southwest' | 'northeast' | 'southeast'
    |   'N' | 'S' | 'E' | 'W' | 'n' | 's' | 'e' | 'w' | 'NW' | 'SW' | /*NE |*/ 'SE' | 'Nw' | 'Sw' | 'Se' | 'nw' | 'sw' | 'se'
    ; //NE, a lexer rule, has been commented here and coded in the parser to avoid ambiguity

STREETSUFFIX: 'Allee' | 'Alley' | 'Ally' | 'Anex' | 'Annex' | 'Annx' | 'Arcade' | 'Av' | 'Aven' | 'Avenu' | 'Avenue' | 'Avn' | 'Avnue' | 'Bayoo' | 'Bayou' | 'Beach' | 'Bend' | 'Bluf' | 'Bluff' | 'Bluffs' | 'Bot' | 'Bottm' | 'Bottom' | 'Boul' | 'Boulevard' | 'Boulv' | 'Brnch' | 'Branch' | 'Brdge' | 'Bridge' | 'Brook' | 'Brooks' | 'Burg' | 'Burgs' | 'Bypa' | 'Bypas' | 'Bypass' | 'Byps' | 'Camp' | 'Cmp' | 'Canyn' | 'Canyon' | 'Cnyn' | 'Cape' | 'Causeway' | 'Causwa' | 'Cen' | 'Cent' | 'Center' | 'Centr' | 'Centre' | 'Cnter' | 'Cntr' | 'Ctr' | 'Centers' | 'Circ' | 'Circl' | 'Circle' | 'Crcl' | 'Crcle' | 'Circles' | 'Cliff' | 'Cliffs' | 'Club' | 'Common' | 'Commons' | 'Corner' | 'Corners' | 'Course' | 'Court' | 'Courts' | 'Cove' | 'Coves' | 'Creek' | 'Crescent' | 'Crsent' | 'Crsnt' | 'Crest' | 'Crossing' | 'Crssng' | 'Crossroad' | 'Crossroads'| 'Curve' | 'Dale' | 'Dam' | 'Div' | 'Divide' | 'Dvd' | 'Driv' | 'Drive' | 'Drv' | 'Drives' | 'Estate' | 'Estates' | 'Exp' | 'Expr' | 'Express' | 'Expressway'| 'Expw' | 'Expy' | 'Extension' | 'Extn' | 'Extnsn' | 'Falls' | 'Ferry' | 'Frry' | 'Field' | 'Fields' | 'Flat' | 'Flats' | 'Ford' | 'Fords' | 'Forest' | 'Forests' | 'Forg' | 'Forge' | 'Forges' | 'Fork' | 'Forks' | 'Fort' | 'Frt' | 'Freeway' | 'Freewy' | 'Frway' | 'Frwy' | 'Fwy' | 'Garden' | 'Gardn' | 'Grden' | 'Grdn' | 'Gardens' | 'Grdns' | 'Gateway' | 'Gatewy' | 'Gatway' | 'Gtway' | 'Gtwy' | 'Glen' | 'Glens' | 'Green' | 'Greens' | 'Grov' | 'Grove' | 'Groves' | 'Harb' | 'Harbor' | 'Harbr' | 'Hrbor' | 'Harbors' | 'Haven' | 'Ht' | 'Highway' | 'Highwy' | 'Hiway' | 'Hiwy' | 'Hway' | 'Hwy' | 'Hill' | 'Hills' | 'Hllw' | 'Hollow' | 'Hollows' | 'Holws' | 'Island' | 'Islnd' | 'Islands' | 'Islnds' | 'Isles' | 'Jction' | 'Jctn' | 'Junction' | 'Junctn' | 'Juncton' | 'Jctns' | 'Junctions' | 'Key' | 'Keys' | 'Knol' | 'Knoll' | 'Knolls' | 'Lake' | 'Lakes' | 'Landing' | 'Lndng' | 'Lane' | 'Light' | 'Lights' | 'Loaf' | 'Lock' | 'Locks' | 'Ldge' | 'Lodg' | 'Lodge' | 'Loops' | 'Manor' | 'Manors' | 'Meadow' | 'Meadows' | 'Medows' | 'Mill' | 'Mills' | 'Missn' | 'Mssn' | 'Motorway' | 'Mnt' | 'Mount' | 'Mntain' | 'Mntn' | 'Mountain' | 'Mountin' | 'Mtin' | 'Mtn' | 'Mntns' | 'Mountains' | 'Neck' | 'Orchard' | 'Orchrd' | 'Ovl' | 'Overpass' | 'Prk' | 'Parks' | 'Parkway' | 'Parkwy' | 'Pkway' | 'Pky' | 'Parkways' | 'Pkwys' | 'Passage' | 'Paths' | 'Pikes' | 'Pine' | 'Pines' | 'Plain' | 'Plains' | 'Plaza' | 'Plza' | 'Point' | 'Points' | 'Port' | 'Ports' | 'Prairie' | 'Prr' | 'Rad' | 'Radial' | 'Radiel' | 'Ranch' | 'Ranches' | 'Rnchs' | 'Rapid' | 'Rapids' | 'Rest' | 'Rdge' | 'Ridge' | 'Ridges' | 'River' | 'Rvr' | 'Rivr' | 'Road' | 'Roads' | 'Route' | 'Shoal' | 'Shoals' | 'Shoar' | 'Shore' | 'Shoars' | 'Shores' | 'Skyway' | 'Spng' | 'Spring' | 'Sprng' | 'Spngs' | 'Springs' | 'Sprngs' | 'Spurs' | 'Sqr' | 'Sqre' | 'Squ' | 'Square' | 'Sqrs' | 'Squares' | 'Station' | 'Statn' | 'Stn' | 'Strav' | 'Straven' | 'Stravenue' | 'Stravn' | 'Strvn' | 'Strvnue' | 'Stream' | 'Streme' | 'Street' | 'Strt' | 'Str' | 'Streets' | 'Sumit' | 'Sumitt' | 'Summit' | 'Terr' | 'Terrace' | 'Throughway'| 'Trace' | 'Traces' | 'Track' | 'Tracks' | 'Trk' | 'Trks' | 'Trafficway'| 'Trail' | 'Trails' | 'Trls' | 'Trailer' | 'Trlrs' | 'Tunel' | 'Tunls' | 'Tunnel' | 'Tunnels' | 'Tunnl' | 'Trnpk' | 'Turnpike' | 'Turnpk' | 'Underpass' | 'Union' | 'Unions' | 'Valley' | 'Vally' | 'Vlly' | 'Valleys' | 'Vdct' | 'Viadct' | 'Viaduct' | 'View' | 'Views' | 'Vill' | 'Villag' | 'Village' | 'Villg' | 'Villiage' | 'Vlg' | 'Villages' | 'Ville' | 'Vist' /*| 'Vista'*/ | 'Vst' | 'Vsta' | 'Walks' | 'Wy' | 'Well' | 'Wells' | 'Fall' | 'Isle' | 'Land' | 'Loop' | 'Mall' | 'Mews' | 'Oval' | 'Park' | 'Pass' | 'Path' | 'Pike' | 'Ramp' | 'Row' | 'Rue' | 'Run' | 'Spur' | 'Walk' | 'Wall' | 'Way' | 'Ways'
    ;

STREETSUFFIXABBREVIATED: ('ALY' | 'ANX' | 'ARC' | /*'AVE' |*/ 'BYU' | 'BCH' | 'BND' | 'BLF' | 'BLFS' | 'BTM' | 'BLVD' | 'BR' | 'BRG' | 'BRK' | 'BRKS' | 'BG' | 'BGS' | 'BYP' | 'CP' | 'CYN' | 'CPE' | 'CSWY' | 'CTR' | 'CTRS' | /*'CIR' |*/ 'CIRS' | 'CLF' | 'CLFS' | 'CLB' | 'CMN' | 'CMNS' | 'COR' | 'CORS' | 'CRSE' | /*CT |*/ 'CTS' | 'CV' | 'CVS' | 'CRK' | 'CRES' | 'CRST' | 'XING' | 'XRD' | 'XRDS' | 'CURV' | 'DL' | 'DM' | 'DV' | 'DR' | 'DRS' | 'EST' | 'ESTS' | 'EXPY' | 'EXT' | 'EXTS' | 'FALL' | 'FLS' | 'FRY' | 'FLD' | 'FLDS' | 'FLT' | 'FLTS' | 'FRD' | 'FRDS' | 'FRST' | 'FRG' | 'FRGS' | 'FRK' | 'FRKS' | 'FT' | 'FWY' | 'GDN' | 'GDNS' | 'GTWY' | 'GLN' | 'GLNS' | 'GRN' | 'GRNS' | 'GRV' | 'GRVS' | 'HBR' | 'HBRS' | 'HVN' | 'HTS' | 'HWY' | 'HL' | 'HLS' | 'HOLW' | 'INLT' | 'IS' | 'ISS' | 'ISLE' | 'JCT' | 'JCTS' | 'KY' | 'KYS' | 'KNL' | 'KNLS' | 'LK' | 'LKS' | 'LAND' | 'LNDG' | 'LN' | 'LGT' | 'LGTS' | 'LF' | 'LCK' | 'LCKS' | 'LDG' | 'LOOP' | 'MALL' | 'MNR' | 'MNRS' | 'MDW' | 'MDWS' | 'MEWS' | 'ML' | 'MLS' | 'MSN' | 'MTWY' | 'MT' | 'MTN' | 'MTNS' | 'NCK' | 'ORCH' | 'OVAL' | 'OPAS' | 'PARK' | 'PARK' | 'PKWY' | 'PKWY' | 'PASS' | 'PSGE' | 'PATH' | 'PIKE' | 'PNE' | 'PNES' | 'PL' | 'PLN' | 'PLNS' | 'PLZ' | 'PT' | 'PTS' | 'PRT' | 'PRTS' | 'PR' | 'RADL' | 'RAMP' | 'RNCH' | 'RPD' | 'RPDS' | 'RST' | 'RDG' | 'RDGS' | 'RIV' | 'RD' | 'RDS' | 'RTE' | 'ROW' | 'RUE' | 'RUN' | 'SHL' | 'SHLS' | 'SHR' | 'SHRS' | 'SKWY' | 'SPG' | 'SPGS' | 'SPUR' | 'SPUR' | 'SQ' | 'SQS' | 'STA' | 'STRA' | 'STRM' | 'ST' | 'STS' | 'SMT' | 'TER' | 'TRWY' | 'TRCE' | 'TRAK' | 'TRFY' | 'TRL' | 'TRLR' | 'TUNL' | 'TPKE' | 'UPAS' | 'UN' | 'UNS' | 'VLY' | 'VLYS' | 'VIA' | 'VW' | 'VWS' | 'VLG' | 'VLGS' | 'VL' /*| 'VIS'*/ | 'WALK' | 'WALK' | 'WALL' | 'WAY' | 'WAYS' | 'WL' | 'WLS'
    |   'Aly' | 'Anx' | 'Arc' | /*'Ave' |*/ 'Byu' | 'Bch' | 'Bnd' | 'Blf' | 'Blfs' | 'Btm' | 'Blvd' | 'Br' | 'Brg' | 'Brk' | 'Brks' | 'Bg' | 'Bgs' | 'Byp' | 'Cp' | 'Cyn' | 'Cpe' | 'Cswy' | 'Ctr' | 'Ctrs' | /*'Cir' |*/ 'Cirs' | 'Clf' | 'Clfs' | 'Clb' | 'Cmn' | 'Cmns' | 'Cor' | 'Cors' | 'Crse' | /*'Ct' |*/ 'Cts' | 'Cv' | 'Cvs' | 'Crk' | 'Cres' | 'Crst' | 'Xing' | 'Xrd' | 'Xrds' | 'Curv' | 'Dl' | 'Dm' | 'Dv' | 'Dr' | 'Drs' | 'Est' | 'Ests' | 'Expy' | 'Ext' | 'Exts' | 'Fall' | 'Fls' | 'Fry' | 'Fld' | 'Flds' | 'Flt' | 'Flts' | 'Frd' | 'Frds' | 'Frst' | 'Frg' | 'Frgs' | 'Frk' | 'Frks' | 'Ft' | 'Fwy' | 'Gdn' | 'Gdns' | 'Gtwy' | 'Gln' | 'Glns' | 'Grn' | 'Grns' | 'Grv' | 'Grvs' | 'Hbr' | 'Hbrs' | 'Hvn' | 'Hts' | 'Hwy' | 'Hl' | 'Hls' | 'Holw' | 'Inlt' | 'Is' | 'Iss' | 'Isle' | 'Jct' | 'Jcts' | 'Ky' | 'Kys' | 'Knl' | 'Knls' | 'Lk' | 'Lks' | 'Land' | 'Lndg' | 'Ln' | 'Lgt' | 'Lgts' | 'Lf' | 'Lck' | 'Lcks' | 'Ldg' | 'Loop' | 'Mall' | 'Mnr' | 'Mnrs' | 'Mdw' | 'Mdws' | 'Mews' | 'Ml' | 'Mls' | 'Msn' | 'Mtwy' | 'Mt' | 'Mtn' | 'Mtns' | 'Nck' | 'Orch' | 'Oval' | 'Opas' | 'Park' | 'Pkwy' | 'Pass' | 'Psge' | 'Path' | 'Pike' | 'Pne' | 'Pnes' | 'Pl' | 'Pln' | 'Plns' | 'Plz' | 'Pt' | 'Pts' | 'Prt' | 'Prts' | 'Pr' | 'Radl' | 'Ramp' | 'Rnch' | 'Rpd' | 'Rpds' | 'Rst' | 'Rdg' | 'Rdgs' | 'Riv' | 'Rd' | 'Rds' | 'Rte' | 'Row' | 'Rue' | 'Run' | 'Shl' | 'Shls' | 'Shr' | 'Shrs' | 'Skwy' | 'Spg' | 'Spgs' | 'Spur' | 'Spur' | 'Sq' | 'Sqs' | 'Sta' | 'Stra' | 'Strm' | 'St' | 'Sts' | 'Smt' | 'Ter' | 'Trwy' | 'Trce' | 'Trak' | 'Trfy' | 'Trl' | 'Trlr' | 'Tunl' | 'Tpke' | 'Upas' | 'Un' | 'Uns' | 'Vly' | 'Vlys' | 'Via' | 'Vw' | 'Vws' | 'Vlg' | 'Vlgs' | 'Vl' /*| 'Vis'*/ | 'Walk' | 'Wall' | 'Way' | 'Ways' | 'Wl' | 'Wls'
    |   'aly' | 'anx' | 'arc' | /*'ave' |*/ 'byu' | 'bch' | 'bnd' | 'blf' | 'blfs' | 'btm' | 'blvd' | 'br' | 'brg' | 'brk' | 'brks' | 'bg' | 'bgs' | 'byp' | 'cp' | 'cyn' | 'cpe' | 'cswy' | 'ctr' | 'ctrs' | /*'cir' |*/ 'cirs' | 'clf' | 'clfs' | 'clb' | 'cmn' | 'cmns' | 'cor' | 'cors' | 'crse' | /*'ct' |*/ 'cts' | 'cv' | 'cvs' | 'crk' | 'cres' | 'crst' | 'xing' | 'xrd' | 'xrds' | 'curv' | 'dl' | 'dm' | 'dv' | 'dr' | 'drs' | 'est' | 'ests' | 'expy' | 'ext' | 'exts' | 'fall' | 'fls' | 'fry' | 'fld' | 'flds' | 'flt' | 'flts' | 'frd' | 'frds' | 'frst' | 'frg' | 'frgs' | 'frk' | 'frks' | 'ft' | 'fwy' | 'gdn' | 'gdns' | 'gtwy' | 'gln' | 'glns' | 'grn' | 'grns' | 'grv' | 'grvs' | 'hbr' | 'hbrs' | 'hvn' | 'hts' | 'hwy' | 'hl' | 'hls' | 'holw' | 'inlt' | 'is' | 'iss' | 'isle' | 'jct' | 'jcts' | 'ky' | 'kys' | 'knl' | 'knls' | 'lk' | 'lks' | 'land' | 'lndg' | 'ln' | 'lgt' | 'lgts' | 'lf' | 'lck' | 'lcks' | 'ldg' | 'loop' | 'mall' | 'mnr' | 'mnrs' | 'mdw' | 'mdws' | 'mews' | 'ml' | 'mls' | 'msn' | 'mtwy' | 'mt' | 'mtn' | 'mtns' | 'nck' | 'orch' | 'oval' | 'opas' | 'park' | 'park' | 'pkwy' | 'pkwy' | 'pass' | 'psge' | 'path' | 'pike' | 'pne' | 'pnes' | 'pl' | 'pln' | 'plns' | 'plz' | 'pt' | 'pts' | 'prt' | 'prts' | 'pr' | 'radl' | 'ramp' | 'rnch' | 'rpd' | 'rpds' | 'rst' | 'rdg' | 'rdgs' | 'riv' | 'rd' | 'rds' | 'rte' | 'row' | 'rue' | 'run' | 'shl' | 'shls' | 'shr' | 'shrs' | 'skwy' | 'spg' | 'spgs' | 'spur' | 'spur' | 'sq' | 'sqs' | 'sta' | 'stra' | 'strm' | 'st' | 'sts' | 'smt' | 'ter' | 'trwy' | 'trce' | 'trak' | 'trfy' | 'trl' | 'trlr' | 'tunl' | 'tpke' | 'upas' | 'un' | 'uns' | 'vly' | 'vlys' | 'via' | 'vw' | 'vws' | 'vlg' | 'vlgs' | 'vl' /*| 'vis'*/ | 'walk' | 'walk' | 'wall' | 'way' | 'ways' | 'wl' | 'wls') '.'?
    ;

SPANISHSTREETPREFIX: 'AVENIDA' | 'CALLE' | 'CAMINITO' | 'CAMINO' | 'CARREDA' | 'CIRCULO' | 'ENTRADA' | 'PASEO' | 'PLACITA' | 'RANCHO' | 'VEREDA' /*| 'VISTA'*/
    |   'Avenida' | 'Calle' | 'Caminito' | 'Camino' | 'Carreda' | 'Circulo' | 'Entrada' | 'Paseo' | 'Placita' | 'Rancho' | 'Vereda' /*| 'Vista'*/
    |   'avenida' | 'calle' | 'caminito' | 'camino' | 'carreda' | 'circulo' | 'entrada' | 'paseo' | 'placita' | 'rancho' | 'vereda' /*| 'vista'*/
    ;

SPANISHSTREETPREFIXABBREVIATED: (/*'AVE' |*/ 'CLL' | 'CMT' | 'CAM' | 'CER' | /*'CIR' |*/ 'ENT' | 'PSO' | 'PLA' | 'RCH' | 'VER' /*| 'VIS'*/
    |   /*'Ave' |*/ 'Cll' | 'Cmt' | 'Cam' | 'Cer' | /*'Cir' |*/ 'Ent' | 'Pso' | 'Pla' | 'Rch' | 'Ver' /*| 'Vis'*/
    |   /*'ave' |*/ 'cll' | 'cmt' | 'cam' | 'cer' | /*'cir' |*/ 'ent' | 'pso' | 'pla' | 'rch' | 'ver' /*| 'vis'*/) '.'?
    ; //The commented abbreviations are included in STREETSUFFIXABBREVIATED and could cause ambiguity if uncommented.

UNITPREFIX: 'APARTMENT' | 'APT' | 'BUILDING' | 'BLDG' | 'DEPARTMENT' | 'DEPT' | 'FLOOR' | 'FL' | 'HANGER' | 'HNGR' | 'KEY' | 'KEY' | 'LOT' | 'LOT' | 'PIER' | 'PIER' | 'ROOM' | 'RM' | 'SLIP' | 'SPACE' | 'SPC' | 'STOP' | 'STOP' | 'SUITE' | 'STE' | 'TRAILER' | 'TRLR' | 'UNIT'
    |   'Apartment' | 'Apt' | 'Building' | 'Bldg' | 'Department' | 'Dept' | 'Floor' | 'Fl' | 'Hanger' | 'Hngr' | 'Key' | 'Lot' | 'Pier' | 'Room' | 'Rm' | 'Slip' | 'Space' | 'Spc' | 'Stop' | 'Suite' | 'Ste' | 'Trailer' | 'Trlr' | 'Unit'
    |   'apartment' | 'apt' | 'building' | 'bldg' | 'department' | 'dept' | 'floor' | 'fl' | 'hanger' | 'hngr' | 'key' | 'lot' | 'pier' | 'room' | 'rm' | 'slip' | 'space' | 'spc' | 'stop' | 'suite' | 'ste' | 'trailer' | 'trlr' | 'unit'
    ;

UNITPREFIXNONUMBER: 'BASEMENT' | 'BSMT' | 'FRONT' | 'FRNT' | 'LOBBY' | 'LBBY' | 'LOWER' | 'LOWR' | 'OFFICE' | 'OFC' | 'PENTHOUSE' | 'PH' | 'REAR' | 'SIDE' | 'UPPER' | 'UPPR'
    |   'Basement' | 'Bsmt' | 'Front' | 'Frnt' | 'Lobby' | 'Lbby' | 'Lower' | 'Lowr' | 'Office' | 'Ofc' | 'Penthouse' | 'Ph' | 'Rear' | 'Side' | 'Upper' | 'Uppr'
    |   'basement' | 'bsmt' | 'front' | 'frnt' | 'lobby' | 'lbby' | 'lower' | 'lowr' | 'office' | 'ofc' | 'penthouse' | 'ph' | 'rear' | 'side' | 'upper' | 'uppr'
    ;

NUMBEREDSTREET: DIGIT+ ('st' | 'nd' | 'rd' | 'th' | 'St' | 'Nd' | 'Rd' | 'Th' | 'ST' | 'ND' | 'RD' | 'TH');

NAME: (MC | SAN | REV_DR | [a-zA-Z'])? [a-zA-Z\-/'.]*;

NEWLINE:   '\r'? '\n';

COMMA: ',';

SEPARATOR:  ('-' | ' ')+;

WS: [\t]+ -> skip;

0 个答案:

没有答案