smalltalk
/
osmo-st-sip
Archived
1
0
Fork 0

grammar: Kill another amount of redundant parsers

This way we will include a couple less look-up tables for the
digit parsing.
This commit is contained in:
Holger Hans Peter Freyther 2014-09-05 19:07:11 +02:00
parent 6c57c968dd
commit 9fa9a7218f
1 changed files with 25 additions and 14 deletions

View File

@ -25,6 +25,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
Request RequestLine Method extension_method
RequestURI quoted_string token commonUriParser paramchar
header generic_param tag_param digest_cln auth_param host
digitParser digitParserMin
|
"http://sofia-sip.org/repos/sofia-sip/libsofia-sip-ua/sip/GRAMMAR"
<category: 'OsmoSIP-Grammar'>
@ -35,6 +36,14 @@ PP.PPCompositeParser subclass: SIPGrammar [
^ Request / Response
]
digitParser [
^#digit asParser
]
digitParserMin [
^digitParser min: 1 max: 3
]
CRLF [
<category: 'misc'>
^ Character cr asParser, Character nl asParser
@ -48,7 +57,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
URI [
"TODO: URI should be parsed properly but yate seems to already
violate the RFC"
^(#digit asParser / #word asParser) star
^(digitParser / #word asParser) star
"^absoluteURI / abs-path"
]
@ -97,7 +106,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
port [
<category: 'generic'>
^ #digit asParser plus flatten
^ digitParser plus flatten
]
uri_parameters [
@ -195,7 +204,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
unreserved [
<category: 'generic'>
^ (#letter asParser / #digit asParser) / self mark
^ (#letter asParser / digitParser) / self mark
]
reserved [
@ -246,7 +255,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
StatusCode [
<category: 'response'>
"Combined into one..."
^ (#digit asParser min: 3 max: 3) flatten
^ (digitParser min: 3 max: 3) flatten
]
ReasonPhrase [
@ -314,24 +323,26 @@ PP.PPCompositeParser subclass: SIPGrammar [
response_port [
<category: 'via'>
^'rport' asParser, (EQUAL, #digit asParser plus) optional
^'rport' asParser, (EQUAL, digitParser plus) optional
]
ttl [
<category: 'generic'>
^ #digit asParser min: 1 max: 3
^ digitParserMin
]
IPv4address [
^ (#digit asParser min: 1 max: 3), $. asParser,
(#digit asParser min: 1 max: 3), $. asParser,
(#digit asParser min: 1 max: 3), $. asParser,
(#digit asParser min: 1 max: 3).
| dotParser |
dotParser := $. asParser.
^ (digitParserMin), dotParser,
(digitParserMin), dotParser,
(digitParserMin), dotParser,
(digitParserMin).
]
CSeq [
<category: 'cseq'>
^ 'CSeq' asParser, HCOLON, (#digit asParser plus flatten, LWS, Method)
^ 'CSeq' asParser, HCOLON, (digitParser plus flatten, LWS, Method)
]
generic_param [
@ -650,7 +661,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
delta_seconds [
<category: 'contact'>
^ #digit asParser plus
^ digitParser plus
]
extension_header [
@ -660,7 +671,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
qvalue [
<category: 'generic'>
^ ($0 asParser, ($. asParser, #digit asParser max: 3) optional) /
^ ($0 asParser, ($. asParser, digitParser max: 3) optional) /
($1 asParser, ($. asParser, $0 asParser max: 3) optional)
]
@ -681,7 +692,7 @@ PP.PPCompositeParser subclass: SIPGrammar [
header_value [
<category: 'generic'>
"TODO: TEXT-UTF8char / UTF8-CONT"
^ (#letter asParser / #digit asParser / #punctuation asParser / #blank asParser / LWS) star flatten
^ (#letter asParser / digitParser / #punctuation asParser / #blank asParser / LWS) star flatten
]
HTAB [