كيفية الجمع بين regexp والكلمات الرئيسية في مجموعات محللات Scala

StackOverflow https://stackoverflow.com/questions/3770569

سؤال

لقد رأيت نهجين لبناء محلات في سكالا.

الأول هو أن يمتد من regexparsers وتحديد أنماط معجمية فازت. المشكلة التي أراها مع هذا هي أنني لا أفهم حقًا كيف تتعامل مع غموض الكلمات الرئيسية. على سبيل المثال ، إذا كانت كلمتي الرئيسية تتطابق مع نفس نمط المعرفات ، فإنها تقوم بمعالجة الكلمات الرئيسية كمعرفات.

لمواجهة ذلك ، رأيت منشورات مثل هذا هذا يوضح كيفية استخدام StandardTokenParsers لتحديد الكلمات الرئيسية. ولكن بعد ذلك ، لا أفهم كيفية تحديد أنماط regexp! نعم ، يأتي StandardTokenParsers مع "Ident" ، لكنه لا يأتي مع الآخر الذي أحتاجه (تمثيلات أرقام نقطة عائمة معقدة ، وأنماط وقواعد حرفية محددة للهروب ، إلخ).

كيف تحصل على القدرة على تحديد الكلمات الرئيسية والقدرة على تحديد أنماط رمزية مع تعبيرات منتظمة؟

هل كانت مفيدة؟

المحلول

لقد كتبت فقط RegexParsers-محللون ، لكن ما أفعله هو شيء من هذا القبيل:

val name: Parser[String] = "[A-Z_a-z][A-Z_a-z0-9]*".r

val kwIf: Parser[String]    = "if\\b".r
val kwFor: Parser[String]   = "for\\b".r
val kwWhile: Parser[String] = "while\\b".r

val reserved: Parser[String] = ( kwIf | kwFor | kwWhile )

val identifier: Parser[String] = not(reserved) ~> name
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top