comparison modules/parser.tp @ 244:ae5188be523e

Improve compatibility of new parser with the old one
author Mike Pavone <pavone@retrodev.com>
date Mon, 06 Jan 2014 00:48:19 -0800
parents 5b830147c1cd
children 3590ecca6bc9
comparison
equal deleted inserted replaced
243:5b830147c1cd 244:ae5188be523e
699 litbits <- 32 699 litbits <- 32
700 if: (Suffix length) > 0 { 700 if: (Suffix length) > 0 {
701 if: (Suffix from: 0 withLength: 1) = "u" { 701 if: (Suffix from: 0 withLength: 1) = "u" {
702 signed <- false 702 signed <- false
703 } 703 }
704 print: (Suffix from: 1) . "\n"
705 litbits <- (Suffix from: 1) int32 704 litbits <- (Suffix from: 1) int32
706 } 705 }
707 #{ 706 #{
708 litval <- num 707 litval <- num
709 signed? <- signed 708 signed? <- signed
782 } 781 }
783 ] 782 ]
784 783
785 funcall <- match: hws . Initial . Parts where: { 784 funcall <- match: hws . Initial . Parts where: {
786 Initial <- match: namepart 785 Initial <- match: namepart
787 Parts <- onePlus: argpart 786 Parts <- zeroPlus: argpart
788 } yield: { 787 } yield: {
788 if: (Parts length) = 0 {
789 Parts <- []
790 }
789 Initial | Parts foldr: #{ 791 Initial | Parts foldr: #{
790 name <- "" 792 name <- ""
791 args <- [] 793 args <- []
792 } with: :acc el { 794 } with: :acc el {
793 nextName <- acc name 795 nextName <- acc name
900 ] 902 ]
901 } yield: { 903 } yield: {
902 Expr 904 Expr
903 } 905 }
904 906
907 opsym <- match: Name where: {
908 Name <- matchOne: ["&&" "||" "<=" ">=" "<" ">" "=" "!=" "=" "-" "." "*" "/" "%" "|"]
909 } yield: {
910 #{
911 name <- Name
912 string <- {
913 name
914 }
915 }
916 }
917
905 assignment <- match: ws . Symbol . hws . "<-" . Expr where: { 918 assignment <- match: ws . Symbol . hws . "<-" . Expr where: {
906 Symbol <- match: symexpr 919 Symbol <- matchOne: [
920 symexpr
921 opsym
922 ]
907 Expr <- match: expr 923 Expr <- match: expr
908 } yield: { 924 } yield: {
909 #{ 925 #{
910 assign <- Expr 926 assign <- Expr
911 to <- Symbol 927 to <- Symbol
914 } 930 }
915 } 931 }
916 } 932 }
917 933
918 object <- match: "#{" . ws . Messages . "}" where: { 934 object <- match: "#{" . ws . Messages . "}" where: {
919 Messages <- zeroPlus: assignment 935 Messages <- zeroPlus: (match: ws . El where: {
920 } yield: { 936 El <- matchOne: [
937 assignment
938 funcall
939 ]
940 } yield: { El })
941 } yield: {
942 if: (Messages length) = 0 {
943 Messages <- []
944 }
921 #{ 945 #{
922 messages <- Messages 946 messages <- Messages
923 string <- { 947 string <- {
924 "#{\n\t". ((messages map: :el { 948 "#{\n\t". ((messages map: :el {
925 string: el 949 string: el